From a977ca5878b63a2929cee66ac65d8fa6c13b9f29 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr>
Date: Mon, 26 Apr 2021 18:39:26 +0200
Subject: [PATCH] Ticket 316 on arrows from activities in Aactivity Diagram
 solved

---
 src/main/java/ui/TGComponent.java             | 19 +++++++++++++++++++
 src/main/java/ui/TGConnectingPoint.java       |  6 +++++-
 src/main/java/ui/TGConnector.java             | 11 ++++++++---
 .../ui/avatarad/AvatarADConnectingPoint.java  | 13 +++++++++++++
 4 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/src/main/java/ui/TGComponent.java b/src/main/java/ui/TGComponent.java
index 08068d5462..8bfa5cbdba 100644
--- a/src/main/java/ui/TGComponent.java
+++ b/src/main/java/ui/TGComponent.java
@@ -3437,6 +3437,25 @@ public abstract class TGComponent  extends AbstractCDElement implements /*CDElem
         return sb;
     }
 
+    public int getNbOfOccupiedPoints(boolean out) {
+        int cpt = 0;
+        for(TGConnectingPoint pt: connectingPoint) {
+            TGConnector connector = pt.getReferenceToConnector();
+            TGConnectingPoint cp;
+            if (connector != null) {
+                if (out) {
+                    cp = connector.getTGConnectingPointP1();
+                } else {
+                    cp = connector.getTGConnectingPointP2();
+                }
+                if (cp == pt) {
+                    cpt++;
+                }
+            }
+        }
+        return cpt;
+    }
+
     public void loadExtraParam(NodeList nl, int decX, int decY, int decId) throws MalformedModelingException {
         return;
     }
diff --git a/src/main/java/ui/TGConnectingPoint.java b/src/main/java/ui/TGConnectingPoint.java
index cbe34bd8aa..d458176540 100644
--- a/src/main/java/ui/TGConnectingPoint.java
+++ b/src/main/java/ui/TGConnectingPoint.java
@@ -279,7 +279,6 @@ public class TGConnectingPoint extends AbstractCDElement /*implements CDElement*
     public void setFree(boolean b) {
         /*TraceManager.addDev("Setting connecting point as free=" + b + " point=" + this);
 
-
           for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
           TraceManager.addDev(ste.toString());
           }*/
@@ -288,6 +287,11 @@ public class TGConnectingPoint extends AbstractCDElement /*implements CDElement*
         if (cpg != null) {
             cpg.setFree(b);
         }
+
+        if (free) {
+            referenceToConnector = null;
+        }
+
     }
     
     @Override
diff --git a/src/main/java/ui/TGConnector.java b/src/main/java/ui/TGConnector.java
index b49d8863ee..a949393331 100644
--- a/src/main/java/ui/TGConnector.java
+++ b/src/main/java/ui/TGConnector.java
@@ -77,11 +77,14 @@ public abstract class TGConnector extends TGCScalableWithInternalComponent {
 
     // WARNING: point of connectors must be put first in the list of internal components ...
 
-    public TGConnector(int _x, int _y, int _minX, int _maxX, int _minY, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp, TGConnectingPoint _p1, TGConnectingPoint _p2, Vector<Point> _listPoint) {
+    public TGConnector(int _x, int _y, int _minX, int _maxX, int _minY, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp,
+                       TGConnectingPoint _p1, TGConnectingPoint _p2, Vector<Point> _listPoint) {
         super(_x, _y,  _minX, _maxX, _minY, _maxY, _pos, _father, _tdp);
         
-        p1 = _p1;
-        p2 = _p2;
+        setP1(_p1);
+        setP2(_p2);
+
+
 	
         //initScaling(0, 0);
         initPoints( _listPoint );
@@ -249,10 +252,12 @@ public abstract class TGConnector extends TGCScalableWithInternalComponent {
 
     public void setP1(TGConnectingPoint p) {
         p1 = p;
+        p1.setReferenceToConnector(this);
     }
 
     public void setP2(TGConnectingPoint p) {
         p2 = p;
+        p2.setReferenceToConnector(this);
     }
 
     public boolean isP1(CDElement cd) {
diff --git a/src/main/java/ui/avatarad/AvatarADConnectingPoint.java b/src/main/java/ui/avatarad/AvatarADConnectingPoint.java
index 607ee7b091..3608dda1b5 100644
--- a/src/main/java/ui/avatarad/AvatarADConnectingPoint.java
+++ b/src/main/java/ui/avatarad/AvatarADConnectingPoint.java
@@ -40,6 +40,7 @@ package ui.avatarad;
 
 import ui.CDElement;
 import ui.TGComponentManager;
+import ui.TGConnectingPoint;
 import ui.TGConnectingPointWidthHeight;
 
 /**
@@ -54,9 +55,21 @@ public class AvatarADConnectingPoint extends TGConnectingPointWidthHeight {
     public AvatarADConnectingPoint(CDElement _container, int _x, int _y, boolean _in, boolean _out, double _w, double _h) {
         super(_container, _x, _y, _in, _out, _w, _h);
     }
+
     
     @Override
     public boolean isCompatibleWith(int type) {
         return type == TGComponentManager.AAD_ASSOCIATION_CONNECTOR;
     }
+
+    public boolean isCompatibleWith(int type, TGConnectingPoint outPoint) {
+        if (getFather() instanceof AvatarADActivity) {
+            AvatarADActivity act = (AvatarADActivity)getFather();
+            int nb = act.getNbOfOccupiedPoints(outPoint == null);
+            if (nb > 0) {
+                return false;
+            }
+        }
+        return true;
+    }
 }
-- 
GitLab