diff --git a/src/main/java/ui/TGComponent.java b/src/main/java/ui/TGComponent.java index 08068d5462bfaae39aa61b8de4c0b038acecf51c..8bfa5cbdba9bd9cc5ccd3faa494abeb179b80cf8 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 cbe34bd8aaa66848cda93e7904f003434d6c1fef..d4581765403a147b90a738be99ef69a1a0385104 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 b49d8863ee03c20013e30a938782325b8ffde4c1..a949393331bf47ae08675b07ee8f17dcd7640ce0 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 607ee7b091f836835dce051d07551b1d627140ec..3608dda1b5fec7575e80e57c18720af03ad8d40f 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; + } }