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