From 0a4564fe05889e67a285e31d3e8fcb4c0d8445ab Mon Sep 17 00:00:00 2001 From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr> Date: Tue, 22 Mar 2022 11:33:18 +0100 Subject: [PATCH] Resolving bug on undeclared variable in notified event --- .../ui/ActivityDiagram2TMLTranslator.java | 38 ++++++-- src/main/java/ui/DrawerTMLModeling.java | 91 +++++++++++++++++- src/main/java/ui/TGCTimeDelay.java | 1 + src/main/java/ui/ad/TADExec.java | 2 - src/main/java/ui/tmlad/TMLADDelay.java | 10 ++ .../java/ui/tmlad/TMLADDelayInterval.java | 8 ++ src/main/java/ui/tmlad/TMLADExecC.java | 92 +------------------ .../java/ui/tmlad/TMLADExecCInterval.java | 85 +---------------- src/main/java/ui/tmlad/TMLADForLoop.java | 7 ++ .../java/ui/tmlad/TMLADNotifiedEvent.java | 7 +- 10 files changed, 155 insertions(+), 186 deletions(-) diff --git a/src/main/java/ui/ActivityDiagram2TMLTranslator.java b/src/main/java/ui/ActivityDiagram2TMLTranslator.java index 7de11fb006..b2012f886f 100644 --- a/src/main/java/ui/ActivityDiagram2TMLTranslator.java +++ b/src/main/java/ui/ActivityDiagram2TMLTranslator.java @@ -647,13 +647,37 @@ public class ActivityDiagram2TMLTranslator { ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.UNKNOWN); } } else { - event.setNotified(true); - tmlnotifiedevent = new TMLNotifiedEvent("notified event", tgc); - tmlnotifiedevent.setEvent(event); - tmlnotifiedevent.setVariable(modifyString(((TMLADNotifiedEvent)tgc).getVariable())); - activity.addElement(tmlnotifiedevent); - ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK); - corrTgElement.addCor(tmlnotifiedevent, tgc); + // We have to check that the variable is a valid (natural) attribute + String variable = ((TMLADNotifiedEvent)tgc).getVariable(); + TMLAttribute t = tmltask.getAttributeByName(variable); + if (t == null) { + UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, ((TMLADNotifiedEvent)tgc).getVariable() + " is an " + + "undeclared attribute"); + ce.setTDiagramPanel(tadp); + ce.setTGComponent(tgc); + checkingErrors.add(ce); + ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.UNKNOWN); + } else { + if (!t.isNat()) { + UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, ((TMLADNotifiedEvent)tgc).getVariable() + " is an " + + " attribute of the wrong type. Should be a Natural"); + ce.setTDiagramPanel(tadp); + ce.setTGComponent(tgc); + checkingErrors.add(ce); + ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.UNKNOWN); + } else { + + event.setNotified(true); + tmlnotifiedevent = new TMLNotifiedEvent("notified event", tgc); + tmlnotifiedevent.setEvent(event); + + + tmlnotifiedevent.setVariable(modifyString(((TMLADNotifiedEvent) tgc).getVariable())); + activity.addElement(tmlnotifiedevent); + ((BasicErrorHighlight) tgc).setStateAction(ErrorHighlight.OK); + corrTgElement.addCor(tmlnotifiedevent, tgc); + } + } } } else if (tgc instanceof TMLADWaitEvent) { diff --git a/src/main/java/ui/DrawerTMLModeling.java b/src/main/java/ui/DrawerTMLModeling.java index b4c43085fd..ebf6b4e062 100644 --- a/src/main/java/ui/DrawerTMLModeling.java +++ b/src/main/java/ui/DrawerTMLModeling.java @@ -70,7 +70,7 @@ public class DrawerTMLModeling { private final static int XCENTER = 500; private final static int YCENTER = 450; - private final static int DEC_COMP_Y = 50; + private final static int DEC_COMP_Y = 45; private MainGUI mgui; @@ -457,18 +457,18 @@ public class DrawerTMLModeling { TraceManager.addDev("Current first elt:" + elt); if (elt instanceof TMLActionState) { - TMLADActionState actionState = new TMLADActionState(firstGUI.getX(), firstGUI.getY()+DEC_COMP_Y, activityPanel.getMinX(), + TMLADActionState actionState = new TMLADActionState(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); actionState.setValue( ((TMLActionState)elt).getAction()); return actionState; } else if (elt instanceof TMLStopState) { - TMLADStopState stopState = new TMLADStopState(firstGUI.getX(), firstGUI.getY()+DEC_COMP_Y, activityPanel.getMinX(), + TMLADStopState stopState = new TMLADStopState(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); return stopState; } else if (elt instanceof TMLSequence) { - TMLADSequence sequence = new TMLADSequence(firstGUI.getX(), firstGUI.getY()+DEC_COMP_Y, activityPanel.getMinX(), + TMLADSequence sequence = new TMLADSequence(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); return sequence; @@ -476,21 +476,102 @@ public class DrawerTMLModeling { TMLChoice ch = (TMLChoice) elt; check( ch.getNbGuard() < 4, "Too many guards in a choice in component " + comp.getValue() + "/" + ch.customExtraToXML()); - TMLADChoice choice = new TMLADChoice(firstGUI.getX(), firstGUI.getY()+DEC_COMP_Y, activityPanel.getMinX(), + TMLADChoice choice = new TMLADChoice(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); for(int i=0; i<ch.getNbGuard(); i++) { choice.setGuard(i, ch.getGuard(i)); } return choice; + } else if (elt instanceof TMLDelay) { + TMLDelay de = (TMLDelay) elt; + + if (de.getMinDelay().compareTo(de.getMaxDelay()) == 0) { + TMLADDelay delay = new TMLADDelay(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), + activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); + delay.setDelayValue(de.getMinDelay()); + delay.setUnit(de.getUnit()); + delay.setActiveDelayEnable(de.getActiveDelay()); + return delay; + } else { + TMLADDelayInterval delay = new TMLADDelayInterval(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), + activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); + delay.setMinValue(de.getMinDelay()); + delay.setMaxValue(de.getMaxDelay()); + delay.setUnit(de.getUnit()); + delay.setActiveDelayEnable(de.getActiveDelay()); + return delay; + } + + } else if (elt instanceof TMLExecC) { + TMLExecC execc = (TMLExecC) elt; + + TMLADExecC exec = new TMLADExecC(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), + activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); + + exec.setDelayValue(execc.getAction()); + return exec; + + } else if (elt instanceof TMLExecCInterval) { + TMLExecCInterval execc = (TMLExecCInterval) elt; + + TMLADExecCInterval exec = new TMLADExecCInterval(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), + activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); + + exec.setMinValue(execc.getMinDelay()); + exec.setMaxValue(execc.getMaxDelay()); + return exec; + } else if (elt instanceof TMLExecI) { + TMLExecI execc = (TMLExecI) elt; + + TMLADExecI exec = new TMLADExecI(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), + activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); + + exec.setDelayValue(execc.getAction()); + return exec; + + } else if (elt instanceof TMLExecIInterval) { + TMLExecIInterval execc = (TMLExecIInterval) elt; + + TMLADExecIInterval exec = new TMLADExecIInterval(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), + activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); + + exec.setMinValue(execc.getMinDelay()); + exec.setMaxValue(execc.getMaxDelay()); + return exec; + + } else if (elt instanceof TMLForLoop) { + TMLForLoop loopT = (TMLForLoop)elt; + TMLADForLoop loop = new TMLADForLoop(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), + activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); + + loop.setOptions(loopT.getInit(), loopT.getCondition(), loopT.getIncrement()); + return loop; + + } else if (elt instanceof TMLNotifiedEvent) { + TMLNotifiedEvent notifiedT = (TMLNotifiedEvent)elt; + TMLADNotifiedEvent notified = new TMLADNotifiedEvent(firstGUI.getX(), firstGUI.getY()+getYDep(), activityPanel.getMinX(), + activityPanel.getMaxX(), activityPanel.getMinY(), activityPanel.getMaxY(), true, null, activityPanel); + + notified.setEventName(notifiedT.getEvent().getName()); + notified.setResult(notifiedT.getVariable()); + return notified; } + + + //throw new MalformedTMLDesignException("Unsupported TML component:" + elt); + return null; } + private int getYDep() { + return DEC_COMP_Y + (int)(Math.random()*DEC_COMP_Y/2); + } + private void connectComponents(TGComponent tgc1, TGComponent tgc2, TMLActivityDiagramPanel activityPanel) throws MalformedTMLDesignException { TGConnectingPoint p1 = tgc1.findFirstFreeTGConnectingPoint(true, false); check(p1 != null, diff --git a/src/main/java/ui/TGCTimeDelay.java b/src/main/java/ui/TGCTimeDelay.java index 237a6e314a..4a219d7fd5 100644 --- a/src/main/java/ui/TGCTimeDelay.java +++ b/src/main/java/ui/TGCTimeDelay.java @@ -204,6 +204,7 @@ public class TGCTimeDelay extends TGCWithoutInternalComponent{ public void setUnit(String _unit) { unit = _unit; + makeValue(); } public String getUnit() { diff --git a/src/main/java/ui/ad/TADExec.java b/src/main/java/ui/ad/TADExec.java index 37701331c3..e3c7b22f05 100755 --- a/src/main/java/ui/ad/TADExec.java +++ b/src/main/java/ui/ad/TADExec.java @@ -86,8 +86,6 @@ public abstract class TADExec extends TADComponentWithSubcomponents implements E connectingPoint[1] = createConnectingPoint(this, 0, + lineLength, false, true, 0.5, 1.0); initScaling( 10, 30 ); -// ilength = 10; -// lineLength1 = 2; textX = width + scale( 5 ); textY = height/2 + scale( 5 ); diff --git a/src/main/java/ui/tmlad/TMLADDelay.java b/src/main/java/ui/tmlad/TMLADDelay.java index 2d422174f5..ad822253cb 100755 --- a/src/main/java/ui/tmlad/TMLADDelay.java +++ b/src/main/java/ui/tmlad/TMLADDelay.java @@ -146,6 +146,16 @@ public class TMLADDelay extends TADComponentWithSubcomponents /* Issue #69 TGCWi } public boolean getActiveDelayEnable(){return ((TGCTimeDelay)tgcomponent[0]).getActiveDelay(); } + + public void setActiveDelayEnable(boolean active) { + ((TGCTimeDelay)tgcomponent[0]).setActiveDelay(active); + } + + public void setUnit(String unit) { + ((TGCTimeDelay)tgcomponent[0]).setUnit(unit); + } + + @Override public int getType() { return TGComponentManager.TMLAD_DELAY; diff --git a/src/main/java/ui/tmlad/TMLADDelayInterval.java b/src/main/java/ui/tmlad/TMLADDelayInterval.java index ed472c9001..0a6741e1a7 100755 --- a/src/main/java/ui/tmlad/TMLADDelayInterval.java +++ b/src/main/java/ui/tmlad/TMLADDelayInterval.java @@ -167,6 +167,14 @@ public class TMLADDelayInterval extends TADComponentWithSubcomponents /* Issue # public boolean getActiveDelayEnableValue(){return ((TGCTimeDelay)tgcomponent[0]).getActiveDelay(); } + public void setActiveDelayEnable(boolean active) { + ((TGCTimeDelay)tgcomponent[0]).setActiveDelay(active); + } + + public void setUnit(String unit) { + ((TGCTimeDelay)tgcomponent[0]).setUnit(unit); + } + @Override public int getType() { return TGComponentManager.TMLAD_INTERVAL_DELAY; diff --git a/src/main/java/ui/tmlad/TMLADExecC.java b/src/main/java/ui/tmlad/TMLADExecC.java index 21765db6b9..776a690006 100755 --- a/src/main/java/ui/tmlad/TMLADExecC.java +++ b/src/main/java/ui/tmlad/TMLADExecC.java @@ -59,102 +59,12 @@ import ui.ad.TGConnectingPointAD; */ public class TMLADExecC extends TADExec /* Issue #31TADComponentWithSubcomponents *//* Issue #69 TGCWithInternalComponent*/ implements EmbeddedComment, AllowedBreakpoint, BasicErrorHighlight { - // Issue #31 - //private int lineLength = 5; - //private int textX, textY; - -// private int ilength;// = 10; -// private int lineLength1;// = 2; -// -// protected int stateOfError = 0; // Not yet checked public TMLADExecC(int _x, int _y, int _minX, int _maxX, int _minY, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp) { super(_x, _y, _minX, _maxX, _minY, _maxY, _pos, _father, _tdp, "execc value", "value of the delay" ); - - // Issue #31 -// width = 10; -// height = 30; -// initSize( 10, 30 ); -// ilength = scale( 10 ); -// lineLength1 = scale( 2 ); -// textX = width + scale( 5 ); -// textY = height/2 + scale( 5 ); -// -// nbConnectingPoint = 2; -// connectingPoint = new TGConnectingPoint[2]; -// connectingPoint[0] = new TGConnectingPointTMLAD(this, 0, -lineLength, true, false, 0.5, 0.0); -// connectingPoint[1] = new TGConnectingPointTMLAD(this, 0, + lineLength, false, true, 0.5, 1.0); -// -// nbInternalTGComponent = 1; -// tgcomponent = new TGComponent[nbInternalTGComponent]; -// -// TGCOneLineText tgc = new TGCOneLineText(x+textX, y+textY, -75, 30, textY - 10, textY + 10, true, this, _tdp); -// tgc.setValue("execc value"); -// tgc.setName("value of the delay"); -// tgcomponent[0] = tgc; -// -// moveable = true; -// editable = false; -// removable = true; - name = "execC"; - -// myImageIcon = IconManager.imgic214; } -// -// @Override -// public void internalDrawing(Graphics g) { -// if (stateOfError > 0) { -// Color c = g.getColor(); -// switch(stateOfError) { -// case ErrorHighlight.OK: -// g.setColor(ColorManager.ATTRIBUTE_BOX_ACTION); -// break; -// default: -// g.setColor(ColorManager.UNKNOWN_BOX_ACTION); -// } -// -// g.fillRect(x, y, width, height); -// g.setColor(c); -// } -// -// final int scaledLineLength1 = scale( lineLength1 ); -// final int scaledIlength1 = scale( ilength ); -// -// g.drawRect(x, y, width, height); -// g.drawLine(x+(width/2), y, x+(width/2), y - lineLength); -// g.drawLine(x+(width/2), y+height, x+(width/2), y + lineLength + height); -// -// // - -// g.drawLine(x + (width/2) - scaledLineLength1, y+(height-scaledIlength1)/2, x + (width/2) + scaledLineLength1, y+(height-scaledIlength1)/2); -// -// // | -// g.drawLine(x + (width/2) - scaledLineLength1, y+(height-scaledIlength1)/2, x + (width/2)- scaledLineLength1, y+(height+scaledIlength1)/2); -// -// // - -// g.drawLine(x + (width/2) - scaledLineLength1, y+(height-scaledIlength1)/2 + scaledIlength1, x + (width/2) + scaledLineLength1, y+(height-scaledIlength1)/2 + scaledIlength1); -// } -// -// @Override -// public TGComponent isOnOnlyMe(int x1, int y1) { -// if (GraphicLib.isInRectangle(x1, y1, x, y, width, height)) { -// return this; -// } -// -// if ((int)(Line2D.ptSegDistSq(x +width/2, y- lineLength, x+width/2, y + lineLength + height, x1, y1)) < distanceSelected) { -// return this; -// } -// -// return null; -// } -// -// public String getDelayValue() { -// return tgcomponent[0].getValue(); -// } -// -// public void setDelayValue(String value) { -// tgcomponent[0].setValue(value); -// } + @Override public int getType() { diff --git a/src/main/java/ui/tmlad/TMLADExecCInterval.java b/src/main/java/ui/tmlad/TMLADExecCInterval.java index 47f32563ea..5da38d7f12 100755 --- a/src/main/java/ui/tmlad/TMLADExecCInterval.java +++ b/src/main/java/ui/tmlad/TMLADExecCInterval.java @@ -55,48 +55,14 @@ import ui.ad.TGConnectingPointAD; * @version 1.0 21/05/2008 * @author Ludovic APVRILLE */ -public class TMLADExecCInterval extends TADExec /* Issue #31 TADComponentWithSubcomponents *//* Issue #69 TGCWithInternalComponent implements EmbeddedComment, AllowedBreakpoint, BasicErrorHighlight*/ { +public class TMLADExecCInterval extends TADExec { - // Issue #31 - //private int lineLength = 5; - //private int textX, textY; -// private int ilength;// = 10; -// private int lineLength1;// = 2; -// -// protected int stateOfError = 0; // Not yet checked public TMLADExecCInterval(int _x, int _y, int _minX, int _maxX, int _minY, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp) { super(_x, _y, _minX, _maxX, _minY, _maxY, _pos, _father, _tdp, "", "value of the time interval" ); - - // Issue #31 -// width = 10; -// height = 30; -// initSize( 10, 30 ); -// ilength = scale( 10 ); -// lineLength1 = scale( 2 ); -// textX = width + scale( 5 ); -// textY = height/2 + scale( 5 ); -// -// nbConnectingPoint = 2; -// connectingPoint = new TGConnectingPoint[2]; -// connectingPoint[0] = new TGConnectingPointTMLAD(this, 0, -lineLength, true, false, 0.5, 0.0); -// connectingPoint[1] = new TGConnectingPointTMLAD(this, 0, + lineLength, false, true, 0.5, 1.0); -// -// nbInternalTGComponent = 1; -// tgcomponent = new TGComponent[nbInternalTGComponent]; -// -// TGCTimeInterval tgc = new TGCTimeInterval(x+textX, y+textY, -75, 30, textY - 10, textY + 10, true, this, _tdp); -// tgc.setValue(""); -// tgc.setName("value of the time interval"); -// tgcomponent[0] = tgc; -// -// moveable = true; -// editable = false; -// removable = true; - + name = "execIInterval"; - -// myImageIcon = IconManager.imgic214; + } @Override @@ -108,44 +74,7 @@ public class TMLADExecCInterval extends TADExec /* Issue #31 TADComponentWithSub return (TGCTimeInterval) tgcomponent[0]; } -// @Override -// public void internalDrawing(Graphics g) { -// if (stateOfError > 0) { -// Color c = g.getColor(); -// switch(stateOfError) { -// case ErrorHighlight.OK: -// g.setColor(ColorManager.EXEC); -// break; -// default: -// g.setColor(ColorManager.UNKNOWN_BOX_ACTION); -// } -// g.fillRect(x, y, width, height); -// g.setColor(c); -// } -// g.drawRect(x, y, width, height); -// g.drawLine(x+(width/2), y, x+(width/2), y - lineLength); -// g.drawLine(x+(width/2), y+height, x+(width/2), y + lineLength + height); -// -// // Issue #31 -// final int scaledLineLength1 = scale( lineLength1 ); -// final int scaledIlength1 = scale( ilength ); -// g.drawLine(x + (width/2) - scaledLineLength1, y+(height-scaledIlength1)/2, x + (width/2) + scaledLineLength1, y+(height-scaledIlength1)/2); -// g.drawLine(x + (width/2) - scaledLineLength1, y+(height-scaledIlength1)/2 + scaledIlength1, x + (width/2) + scaledLineLength1, y+(height-scaledIlength1)/2 + scaledIlength1); -// g.drawLine(x + (width/2) - scaledLineLength1, y+(height-scaledIlength1)/2, x + (width/2) - scaledLineLength1, y+(height+scaledIlength1)/2); -// } -// -// @Override -// public TGComponent isOnOnlyMe(int x1, int y1) { -// if (GraphicLib.isInRectangle(x1, y1, x, y, width, height)) { -// return this; -// } -// -// if ((int)(Line2D.ptSegDistSq(x +width/2, y- lineLength, x+width/2, y + lineLength + height, x1, y1)) < distanceSelected) { -// return this; -// } -// -// return null; -// } + public String getMinDelayValue() { return getTimeInterval().getMinDelay(); @@ -172,11 +101,7 @@ public class TMLADExecCInterval extends TADExec /* Issue #31 TADComponentWithSub public int getDefaultConnector() { return TGComponentManager.CONNECTOR_TMLAD; } -// -// @Override -// public void setStateAction(int _stateAction) { -// stateOfError = _stateAction; -// } + @Override protected TGConnectingPointAD createConnectingPoint(CDElement _container, int _x, int _y, boolean _in, boolean _out, diff --git a/src/main/java/ui/tmlad/TMLADForLoop.java b/src/main/java/ui/tmlad/TMLADForLoop.java index 4acbfb7fc4..8d186eccc8 100755 --- a/src/main/java/ui/tmlad/TMLADForLoop.java +++ b/src/main/java/ui/tmlad/TMLADForLoop.java @@ -226,6 +226,13 @@ public class TMLADForLoop extends TADForLoop /* Issue #69 TGCWithoutInternalComp return increment; } + public void setOptions(String _init, String _condition, String _increment) { + init = _init; + condition = _condition; + increment = _increment; + makeValue(); + } + @Override protected String translateExtraParam() { StringBuffer sb = new StringBuffer("<extraparam>\n"); diff --git a/src/main/java/ui/tmlad/TMLADNotifiedEvent.java b/src/main/java/ui/tmlad/TMLADNotifiedEvent.java index bc66ed2674..4fb0ce9679 100755 --- a/src/main/java/ui/tmlad/TMLADNotifiedEvent.java +++ b/src/main/java/ui/tmlad/TMLADNotifiedEvent.java @@ -177,6 +177,11 @@ public class TMLADNotifiedEvent extends TADComponentWithoutSubcomponents/* Issue eventName = _name; makeValue(); } + + public void setResult(String _name) { + result = _name; + makeValue(); + } public String getVariable() { return result; @@ -202,7 +207,7 @@ public class TMLADNotifiedEvent extends TADComponentWithoutSubcomponents/* Issue if (jdms.hasBeenSet() && (jdms.hasValidString(0))) { eventName = jdms.getString(0); - result = jdms.getString(1); + result = jdms.getString(1); makeValue(); return true; -- GitLab