/* 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.TraceManager; import java.awt.*; import java.util.Vector; //import java.awt.geom.*; /** * Class TGConnectorWithCommentConnectingPoints * Generic (abstract class) Connector With Comment * Creation: 25/05/2011 * @version 1.0 25/05/2011 * @author Ludovic APVRILLE */ public abstract class TGConnectorWithCommentConnectionPoints extends TGConnector { protected TGConnectingPointGroup tg; /** * Fills the points array witht the current points, * P1 = initial point, P2 = destination point * */ public TGConnectorWithCommentConnectionPoints(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); // We create a connecting point per segment i.e : nbConnectingPoint = getNbInternalPoints() + 1; TGCPointOfConnector [] points = new TGCPointOfConnector[nbConnectingPoint]; getTGCPointOfConnectors(points); //Connecting points have cd relatives to 2 component connectingPoint = new TGConnectingPointTwoFathers[nbConnectingPoint]; if (nbConnectingPoint == 1) connectingPoint[0] = new TGConnectingPointCommentConnector(p1, p2, 0, 0, true, true); else { connectingPoint[0] = new TGConnectingPointCommentConnector(p1, points[0], 0, 0, true, true); for (int i = 1; i < nbInternalTGComponent; i++) connectingPoint[i] = new TGConnectingPointCommentConnector(points[i-1], points[i], 0, 0, true, true); connectingPoint[nbInternalTGComponent] = new TGConnectingPointCommentConnector(points[nbInternalTGComponent-1], p2, 0, 0, true, true); } tg = new TGConnectingPointGroup(true); addGroup(tg); //myImageIcon = IconManager.imgic102; } /** * setP1: initial point * @param p TGConnectingPoint * */ @Override public void setP1(TGConnectingPoint p) { p1 = p; if (nbConnectingPoint > 0) { connectingPoint[0].setFather(p); } } /** * setP2: destination point * @param TGConnectingPoint p */ @Override public void setP2(TGConnectingPoint p) { p2 = p; if (nbConnectingPoint > 0) { ((TGConnectingPointCommentConnector)(connectingPoint[getNbInternalPoints()])).setFather2(p); } } /** * @param tgc TGCPointOfConnector */ @Override public void pointHasBeenRemoved(TGCPointOfConnector tgc) { TraceManager.addDev("Internal Points:" + nbInternalTGComponent); int i, index = 0; TGConnectingPointTwoFathers cp1, cp2; boolean found = false; // We remove the one after tgc, and we keep the previous one // I.e. we remove the point which father1 is tgc // Looking for the connecting point that has been removed for (i = 0; i < nbConnectingPoint; i++) { if (connectingPoint[i].getFather() == tgc) { index = i; found = true; break; } } TraceManager.addDev("Index of points: " + index + " found=" + found); // Remove potential connector connected to the cp to be removed cp1 = (TGConnectingPointTwoFathers)(connectingPoint[index]); TGConnector tgcon = tdp.getConnectorConnectedTo(cp1); if (tgcon == null) { TraceManager.addDev("No connector found"); } else { TraceManager.addDev("Connector found"); } //tdp.removeOneConnector(cp1); // Changing father of points. if (index > 0) { cp2 = (TGConnectingPointTwoFathers)(connectingPoint[index-1]); cp2.setFather2(cp1.getFather2()); if (tgcon != null) { if (tgcon.getTGConnectingPointP1() == cp1) { tgcon.setP1(cp2); } else { tgcon.setP2(cp2); } } } // Modifying array of connecting points for (i = index; i<nbConnectingPoint-1; i++) { connectingPoint[i] = connectingPoint[i+1]; } nbConnectingPoint --; } @Override public void pointHasBeenAdded(TGCPointOfConnector tgc, int index, int indexCon) { int ind = index + indexCon; CDElement tg1, tg2; nbConnectingPoint = getNbInternalPoints() + 1; TGConnectingPoint[] tmpPt = new TGConnectingPointTwoFathers[nbConnectingPoint]; TGCPointOfConnector [] points = new TGCPointOfConnector[nbConnectingPoint]; getTGCPointOfConnectors(points); for(int i=0; i<nbConnectingPoint; i++) { if (i < ind) { tmpPt[i] = connectingPoint[i]; if ((i == ind - 1) && (indexCon == 1)){ ((TGConnectingPointTwoFathers)(tmpPt[i])).setFather2(points[i]); } } else if (i == ind) { if (i ==0) { tg1 = p1; } else { tg1 = points[i-1]; } if (i <nbConnectingPoint - 1) { tg2 = points[i]; } else { tg2 = p2; } tmpPt[i] = new TGConnectingPointCommentConnector(tg1, tg2, 0, 0, true, true); tmpPt[i].setGroup(tg); } else { tmpPt[i] = connectingPoint[i-1]; if ((i == ind + 1) && (indexCon == 0)){ tmpPt[i].setFather(points[i-1]); } } } connectingPoint = tmpPt; return; } /*public int getType() { return TGComponentManager.CONNECTOR_ASSOCIATION; } public int getDefaultConnector() { return TGComponentManager.CONNECTOR_ATTRIBUTE; }*/ }