From 3f0044cf1acad55c99208ff824bf7b32f26bd6ac Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Tue, 5 Jan 2021 16:03:51 +0100
Subject: [PATCH] Adding multiplicities. Not yet displayed

---
 .../java/ui/TGConnectorWithMultiplicity.java  | 148 ++++++++++++++++++
 .../AvatarCDAggregationConnector.java         |  30 +---
 src/main/java/ui/avatarcd/AvatarCDBlock.java  |   2 +-
 3 files changed, 153 insertions(+), 27 deletions(-)
 create mode 100644 src/main/java/ui/TGConnectorWithMultiplicity.java

diff --git a/src/main/java/ui/TGConnectorWithMultiplicity.java b/src/main/java/ui/TGConnectorWithMultiplicity.java
new file mode 100644
index 0000000000..76ca846089
--- /dev/null
+++ b/src/main/java/ui/TGConnectorWithMultiplicity.java
@@ -0,0 +1,148 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ * 
+ * ludovic.apvrille AT enst.fr
+ * 
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ * 
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ * 
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ * 
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ * 
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package ui;
+
+import myutil.GraphicLib;
+import myutil.TraceManager;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import ui.window.JDialogMultiString;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.Vector;
+
+//import java.awt.geom.*;
+
+
+/**
+   * Class TGConnectorWithMultiplicity
+   * Generic (abstract class) Connector With multiplicity
+   * Creation: 05/01/2021
+   * @version 1.0 05/01/2021
+   * @author Ludovic APVRILLE
+ */
+public abstract class TGConnectorWithMultiplicity extends TGConnectorWithCommentConnectionPoints {
+    protected String originMultiplicity, destinationMultiplicity;
+
+    public TGConnectorWithMultiplicity(int _x, int _y, int _minX, int _minY, int _maxX, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp, TGConnectingPoint _p1, TGConnectingPoint _p2, Vector<Point> _listPoint) {
+        super(_x, _y,  _minX, _minY, _maxX, _maxY, _pos, _father, _tdp, _p1, _p2, _listPoint);
+
+        originMultiplicity = "";
+        destinationMultiplicity = "";
+    }
+
+    @Override
+    protected String translateExtraParam() {
+        StringBuffer sb = new StringBuffer("<extraparam>\n");
+
+        sb.append("<multiplicity origin=\"");
+        sb.append(originMultiplicity);
+        sb.append("\" destination=\"");
+        sb.append(destinationMultiplicity);
+        sb.append("\" />\n");
+
+        sb.append("</extraparam>\n");
+        return new String(sb);
+    }
+
+    @Override
+    public boolean editOndoubleClick(JFrame frame) {
+        String [] labels = {"origin", "destination"};
+        String [] values = new String[2];
+        values[0] = originMultiplicity;
+        values[1] = destinationMultiplicity;
+
+        JDialogMultiString jdms = new JDialogMultiString(frame, "Multiplicity", 2, labels, values);
+        GraphicLib.centerOnParent(jdms, 500, 300);
+        jdms.setVisible(true); // blocked until dialog has been closed
+
+        if (jdms.hasBeenSet()) {
+            originMultiplicity = jdms.getString(0);
+            destinationMultiplicity = jdms.getString(1);
+            return true;
+        }
+
+        return false;
+    }
+
+    @Override
+    public void loadExtraParam(NodeList nl, int decX, int decY, int decId) throws MalformedModelingException {
+        try {
+            NodeList nli;
+            Node n1, n2;
+            Element elt;
+            String valO, valD;
+
+            //
+            //
+
+            for (int i = 0; i < nl.getLength(); i++) {
+                n1 = nl.item(i);
+                //
+                if (n1.getNodeType() == Node.ELEMENT_NODE) {
+                    nli = n1.getChildNodes();
+                    for (int j = 0; j < nli.getLength(); j++) {
+                        n2 = nli.item(j);
+                        //
+                        if (n2.getNodeType() == Node.ELEMENT_NODE) {
+                            elt = (Element) n2;
+                            if (elt.getTagName().equals("multiplicity")) {
+                                valO = elt.getAttribute("origin");
+                                if ((valO != null) && (!(valO.equals("null")))) {
+                                    originMultiplicity = valO;
+                                }
+                                valD = elt.getAttribute("destination");
+                                if ((valD != null) && (!(valD.equals("null")))) {
+                                    destinationMultiplicity = valD;
+                                }
+                            }
+
+                        }
+                    }
+                }
+            }
+
+        } catch (Exception e) {
+            throw new MalformedModelingException(e);
+        }
+    }
+
+}
diff --git a/src/main/java/ui/avatarcd/AvatarCDAggregationConnector.java b/src/main/java/ui/avatarcd/AvatarCDAggregationConnector.java
index 876f46b9f2..97a47b1db1 100644
--- a/src/main/java/ui/avatarcd/AvatarCDAggregationConnector.java
+++ b/src/main/java/ui/avatarcd/AvatarCDAggregationConnector.java
@@ -51,7 +51,7 @@ import java.util.Vector;
 * @version 1.0 05/01/2021
 * @author Ludovic APVRILLE
  */
-public  class AvatarCDAggregationConnector extends TGConnectorWithCommentConnectionPoints /* Issue #31 implements ScalableTGComponent*/ {
+public  class AvatarCDAggregationConnector extends TGConnectorWithMultiplicity /* Issue #31 implements ScalableTGComponent*/ {
     protected int d = 20;
 	protected int D = 26;
     //protected int widthValue, heightValue, maxWidthValue, h;
@@ -155,31 +155,9 @@ public  class AvatarCDAggregationConnector extends TGConnectorWithCommentConnect
 		
         return null;
     }
-	
-//	Issue #31 Now managed in upper class 
-//    public void rescale(double scaleFactor){
-//		//
-//		int xx, yy;
-//		
-//		for(int i=0; i<nbInternalTGComponent; i++) {
-//			xx = tgcomponent[i].getX();
-//			yy = tgcomponent[i].getY();
-//			//
-//			tgcomponent[i].dx = (tgcomponent[i].dx + xx) / oldScaleFactor * scaleFactor;
-//			tgcomponent[i].dy = (tgcomponent[i].dy + yy) / oldScaleFactor * scaleFactor;
-//			xx = (int)(tgcomponent[i].dx);
-//			tgcomponent[i].dx = tgcomponent[i].dx - xx;
-//			yy = (int)(tgcomponent[i].dy);
-//			tgcomponent[i].dy = tgcomponent[i].dy - yy;
-//			
-//			tgcomponent[i].setCd(xx, yy);
-//			
-//			//
-//        }
-//		
-//		oldScaleFactor = scaleFactor;
-//		rescaled = true;
-//	}
+
+
+
     
 	@Override
     public int getType() {
diff --git a/src/main/java/ui/avatarcd/AvatarCDBlock.java b/src/main/java/ui/avatarcd/AvatarCDBlock.java
index c5865b54e1..d45591525f 100644
--- a/src/main/java/ui/avatarcd/AvatarCDBlock.java
+++ b/src/main/java/ui/avatarcd/AvatarCDBlock.java
@@ -180,7 +180,7 @@ public class AvatarCDBlock extends TGCScalableWithInternalComponent implements S
         if (currentHeight < height) {
             //g.drawLine(x, y+h, x+width, y+h);
             g.setColor(new Color(avat.getRed(), avat.getGreen(), Math.min(255, avat.getBlue() + (getMyDepth() * 10))));
-            g.fill3DRect(x + 1, y + currentHeight+1, width - 1, height - 1 - currentHeight, true);
+            g.fill3DRect(x + 1, y + currentHeight+2, width - 1, height - 1 - currentHeight, true);
             g.setColor(c);
         }
     }
-- 
GitLab