-
Ludovic Apvrille authoredLudovic Apvrille authored
SequenceDiagramPanel.java 12.74 KiB
/* 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.sd;
import myutil.NameChecker;
import ui.*;
import java.awt.*;
import java.util.Iterator;
import java.util.Vector;
//import java.awt.*;
/**
* Class SequenceDiagramPanel
* Panel for drawing a sequence diagram
* Creation: 30/09/2004
* @version 1.0 30/09/2004
* @author Ludovic APVRILLE
*/
public class SequenceDiagramPanel extends TDiagramPanel implements NameChecker.SystemWithNamedElements {
public SequenceDiagramPanel(MainGUI mgui, TToolBar _ttb) {
super(mgui, _ttb);
/*TDiagramMouseManager tdmm = new TDiagramMouseManager(this);
addMouseListener(tdmm);
addMouseMotionListener(tdmm);*/
}
public boolean actionOnDoubleClick(TGComponent tgc) {
//
/*if (tgc instanceof TCDTClass) {
TCDTClass t = (TCDTClass)tgc;
return mgui.newTClassName(t.oldValue, t.getValue());
} else if (tgc instanceof TCDActivityDiagramBox) {
if (tgc.getFather() instanceof TCDTClass) {
mgui.selectTab(tgc.getFather().getValue());
} else if (tgc.getFather() instanceof TCDTObject) {
TCDTObject to = (TCDTObject)(tgc.getFather());
TCDTClass t = to.getMasterTClass();
if (t != null) {
mgui.selectTab(t.getValue());
}
}
return false; // because no change made on any diagram
}*/
return false;
}
public boolean actionOnAdd(TGComponent tgc) {
/*if (tgc instanceof TCDTClass) {
TCDTClass tgcc = (TCDTClass)(tgc);
mgui.addTClass(tgcc.getClassName());
return true;
}*/
return false;
}
public boolean actionOnRemove(TGComponent tgc) {
/*if (tgc instanceof TCDTClass) {
TCDTClass tgcc = (TCDTClass)(tgc);
mgui.removeTClass(tgcc.getClassName());
resetAllInstancesOf(tgcc);
return true;
}*/
return false;
}
public boolean actionOnValueChanged(TGComponent tgc) {
/*if (tgc instanceof TCDTClass) {
return actionOnDoubleClick(tgc);
}*/
return false;
}
public String getXMLHead() {
return "<SequenceDiagramPanel name=\"" + name + "\"" + sizeParam() + " >";
}
public String getXMLTail() {
return "</SequenceDiagramPanel>";
}
public String getXMLSelectedHead() {
return "<SequenceDiagramPanelCopy name=\"" + name + "\" xSel=\"" + xSel + "\" ySel=\"" + ySel + "\" widthSel=\"" + widthSel + "\" heightSel=\"" + heightSel +
"\"" + zoomParam() + ">";
}
public String getXMLSelectedTail() {
return "</SequenceDiagramPanelCopy>";
}
public String getXMLCloneHead() {
return "<SequenceDiagramPanelCopy name=\"" + name + "\" xSel=\"" + 0 + "\" ySel=\"" + 0 + "\" widthSel=\"" + 0 + "\" heightSel=\"" + 0 +
"\"" + zoomParam() + ">";
}
public String getXMLCloneTail() {
return "</SequenceDiagramPanelCopy>";
}
public void makePostLoadingProcessing() throws MalformedModelingException {
TGComponent tgc;
/*for(int i=0; i<componentList.size(); i++) {
tgc = (TGComponent)(componentList.elementAt(i));
if (tgc instanceof TCDTObject) {
((TCDTObject)tgc).postLoadingProcessing();
}
}*/
}
public SDInstance getSDInstance(String name) {
TGComponent tgc;
Iterator iterator = componentList.listIterator();
while(iterator.hasNext()) {
tgc = (TGComponent)(iterator.next());
if (tgc instanceof SDInstance) {
if (tgc.getValue().compareTo(name) ==0) {
return (SDInstance)tgc;
}
}
}
return null;
}
public void alignInstances() {
SDInstance ontheLeft = null, sdi;
int x = getMaxX(),xtmp;
int y;
int i;
TGComponent tgc;
Iterator iterator = componentList.listIterator();
// search for the instances which is the most on the left
while(iterator.hasNext()) {
tgc = (TGComponent)(iterator.next());
if (tgc instanceof SDInstance) {
xtmp = tgc.getX();
if (xtmp < x) {
x = xtmp;
ontheLeft = (SDInstance)tgc;
}
}
}
if (ontheLeft == null)
return;
// move accordingly other instances
y = ontheLeft.getY();
iterator = componentList.listIterator();
while(iterator.hasNext()) {
tgc = (TGComponent)(iterator.next());
if ((tgc instanceof SDInstance) && (tgc != ontheLeft)){
tgc.setCd(tgc.getX(), y);
}
}
}
public TGConnectorRelativeTimeSD firstAndConnectedSDRelativeTimeConstraint(TGComponent tgc) {
TGComponent tmp;
TGConnectingPoint p1;
Iterator iterator = componentList.listIterator();
while(iterator.hasNext()) {
tmp = (TGComponent)(iterator.next());
if (tmp instanceof TGConnectorRelativeTimeSD){
p1 = ((TGConnector)tmp).getTGConnectingPointP1();
if (tgc.belongsToMe(p1)) {
return (TGConnectorRelativeTimeSD)tmp;
}
}
}
return null;
}
public TGComponent getSecondTGComponent(TGConnector tgco) {
TGComponent tmp;
TGComponent tmp1;
TGConnectingPoint p2 = tgco.getTGConnectingPointP2();
Iterator iterator = componentList.listIterator();
while(iterator.hasNext()) {
tmp = (TGComponent)(iterator.next());
tmp1 = tmp.belongsToMeOrSon(p2);
if (tmp1 != null) {
return tmp1;
}
}
return null;
}
public TGConnector messageActionCloserTo(TGComponent tgc, SDInstance sd) {
int distance = 25;
TGConnector found = null;
TGComponent tmp;
TGConnectingPoint p;
Iterator iterator = componentList.listIterator();
while(iterator.hasNext()) {
tmp = (TGComponent)(iterator.next());
if (tmp instanceof TGConnectorMessageSD){
p = ((TGConnector)tmp).getTGConnectingPointP1();
if (sd.belongsToMe(p)) {
if (Math.abs(p.getY() - tgc.getY()) < distance) {
distance = Math.abs(p.getY() - tgc.getY());
found = (TGConnector)tmp;
}
}
p = ((TGConnector)tmp).getTGConnectingPointP2();
if (sd.belongsToMe(p)) {
if (Math.abs(p.getY() - tgc.getY()) < distance) {
distance = Math.abs(p.getY() - tgc.getY());
found = (TGConnector)tmp;
}
}
}
}
return found;
}
public TGConnectingPoint TGConnectingPointActionCloserTo(TGComponent tc1, TGConnector tgco, SDInstance sdi) {
TGConnectingPoint p1, p2;
p1 = tgco.getTGConnectingPointP1();
p2 = tgco.getTGConnectingPointP2();
boolean hasp1 = sdi.belongsToMe(p1);
boolean hasp2 = sdi.belongsToMe(p2);
if ((!hasp1) && (!hasp2)) {
return null;
}
if ((hasp1) && (!hasp2)) {
return p1;
}
if ((!hasp1) && (hasp2)) {
return p2;
}
// both belongs to the sdinstance
int y1 = p1.getY();
int y2 = p2.getY();
if ((Math.abs(y2-tc1.getY())) < ((Math.abs(y1-tc1.getY())))) {
return p2;
} else {
return p1;
}
}
public TGComponent getActionCloserTo(int y, SDInstance sdi) {
int distance = 25;
TGComponent tgc, found = null;
//
for(int i=0; i<sdi.getNbInternalTGComponent(); i++) {
tgc = sdi.getInternalTGComponent(i) ;
//
if (tgc instanceof SDActionState) {
if (Math.abs(y-tgc.getY()) < distance) {
//
found = tgc;
distance = Math.abs(y-tgc.getY());
} else {
//
}
}
}
return found;
}
public void increaseInstanceSize(int size) {
Iterator iterator = componentList.listIterator();
TGComponent tgc;
int maxYH = 0;
while(iterator.hasNext()) {
tgc = (TGComponent)(iterator.next());
if (tgc instanceof SDInstance) {
tgc.setUserResize(tgc.getX(), tgc.getY(), tgc.getWidth(), tgc.getHeight() + size);
}
maxYH = Math.max(maxYH, tgc.getY() + tgc.getHeight());
}
if (maxYH > getMaxY()) {
setMaxY(getMaxY() + increment);
updateSize();
}
}
public void updateAllInstanceMinMaxSize() {
Iterator iterator = componentList.listIterator();
TGComponent tgc;
int minSize = 0;
while(iterator.hasNext()) {
tgc = (TGComponent)(iterator.next());
if (tgc instanceof SDInstance) {
minSize = Math.max(((SDInstance)tgc).getMinHeightSize(), minSize);
}
}
iterator = componentList.listIterator();
while(iterator.hasNext()) {
tgc = (TGComponent)(iterator.next());
if (tgc instanceof SDInstance) {
((SDInstance)tgc).setMinHeight(minSize);
}
}
}
public void instanceHasBeenResized(SDInstance _ins, int _w, int _h) {
Iterator iterator = componentList.listIterator();
TGComponent tgc;
while(iterator.hasNext()) {
tgc = (TGComponent)(iterator.next());
if ((tgc instanceof SDInstance) && (tgc != _ins)) {
tgc.actionOnUserResize(_w, _h);
}
}
}
public void switchToSynchronousMessage(TGConnectorMessageAsyncSD oldOne) {
int x1 = oldOne.getX();
int y1 = oldOne.getY();
TGConnectingPoint p1 = oldOne.getTGConnectingPointP1();
TGConnectingPoint p2 = oldOne.getTGConnectingPointP2();
Vector<Point> listPoint = oldOne.getListOfPoints();
removeComponent(oldOne);
TGConnector newOne = TGComponentManager.addConnector(x1, y1, TGComponentManager.CONNECTOR_MESSAGE_SYNC_SD, this, p1, p2, listPoint);
addBuiltConnector(newOne);
//TraceManager.addDev("Element added");
repaint();
}
public void switchToAsynchronousMessage(TGConnectorMessageSyncSD oldOne) {
int x1 = oldOne.getX();
int y1 = oldOne.getY();
TGConnectingPoint p1 = oldOne.getTGConnectingPointP1();
TGConnectingPoint p2 = oldOne.getTGConnectingPointP2();
Vector<Point> listPoint = oldOne.getListOfPoints();
removeComponent(oldOne);
TGConnector newOne = TGComponentManager.addConnector(x1, y1, TGComponentManager.CONNECTOR_MESSAGE_ASYNC_SD, this, p1, p2, listPoint);
addBuiltConnector(newOne);
//TraceManager.addDev("Element added");
repaint();
}
}