diff --git a/Makefile b/Makefile index 53eeb8053c4c3f151cba7dfd0ab0fec25c6fc7eb..36fd4298391ee8173198a61b5760c7eadda8710b 100755 --- a/Makefile +++ b/Makefile @@ -265,8 +265,9 @@ $(STDRELEASE:.tgz=.tar): $(BASERELEASE:.tgz=.tar) @cp $(TTOOL_DOC)/README_java $(TTOOL_TARGET)/java # Basic bin @cp $(TTOOL_EXE) $(TTOOL_TARGET)/ + @cp $(TTOOL_CONFIG_SRC) $(TTOOL_TARGET)/bin @cp $(TTOOL_LOTOS_H) $(TTOOL_TARGET)/bin - @$(TAR) uf $@ -C $(TTOOL_TARGET_RELEASE) TTool/lotos TTool/nc TTool/bin TTool/java TTool/figures TTool/nc TTool/lotos TTool/doc/prototyping_with_soclib_installation_guide.pdf TTool/doc/prototyping_with_soclib_user_guide.pdf $(patsubst $(TTOOL_DOC)/%,TTool/%,$(TTOOL_EXE)) + @$(TAR) uf $@ -C $(TTOOL_TARGET_RELEASE) TTool/lotos TTool/nc TTool/bin TTool/java TTool/figures TTool/nc TTool/lotos TTool/doc/prototyping_with_soclib_installation_guide.pdf TTool/doc/prototyping_with_soclib_user_guide.pdf $(patsubst $(TTOOL_DOC)/%,TTool/%,$(TTOOL_EXE)) $(patsubst $(TTOOL_DOC)/%,TTool/bin/%,$(TTOOL_CONFIG_SRC)) $(ADVANCED_RELEASE:.tgz=.tar): $(STDRELEASE:.tgz=.tar) documentation @echo "$(PREFIX) Generating advanced release" @@ -294,9 +295,9 @@ $(TTOOL_PREINSTALL_WINDOWS:.tgz=.tar): $(BASERELEASE:.tgz=.tar) @mkdir -p $(TTOOL_TARGET_WINDOWS)/TTool/bin @$(TAR) xzvf $(TTOOL_PRIVATE)/stocks/proverif_windows.tar.gz -C $(TTOOL_TARGET_WINDOWS) @$(TAR) xzvf $(TTOOL_PRIVATE)/stocks/uppaal.tar.gz -C $(TTOOL_TARGET_WINDOWS) - @cp $(TTOOL_DOC)/config_windows.xml $(TTOOL_TARGET_WINDOWS)/TTool/bin/config.xml - @cp $(TTOOL_DOC)/ttool_windows.bat $(TTOOL_TARGET_WINDOWS)/ttool.bat - @$(TAR) uf $@ -C $(TTOOL_TARGET_WINDOWS) proverif uppaal TTool/bin/config.xml ttool.bat + @cp $(TTOOL_DOC)/config_windows.xml $(TTOOL_TARGET_WINDOWS)/TTool/bin/ + @sed 's#chdir .*#chdir TTool/bin#' $(TTOOL_DOC)/ttool_windows.bat > $(TTOOL_TARGET_WINDOWS)/ttool.bat + @$(TAR) uf $@ -C $(TTOOL_TARGET_WINDOWS) proverif uppaal TTool/bin/config_windows.xml ttool.bat $(TTOOL_PREINSTALL_MACOS:.tgz=.tar): $(BASERELEASE:.tgz=.tar) @echo "$(PREFIX) Generating preinstall for MacOS" @@ -305,9 +306,9 @@ $(TTOOL_PREINSTALL_MACOS:.tgz=.tar): $(BASERELEASE:.tgz=.tar) @$(TAR) xzf $(TTOOL_PRIVATE)/stocks/proverif_macos.tar.gz -C $(TTOOL_TARGET_MACOS) @$(TAR) xzf $(TTOOL_PRIVATE)/stocks/uppaal_macos.tar.gz -C $(TTOOL_TARGET_MACOS) @mv $(TTOOL_TARGET_MACOS)/uppaal* $(TTOOL_TARGET_MACOS)/uppaal - @cp $(TTOOL_DOC)/config_macosx.xml $(TTOOL_TARGET_MACOS)/TTool/bin/config.xml - @cp $(TTOOL_DOC)/ttool4preinstalllinux.exe $(TTOOL_TARGET_MACOS)/ttool.exe - @$(TAR) uf $@ -C $(TTOOL_TARGET_MACOS) proverif uppaal TTool/bin/config.xml ttool.exe + @cp $(TTOOL_DOC)/config_macosx.xml $(TTOOL_TARGET_MACOS)/TTool/bin/config_macosx.xml + @sed 's#cd [^;]*#cd TTool/bin#' $(TTOOL_DOC)/ttool_macosx.exe > $(TTOOL_TARGET_MACOS)/ttool.exe + @$(TAR) uf $@ -C $(TTOOL_TARGET_MACOS) proverif uppaal TTool/bin/config_macosx.xml ttool.exe $(TTOOL_PREINSTALL_LINUX:.tgz=.tar): $(BASERELEASE:.tgz=.tar) @echo "$(PREFIX) Generating preinstall for Linux" @@ -315,13 +316,13 @@ $(TTOOL_PREINSTALL_LINUX:.tgz=.tar): $(BASERELEASE:.tgz=.tar) @mkdir -p $(TTOOL_TARGET_LINUX)/TTool/bin @$(TAR) xzvf $(TTOOL_PRIVATE)/stocks/proverif_linux.tar.gz -C $(TTOOL_TARGET_LINUX) @$(TAR) xzvf $(TTOOL_PRIVATE)/stocks/uppaal.tar.gz -C $(TTOOL_TARGET_LINUX) - @cp $(TTOOL_DOC)/config_linux.xml $(TTOOL_TARGET_LINUX)/TTool/bin/config.xml - @cp $(TTOOL_DOC)/ttool4preinstalllinux.exe $(TTOOL_TARGET_LINUX)/ttool.exe - @$(TAR) uf $@ -C $(TTOOL_TARGET_LINUX) proverif uppaal TTool/bin/config.xml ttool.exe + @cp $(TTOOL_DOC)/config_linux.xml $(TTOOL_TARGET_LINUX)/TTool/bin/config_linux.xml + @sed 's#cd [^;]*#cd TTool/bin#' $(TTOOL_DOC)/ttool_linux.exe > $(TTOOL_TARGET_LINUX)/ttool.exe + @$(TAR) uf $@ -C $(TTOOL_TARGET_LINUX) proverif uppaal TTool/bin/config_linux.xml ttool.exe -$(BASERELEASE:.tgz=.tar): $(JTTOOL_BINARY) $(TTOOL_BINARY) $(LAUNCHER_BINARY) $(TIFTRANSLATOR_BINARY) $(TMLTRANSLATOR_BINARY) $(RUNDSE_BINARY) +$(BASERELEASE:.tgz=.tar): $(JTTOOL_BINARY) $(TTOOL_BINARY) $(LAUNCHER_BINARY) $(TIFTRANSLATOR_BINARY) $(TMLTRANSLATOR_BINARY) $(RUNDSE_BINARY) FORCE @echo "$(PREFIX) Preparing base release" - @rm -rf $(TTOOL_TARGET) + @rm -rf $(TTOOL_TARGET_RELEASE) @mkdir -p $(TTOOL_TARGET) # modeling @mkdir -p $(TTOOL_TARGET)/modeling diff --git a/build.txt b/build.txt index 18e0079f66897175d336b2266def0d0dc9e45db8..2480a4d9e276626bb1d138e2caffd068010b38ff 100644 --- a/build.txt +++ b/build.txt @@ -1 +1 @@ -12281 \ No newline at end of file +12284 \ No newline at end of file diff --git a/doc/ttool4preinstalllinux.exe b/doc/ttool4preinstalllinux.exe deleted file mode 100755 index d48338cd0491961d843d205f275f578ddb80cf74..0000000000000000000000000000000000000000 --- a/doc/ttool4preinstalllinux.exe +++ /dev/null @@ -1 +0,0 @@ -cd TTool/bin; java -Xmx1024m -jar ttool.jar -launcher -config config.xml -nc -diplodocus -avatar -proverif diff --git a/doc/ttool_windows.bat b/doc/ttool_windows.bat index 7abb8c080eb4a59496f96f57400baa360bfb9829..0a3024b9e2a5421d9de2c4cb93a449dd274c4398 100755 --- a/doc/ttool_windows.bat +++ b/doc/ttool_windows.bat @@ -1,3 +1,3 @@ chdir bin -java -Xmx1024m -jar ttool.jar -launcher -config config.xml -nc -diplodocus -avatar -proverif +java -Xmx1024m -jar ttool.jar -launcher -config config_windows.xml -nc -diplodocus -avatar -proverif diff --git a/src/main/java/avatartranslator/AvatarSpecification.java b/src/main/java/avatartranslator/AvatarSpecification.java index 7cebaa4cc522807ec8308f922075b356675d87b0..0bf3b8703144be4da48984f0993bacfb63a53f1c 100644 --- a/src/main/java/avatartranslator/AvatarSpecification.java +++ b/src/main/java/avatartranslator/AvatarSpecification.java @@ -49,7 +49,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; - +import java.util.ArrayList; /** * Class AvatarSpecification * Avatar specification @@ -75,7 +75,7 @@ public class AvatarSpecification extends AvatarElement { private LinkedList<AvatarPragma> pragmas; private LinkedList<String> safety_pragmas; private LinkedList<AvatarConstant> constants; - + public List<String> checkedIDs; private boolean robustnessMade = false; private Object informationSource; // element from which the spec has been built @@ -91,7 +91,7 @@ public class AvatarSpecification extends AvatarElement { safety_pragmas = new LinkedList<String>(); this.constants.add (AvatarConstant.FALSE); this.constants.add (AvatarConstant.TRUE); - + checkedIDs= new ArrayList<String>(); this.libraryFunctions = new LinkedList<AvatarLibraryFunction> (); } @@ -640,6 +640,9 @@ public class AvatarSpecification extends AvatarElement { AvatarConstant cN = constant.advancedClone(); spec.addConstant(cN); } + for (String id:checkedIDs){ + spec.checkedIDs.add(id); + } spec.setInformationSource(getInformationSource()); spec.addApplicationCode(getApplicationCode()); diff --git a/src/main/java/myutil/SVGGraphics.java b/src/main/java/myutil/SVGGraphics.java index c72aa886d1e87568bd2f3e74ce086aec5b799646..ad2440d851c2352f10016a4be3652e95af8e538b 100755 --- a/src/main/java/myutil/SVGGraphics.java +++ b/src/main/java/myutil/SVGGraphics.java @@ -139,7 +139,7 @@ public class SVGGraphics extends Graphics2D { } - + @Override public void drawRect(int x, int y, int width, int height) { //TraceManager.addDev("Drawing svg rect"); String s = makeArg("x", x); @@ -154,6 +154,7 @@ public class SVGGraphics extends Graphics2D { svgvalue += makeDesc("rect", s); } + @Override public void draw3DRect(int x, int y, int width, int height, boolean raised) { String s = makeArg("x", x); s += makeArg("y", y); @@ -166,6 +167,7 @@ public class SVGGraphics extends Graphics2D { svgvalue += makeDesc("rect", s); } + @Override public void drawLine(int x1, int y1, int x2, int y2) { //TraceManager.addDev("Drawing svg 3D line"); String s = makeArg("x1", x1); @@ -179,6 +181,7 @@ public class SVGGraphics extends Graphics2D { svgvalue += makeDesc("line", s); } + @Override public void drawOval(int x, int y, int width, int height) { String s = makeArg("cx", x+width/2); s += makeArg("cy", y+height/2); @@ -191,6 +194,7 @@ public class SVGGraphics extends Graphics2D { svgvalue += makeDesc("ellipse", s); } + @Override public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) { String s = ""; for(int i=0; i<nPoints; i++) { @@ -205,6 +209,7 @@ public class SVGGraphics extends Graphics2D { } + @Override public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { String s = makeArg("x", x); s += makeArg("y", y); @@ -219,6 +224,7 @@ public class SVGGraphics extends Graphics2D { svgvalue += makeDesc("rect", s); } + @Override public void drawString(String str, int x, int y){ String s = makeArg("x", x); s += makeArg("y", y); @@ -230,6 +236,7 @@ public class SVGGraphics extends Graphics2D { svgvalue += makeDescWithValue("text", s, Conversion.transformToXMLString(str)); } + @Override public void fill3DRect(int x, int y, int width, int height, boolean raised) { String s = makeArg("x", x); s += makeArg("y", y); @@ -240,6 +247,7 @@ public class SVGGraphics extends Graphics2D { svgvalue += makeDesc("rect", s); } + @Override public void fillOval(int x, int y, int width, int height) { String s = makeArg("cx", x+width/2); s += makeArg("cy", y+height/2); @@ -250,6 +258,7 @@ public class SVGGraphics extends Graphics2D { svgvalue += makeDesc("ellipse", s); } + @Override public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) { String s = ""; for(int i=0; i<nPoints; i++) { @@ -262,6 +271,7 @@ public class SVGGraphics extends Graphics2D { } + @Override public void fillRect(int x, int y, int width, int height) { String s = makeArg("x", x); s += makeArg("y", y); @@ -272,6 +282,7 @@ public class SVGGraphics extends Graphics2D { svgvalue += makeDesc("rect", s); } + @Override public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { String s = makeArg("x", x); s += makeArg("y", y); @@ -290,239 +301,281 @@ public class SVGGraphics extends Graphics2D { // From Graphics2D + @Override public void addRenderingHints(Map<?,?> hints) {} + @Override public void clip(Shape s) {} + @Override public void draw(Shape s) {} + @Override public void drawGlyphVector(GlyphVector g, float x, float y) {} + @Override public void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) {} - public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) { + @Override + public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) { return true; } - public void drawRenderableImage(RenderableImage img, AffineTransform xform){} - - public void drawRenderedImage(RenderedImage img, AffineTransform xform){} - - public void drawString(AttributedCharacterIterator iterator, float x, float y){} + @Override + public void drawRenderableImage(RenderableImage img, AffineTransform xform){} - public void drawString(AttributedCharacterIterator iterator, int x, int y){} + @Override + public void drawRenderedImage(RenderedImage img, AffineTransform xform){} - public void drawString(String str, float x, float y){} + @Override + public void drawString(AttributedCharacterIterator iterator, float x, float y){} + @Override + public void drawString(AttributedCharacterIterator iterator, int x, int y){} + @Override + public void drawString(String str, float x, float y){} - public void fill(Shape s){} - - + @Override + public void fill(Shape s){} + @Override public Color getBackground() { return graphics.getBackground(); } + @Override public Composite getComposite() { return graphics.getComposite(); } + @Override public GraphicsConfiguration getDeviceConfiguration() { return graphics.getDeviceConfiguration(); } + @Override public FontRenderContext getFontRenderContext() { return graphics.getFontRenderContext(); } + @Override public Paint getPaint() { return graphics.getPaint(); } + @Override public Object getRenderingHint(RenderingHints.Key hintKey) { return graphics.getRenderingHint(hintKey); } + @Override public RenderingHints getRenderingHints() { return graphics.getRenderingHints(); } + @Override public Stroke getStroke() { return graphics.getStroke(); } + @Override public AffineTransform getTransform() { return graphics.getTransform(); } + @Override public boolean hit(Rectangle rect, Shape s, boolean onStroke) { return graphics.hit(rect, s, onStroke); } + @Override public void rotate(double theta) { } + @Override public void rotate(double theta, double x, double y) { } + @Override public void scale(double sx, double sy) { } + @Override public void setBackground(Color color) { graphics.setBackground(color); } + @Override public void setComposite(Composite comp) { graphics.setComposite(comp); } + @Override public void setPaint(Paint paint) { graphics.setPaint(paint); } + @Override public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue) { graphics.setRenderingHint(hintKey, hintValue); } + @Override public void setRenderingHints(Map<?,?> hints) { graphics.setRenderingHints(hints); } + @Override public void setStroke(Stroke s) { graphics.setStroke(s); } - + @Override public void setTransform(AffineTransform Tx) { graphics.setTransform(Tx); } + @Override public void shear(double shx, double shy) { } + @Override public void transform(AffineTransform Tx) { } + @Override public void translate(double tx, double ty) { } + @Override public void translate(int x, int y) { } // Graphics - + + @Override public void clearRect(int x, int y, int width, int height) {} + @Override public void clipRect(int x, int y, int width, int height) {} + @Override public void copyArea(int x, int y, int width, int height, int dx, int dy) {} + @Override public Graphics create() { return graphics.create(); } + @Override public void dispose() {} + @Override public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) { } + @Override public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) { return true; } + @Override public boolean drawImage(Image img, int x, int y, ImageObserver observer) { return true; } + @Override public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) { return true; } + @Override public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) { return true; } + @Override public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) { return true; } + @Override public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) { return true; } + @Override public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) { } + @Override public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) { } + @Override public Shape getClip() { return graphics.getClip(); } + @Override public Rectangle getClipBounds() { return graphics.getClipBounds(); } + @Override public Rectangle getClipBounds(Rectangle r) { return graphics.getClipBounds(r); } + @Override public Color getColor() { return graphics.getColor(); } + @Override public Font getFont() { return graphics.getFont(); } + @Override public FontMetrics getFontMetrics() { return graphics.getFontMetrics(); } + @Override public FontMetrics getFontMetrics(Font f) { return graphics.getFontMetrics(f); } + @Override public void setClip(int x, int y, int width, int height) { graphics.setClip(x, y, width, height); } + @Override public void setClip(Shape clip) { graphics.setClip(clip); } + @Override public void setColor(Color c) { graphics.setColor(c); } + @Override public void setFont(Font font) { graphics.setFont(font); } + @Override public void setPaintMode() { graphics.setPaintMode(); } + @Override public void setXORMode(Color c1) { graphics.setXORMode(c1); } - - - - - - - - - - - - - - - - } diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java index b0f295809a46512d6b8c95e2dfd5145e2b3106ce..40382324015729ef23858eb93dd67205fab82456 100644 --- a/src/main/java/ui/AvatarDesignPanelTranslator.java +++ b/src/main/java/ui/AvatarDesignPanelTranslator.java @@ -1009,6 +1009,9 @@ public class AvatarDesignPanelTranslator { this.listE.addCor (aaos, asmdss); asmdss.setAVATARID (aaos.getID()); + if (asmdss.getCheckLatency()){ + _as.checkedIDs.add(asmdss.getName()+":"+aaos.getID()); + } asm.addElement (aaos); } @@ -1285,6 +1288,9 @@ public class AvatarDesignPanelTranslator { this.listE.addCor (aaos, asmdrs); asmdrs.setAVATARID (aaos.getID()); asm.addElement (aaos); + if (asmdrs.getCheckLatency()){ + _as.checkedIDs.add(asmdrs.getName()+":"+aaos.getID()); + } } private void translateAvatarSMDState (TDiagramPanel tdp, AvatarSpecification _as, AvatarStateMachineOwner _ab, AvatarSMDState tgc) throws CheckingError { @@ -1305,6 +1311,9 @@ public class AvatarDesignPanelTranslator { this.listE.addCor (astate, tgc); astate.addReferenceObject (tgc); tgc.setAVATARID (astate.getID()); + if (tgc.getCheckLatency()){ + _as.checkedIDs.add(tgc.getName()+":"+astate.getID()); + } } private void translateAvatarSMDRandom (TDiagramPanel tdp, AvatarSpecification _as, AvatarStateMachineOwner _ab, AvatarSMDRandom asmdrand) throws CheckingError { diff --git a/src/main/java/ui/TDiagramPanel.java b/src/main/java/ui/TDiagramPanel.java index 893eae3b94c625e838a9348535df8f38ed51ad2f..aec52d1fff78d4bc57ec1ad513c41b4bf366d515 100755 --- a/src/main/java/ui/TDiagramPanel.java +++ b/src/main/java/ui/TDiagramPanel.java @@ -153,7 +153,8 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { private boolean draw; - private Graphics lastGraphics; + // Issue #14 point 10: Always use the current graphics + //private Graphics lastGraphics; // MODE public int mode; @@ -426,7 +427,7 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { else g.setFont (fontToUse); - this.lastGraphics = g; + // this.lastGraphics = g; this.drawingMain = b; if (!this.overcomeShowing && !this.isShowing()) { @@ -1954,14 +1955,14 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { // if (maxX < minimumXSize + increment) { // downX.setEnabled(false); // } else { - // Issue #14 + // Issue #14 downX.setEnabled( canDecreaseMaxX() ); // } // if (maxY < minimumYSize + increment) { // downY.setEnabled(false); // } else { - // Issue #14 + // Issue #14 downY.setEnabled( canDecreaseMaxY() ); // } @@ -2942,9 +2943,10 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { boolean b = draw; BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); - if (lastGraphics != null) { - g.setFont(lastGraphics.getFont()); - } + g.setFont( getGraphics().getFont() ); +// if (lastGraphics != null) { +// g.setFont(lastGraphics.getFont()); +// } draw = true; //paintMycomponents(g); overcomeShowing = true; @@ -2979,9 +2981,12 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { int h = this.getHeight(); BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); - if (lastGraphics != null) { - g.setFont(lastGraphics.getFont()); - } + + // Issue #14 point 10: Always use the current graphics + g.setFont( getGraphics().getFont() ); +// if (lastGraphics != null) { +// g.setFont(lastGraphics.getFont()); +// } selectedTemp = false; Color colorTmp = ColorManager.SELECTED_0; ColorManager.SELECTED_0 = ColorManager.NORMAL_0; @@ -3231,7 +3236,10 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { sb.append("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\""); sb.append(" width=\"" + (w+x) + "\" height=\"" + (h+y) + "\" viewbox=\"" + x + " " + y + " " + w + " " + h + "\">\n"); - SVGGraphics svgg = new SVGGraphics((Graphics2D)lastGraphics); + // Issue #14 point 10: Somehow the last graphics that was used is different than the actual one leading + // to an error in calculating string lengths + final SVGGraphics svgg = new SVGGraphics( (Graphics2D) getGraphics() ); +// SVGGraphics svgg = new SVGGraphics((Graphics2D)lastGraphics); RepaintManager.currentManager(this).setDoubleBufferingEnabled(false); //this.paint(svgg); diff --git a/src/main/java/ui/TToolBar.java b/src/main/java/ui/TToolBar.java index cf02a94cda22e4010fe20ffe9270152f5486743c..add31cb3dcd21d8d3ca73324c02e6363a438768b 100755 --- a/src/main/java/ui/TToolBar.java +++ b/src/main/java/ui/TToolBar.java @@ -143,3 +143,4 @@ public abstract class TToolBar extends JToolBar implements ActionListener { } } // Class + diff --git a/src/main/java/ui/avatarinteractivesimulation/AvatarInteractiveSimulationActions.java b/src/main/java/ui/avatarinteractivesimulation/AvatarInteractiveSimulationActions.java index 26c1eabd4240668470a775a58a0148cf18213acc..7df2e86fc152f7fc9e051a3739120b77813c4b38 100755 --- a/src/main/java/ui/avatarinteractivesimulation/AvatarInteractiveSimulationActions.java +++ b/src/main/java/ui/avatarinteractivesimulation/AvatarInteractiveSimulationActions.java @@ -103,8 +103,8 @@ public class AvatarInteractiveSimulationActions extends AbstractAction { public static final int ACT_DELETE_ASYNC_MSG = 32; public static final int ACT_UP_ASYNC_MSG = 33; public static final int ACT_DOWN_ASYNC_MSG = 34; - - public static final int NB_ACTION = 35; + public static final int ACT_ADD_LATENCY = 35; + public static final int NB_ACTION = 36; private static final TAction [] actions = new TAction[NB_ACTION]; @@ -190,6 +190,7 @@ public class AvatarInteractiveSimulationActions extends AbstractAction { actions[ACT_DELETE_ASYNC_MSG] = new TAction("delete-async-command", "Delete", IconManager.imgic336, IconManager.imgic336, "Delete msg +", "Delete the selected message", '0'); actions[ACT_UP_ASYNC_MSG] = new TAction("up-async-command", "Up", IconManager.imgic78, IconManager.imgic78, "Up msg", "Put a async msg closer to the FIFO exit", '0'); actions[ACT_DOWN_ASYNC_MSG] = new TAction("up-async-command", "Down", IconManager.imgic79, IconManager.imgic79, "Down msg", "Put a async msg further from the FIFO exit", '0'); + actions[ACT_ADD_LATENCY] = new TAction("add-latency-command", "Add latency", IconManager.imgic75, IconManager.imgic75, "Add latency", "Add latency checkpoint", '0'); } public String getActionCommand() { diff --git a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java index 57ea772b1e1d475561d5aff5637c2d3a38d7447f..a60eb118885822519012ca361df7d9bde91008b8 100755 --- a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java +++ b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java @@ -47,6 +47,7 @@ import common.ConfigurationTTool; import myutil.*; import ui.*; import ui.avatarbd.AvatarBDPortConnector; +import ui.interactivesimulation.*; import ui.util.IconManager; import javax.swing.*; @@ -61,6 +62,11 @@ import java.io.File; import java.util.Hashtable; import java.util.LinkedList; import java.util.Vector; +import java.util.List; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Collections; /** * Class JFrameAvatarInteractiveSimulation @@ -220,6 +226,20 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar // Async messages Vector<AvatarSimulationAsynchronousTransaction> lastAsyncmsgs; + //Latency + JPanel latencyPanel; + JComboBox<String> transaction1; + JComboBox<String> transaction2; + JButton addLatencyCheckButton; + JButton updateLatencyButton; + LatencyTableModel latm; + public Vector<String> checkedTransactions = new Vector<String>(); + private Vector<SimulationLatency> latencies = new Vector<SimulationLatency>(); + List<String> toCheck = new ArrayList<String>(); + Map<String, List<String>> transTimes = new HashMap<String, List<String>>(); + + private JScrollPane jspLatency; + public JFrameAvatarInteractiveSimulation(/*Frame _f,*/ MainGUI _mgui, String _title, AvatarSpecification _avspec) { super(_title); @@ -241,7 +261,10 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar initActions(); initSimulation(); - + for (String id: _avspec.checkedIDs){ + checkedTransactions.add(id); + transTimes.put(id, new ArrayList<String>()); + } makeComponents(); setComponents(); } @@ -772,6 +795,8 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar transactionPanel.add(jspTransactionInfo, BorderLayout.CENTER); + + // Met elements metElementsPanel = new JPanel(); metElementsPanel.setLayout(new BorderLayout()); @@ -821,6 +846,71 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar jspDisplayedBlocks.setPreferredSize(new Dimension(250, 300)); infoTab.addTab("Displayed blocks", IconManager.imgic1202, jspDisplayedBlocks, "Displayed blocks"); + + // Latencies + latencyPanel = new JPanel(); + infoTab.addTab("Latencies", IconManager.imgic1202, latencyPanel, "Latencies"); + GridBagLayout gridbag0 = new GridBagLayout(); + GridBagConstraints c0 = new GridBagConstraints(); + latencyPanel.setLayout(gridbag0); + c0.gridwidth = GridBagConstraints.REMAINDER; + latencyPanel.add(new JLabel("Latencies shown in number of cycles relative to the main clock"), c0); + + c0.gridwidth=1; + c0.gridheight=1; + latencyPanel.add(new JLabel("Checkpoint 1:"),c0); + c0.gridwidth = GridBagConstraints.REMAINDER; + transaction1 = new JComboBox<String>(checkedTransactions); + latencyPanel.add(transaction1, c0); + + c0.gridwidth=1; + latencyPanel.add(new JLabel("Checkpoint 2:"),c0); + c0.gridwidth= GridBagConstraints.REMAINDER; + transaction2 = new JComboBox<String>(checkedTransactions); + latencyPanel.add(transaction2, c0); + + + addLatencyCheckButton = new JButton(actions[AvatarInteractiveSimulationActions.ACT_ADD_LATENCY]); + latencyPanel.add(addLatencyCheckButton,c0); + latm = new LatencyTableModel(); + latm.setData(latencies); + sorterPI = new TableSorter(latm); + final JTable latTable = new JTable(sorterPI); + /* latTable.addMouseListener(new java.awt.event.MouseAdapter() { + @Override + public void mouseClicked(java.awt.event.MouseEvent evt) { + int row = latTable.rowAtPoint(evt.getPoint()); + int col = latTable.columnAtPoint(evt.getPoint()); + if (row >= 0 && col >= 0 && col <2) { + for (TGComponent tgc: tmap.getTMLModeling().getCheckedComps().keySet()){ + if (tmap.getTMLModeling().getCheckedComps().get(tgc).equals(latm.getValueAt(row,col).toString().split(" ")[0])){ + mgui.selectTab(tgc.getTDiagramPanel()); + tgc.getTDiagramPanel().highlightTGComponent(tgc); + } + } + } + } + });*/ + sorterPI.setTableHeader(latTable.getTableHeader()); + ((latTable.getColumnModel()).getColumn(0)).setPreferredWidth(700); + ((latTable.getColumnModel()).getColumn(1)).setPreferredWidth(700); + ((latTable.getColumnModel()).getColumn(2)).setPreferredWidth(100); + ((latTable.getColumnModel()).getColumn(3)).setPreferredWidth(100); + ((latTable.getColumnModel()).getColumn(4)).setPreferredWidth(100); + ((latTable.getColumnModel()).getColumn(5)).setPreferredWidth(100); + latTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); + jspLatency = new JScrollPane(latTable); + jspLatency.setWheelScrollingEnabled(true); + jspLatency.getVerticalScrollBar().setUnitIncrement(10); + jspLatency.setMinimumSize(new Dimension(400, 250)); + jspLatency.setPreferredSize(new Dimension(1400, 250)); + latencyPanel.add(jspLatency, c0); + + + +// updateLatencyButton = new JButton(actions[InteractiveSimulationActions.ACT_UPDATE_LATENCY]); + // latencyPanel.add(updateLatencyButton,c0); + //Randomness randomPanel = new JPanel(); randomPanel.setLayout(new GridBagLayout()); @@ -991,6 +1081,11 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar ass.resetSimulation(); //ass.backOneTransactionBunch(); } + // latencies.clear(); + transTimes.clear(); + for (String id: avspec.checkedIDs){ + transTimes.put(id, new ArrayList<String>()); + } //ass.killSimulation(); } @@ -1332,10 +1427,84 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar //nbOfAllExecutedElements = hashOfAllElements.hashCode(); } + public void addLatency(){ + toCheck.add(transaction1.getSelectedItem().toString()+"--"+transaction2.getSelectedItem().toString()); + updateTransactionsTable(); + } + public void updateTransactionsTable() { if (transactiontm != null) { transactiontm.fireTableStructureChanged(); } + if (ass!=null && latm!=null){ + latencies.clear(); + if (ass.getAllTransactions()!=null){ + for (AvatarSimulationTransaction trans: ass.getAllTransactions()){ + String id = ((TGComponent)trans.executedElement.getReferenceObject()).getName() + ":"+Integer.toString(trans.executedElement.getID()); + // System.out.println(id + " " + transTimes.keySet()); + // System.out.println("transaction " + trans.executedElement.getID() + " " + trans.initialClockValue); + if (transTimes.containsKey(id)){ + if (!transTimes.get(id).contains(Long.toString(trans.initialClockValue))){ + transTimes.get(id).add(Long.toString(trans.initialClockValue)); + } + } + } + } + // System.out.println(transTimes); + for (String st1:transTimes.keySet()){ + for (String st2:transTimes.keySet()){ + if (st1!=st2 && toCheck.contains(st1 +"--"+st2)){ + if (transTimes.get(st1) !=null && transTimes.get(st2)!=null){ + + ArrayList<Integer> minTimes = new ArrayList<Integer>(); + SimulationLatency sl = new SimulationLatency(); + sl.trans1=st1; + sl.trans2=st2; + for(String time1: transTimes.get(st1)){ + //Find the first subsequent transaction + int time = Integer.MAX_VALUE; + for (String time2: transTimes.get(st2)){ + int diff = Integer.valueOf(time2) - Integer.valueOf(time1); + if (diff < time && diff >=0){ + time=diff; + } + // System.out.println("diff " + diff + " " + transTimes.get(st1) + " " + transTimes.get(st2)); + } + if (time!=Integer.MAX_VALUE){ + minTimes.add(time); + } + } + // System.out.println("Min times " + minTimes); + if (minTimes.size()>0){ + int sum=0; + sl.minTime=Integer.toString(Collections.min(minTimes)); + sl.maxTime=Integer.toString(Collections.max(minTimes)); + for (int time: minTimes){ + sum+=time; + } + double average = (double) sum/ (double) minTimes.size(); + double stdev =0.0; + for (int time:minTimes){ + stdev +=(time - average)*(time-average); + } + stdev= stdev/minTimes.size(); + stdev = Math.sqrt(stdev); + sl.avTime= String.format("%.1f",average); + sl.stDev = String.format("%.1f",stdev); + } + latencies.add(sl); + + } + + } + + } + } + + if (latm !=null && latencies.size()>0){ + latm.setData(latencies); + } + } } @@ -1789,7 +1958,9 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_ZOOM_OUT].getActionCommand())) { zoomOut(); return; - + } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_ADD_LATENCY].getActionCommand())) { + addLatency(); + return; } else if (evt.getSource() == displayedTransactionsText) { TraceManager.addDev("Entered text:" + displayedTransactionsText.getText()); diff --git a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java index 48a86588f80dd42831f6ffc843c558051af105af..613c90e1ac10138d48bf402de02420ddc6cc004e 100755 --- a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java +++ b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java @@ -269,24 +269,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene diagramTable = new Hashtable<String, String>(); - tmlSimPanel = new JFrameTMLSimulationPanel(new Frame(), _mgui, "Simulation Transactions"); - try { - pos = new PipedOutputStream(); - pis = new PipedInputStream(pos, 4096); - tmlSimPanel.setFileReference(new BufferedReader(new InputStreamReader(pis))); - bw = new BufferedWriter(new OutputStreamWriter(pos)); - //bw.close(); - //pos.close(); - } - catch (Exception e){ - System.out.println("failed " + e); - } - for (TMLTask task : tmap.getTMLModeling().getTasks()){ - simtraces.add("time=0 block="+ task.getName()+" type=state_entering state=startState"); - simIndex++; - } - tmlSimPanel.setVisible(true); mgui.resetRunningID(); mgui.resetLoadID(); @@ -967,7 +950,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene addLatencyCheckButton = new JButton(actions[InteractiveSimulationActions.ACT_ADD_LATENCY]); latencyPanel.add(addLatencyCheckButton,c0); - latm = new LatencyTableModel(this); + latm = new LatencyTableModel(); latm.setData(latencies); sorterPI = new TableSorter(latm); final JTable latTable = new JTable(sorterPI); @@ -1397,24 +1380,35 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene } public void writeSimTrace(){ try { - Collections.sort(simtraces, new Comparator<String>() { - - @Override - public int compare(String o1, String o2) { - int i = Integer.valueOf((o1.split(" ")[0]).split("=")[1]); - int j = Integer.valueOf((o2.split(" ")[0]).split("=")[1]); - return i-j; - } - }); - + tmlSimPanel = new JFrameTMLSimulationPanel(new Frame(), mgui, "Simulation Transactions"); + pos = new PipedOutputStream(); + pis = new PipedInputStream(pos, 4096); + tmlSimPanel.setFileReference(new BufferedReader(new InputStreamReader(pis))); + bw = new BufferedWriter(new OutputStreamWriter(pos)); + for (TMLTask task : tmap.getTMLModeling().getTasks()){ + simtraces.add("time=0 block="+ task.getName()+" type=state_entering state=startState"); + simIndex++; + } + //Sort simtraces by end time + Collections.sort(simtraces, new Comparator<String>() { + @Override + public int compare(String o1, String o2) { + int i = Integer.valueOf((o1.split(" ")[0]).split("=")[1]); + int j = Integer.valueOf((o2.split(" ")[0]).split("=")[1]); + return i-j; + } + }); //System.out.println(simtraces); for (String s: simtraces){ - bw.write("#0 " +s); + bw.write("#"+simIndex+ " "+s); bw.newLine(); bw.flush(); + simIndex++; } bw.close(); pos.close(); + tmlSimPanel.setVisible(true); + } catch (Exception e){ System.out.println("Could not write sim trace " + e); diff --git a/src/main/java/ui/interactivesimulation/LatencyTableModel.java b/src/main/java/ui/interactivesimulation/LatencyTableModel.java index 01c710084b991807e10cbedf5435e70a1b78f5c8..9df771fe36c74a80fb64981fdb190d6fc5b490ba 100755 --- a/src/main/java/ui/interactivesimulation/LatencyTableModel.java +++ b/src/main/java/ui/interactivesimulation/LatencyTableModel.java @@ -52,13 +52,13 @@ import java.util.Vector; * @author Ludovic APVRILLE */ public class LatencyTableModel extends AbstractTableModel { - private JFrameInteractiveSimulation jfis; + // private JFrameInteractiveSimulation jfis; private int nbOfRows; private SimulationLatency data[]; //private String [] names; - public LatencyTableModel(JFrameInteractiveSimulation _jfis) { - jfis = jfis; + public LatencyTableModel() { +// jfis = jfis; SimulationLatency sl = new SimulationLatency(); data = new SimulationLatency[]{sl}; diff --git a/src/main/java/ui/interactivesimulation/SimulationLatency.java b/src/main/java/ui/interactivesimulation/SimulationLatency.java index 109895c32ebb1cdd8873c7539037479542487d56..64f8447b2940d8a19aa6fa2c412a023bac5aa073 100644 --- a/src/main/java/ui/interactivesimulation/SimulationLatency.java +++ b/src/main/java/ui/interactivesimulation/SimulationLatency.java @@ -52,10 +52,10 @@ public class SimulationLatency { public String trans1; public String trans2; - public String minTime=""; - public String maxTime=""; - public String avTime=""; - public String stDev=""; + public String minTime="N/A"; + public String maxTime="N/A"; + public String avTime="N/A"; + public String stDev="N/A"; public SimulationLatency() { } diff --git a/src/main/java/ui/tmlcp/TMLCPForLoop.java b/src/main/java/ui/tmlcp/TMLCPForLoop.java index cd7128682cb2d678effac6a4afa6fc34a8659b34..2f25ac9e780e7f13cd951499db4c6b230d19e3fa 100755 --- a/src/main/java/ui/tmlcp/TMLCPForLoop.java +++ b/src/main/java/ui/tmlcp/TMLCPForLoop.java @@ -97,8 +97,8 @@ public class TMLCPForLoop extends TGCWithoutInternalComponent implements Embedde } public void internalDrawing(Graphics g) { - int w = g.getFontMetrics().stringWidth(value); - int w1 = Math.max(minWidth, w + 2 * textX); + final int textWidth = g.getFontMetrics().stringWidth(value); + int w1 = Math.max(minWidth, textWidth + 2 * textX); if ((w1 != width) & (!tdp.isScaled())) { setCd(x + width/2 - w1/2, y); width = w1; @@ -123,7 +123,7 @@ public class TMLCPForLoop extends TGCWithoutInternalComponent implements Embedde g.drawLine(x+(width/2), y+height, x+(width/2), y + lineLength + height); g.drawLine(x+width, y+height/2, x+width +lineLength, y+height/2); - g.drawString(value, x + (width - w) / 2 , y + textY); + g.drawString(value, x + (width - textWidth) / 2 , y + textY); } public boolean editOndoubleClick(JFrame frame) { diff --git a/src/main/java/ui/util/DefaultText.java b/src/main/java/ui/util/DefaultText.java index fe75dcaa834a4cc9ed1544c522a7d43b7390a83e..81cc0316af56b5ceb9dc135f692c145182e760d2 100755 --- a/src/main/java/ui/util/DefaultText.java +++ b/src/main/java/ui/util/DefaultText.java @@ -51,8 +51,8 @@ package ui.util; */ public class DefaultText { - public static String BUILD = "12280"; - public static String DATE = "2017/06/29 12:28:10 CET"; + public static String BUILD = "12283"; + public static String DATE = "2017/06/30 02:01:27 CET"; public static StringBuffer sbAbout = makeAbout();