From 4fc95d6dd93249f03f4b38a3ca8370e007d59f46 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Fri, 8 Jun 2018 18:40:44 +0200
Subject: [PATCH] adding new SVG generation technique

---
 .../AvatarSpecificationSimulationSDPanel.java |   2 +-
 .../JFrameAvatarInteractiveSimulation.java    | 658 +++++++++---------
 ttool/META-INF/MANIFEST.MF                    |   2 +-
 3 files changed, 328 insertions(+), 334 deletions(-)

diff --git a/src/main/java/ui/avatarinteractivesimulation/AvatarSpecificationSimulationSDPanel.java b/src/main/java/ui/avatarinteractivesimulation/AvatarSpecificationSimulationSDPanel.java
index 2369afd3bc..9863375269 100644
--- a/src/main/java/ui/avatarinteractivesimulation/AvatarSpecificationSimulationSDPanel.java
+++ b/src/main/java/ui/avatarinteractivesimulation/AvatarSpecificationSimulationSDPanel.java
@@ -178,7 +178,7 @@ public class AvatarSpecificationSimulationSDPanel extends JPanel implements Mous
         repaint();
     }
 
-    protected void paintComponent(Graphics g) {
+    public void paintComponent(Graphics g) {
         if (!trace) {
             g.clearRect(0, 0, getWidth(), getHeight());
             return;
diff --git a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
index dab0546f56..d41e5fd249 100755
--- a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
+++ b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
@@ -37,17 +37,23 @@
  */
 
 
-
-
 package ui.avatarinteractivesimulation;
 
 import avatartranslator.*;
 import avatartranslator.directsimulation.*;
 import common.ConfigurationTTool;
 import myutil.*;
+import org.apache.batik.dom.GenericDOMImplementation;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+
+import java.io.*;
+
 import ui.*;
 import ui.avatarbd.AvatarBDPortConnector;
-import ui.interactivesimulation.*;
+import ui.interactivesimulation.LatencyTableModel;
+import ui.interactivesimulation.SimulationLatency;
 import ui.util.IconManager;
 
 import javax.swing.*;
@@ -58,34 +64,17 @@ import javax.swing.event.ListSelectionListener;
 import java.awt.*;
 import java.awt.event.*;
 import java.awt.image.BufferedImage;
-import java.io.File;
-import java.util.Hashtable;
-import java.util.LinkedList;
-import java.util.Vector;
+import java.util.*;
 import java.util.List;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Collections;
-
-
-import java.io.Writer;
-import java.io.OutputStreamWriter;
-import java.io.IOException;
-
-import org.apache.batik.svggen.SVGGraphics2D;
-import org.apache.batik.dom.GenericDOMImplementation;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMImplementation;
 
 /**
  * Class JFrameAvatarInteractiveSimulation
  * Creation: 21/01/2011
  * version 1.0 21/01/2011
+ *
  * @author Ludovic APVRILLE
  */
-public  class JFrameAvatarInteractiveSimulation extends JFrame implements AvatarSimulationInteraction, ActionListener, Runnable, MouseListener, ItemListener, ListSelectionListener, WindowListener/*, StoppableGUIElement, SteppedAlgorithm, ExternalCall*/ {
+public class JFrameAvatarInteractiveSimulation extends JFrame implements AvatarSimulationInteraction, ActionListener, Runnable, MouseListener, ItemListener, ListSelectionListener, WindowListener/*, StoppableGUIElement, SteppedAlgorithm, ExternalCall*/ {
     private static int TRACED_TRANSACTIONS = 1000;
     private static int LAST_TRANSACTIONS = 0;
 
@@ -141,7 +130,6 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     private int totalNbOfElements = -1;
 
 
-
     //private String[] cpuIDs, busIDs, memIDs, taskIDs, chanIDs;
 
     // Status elements
@@ -207,7 +195,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     private int busyMode = 0; // Mode of AvatarSpecificationSimulation
 
     // For managing actions
-    public AvatarInteractiveSimulationActions [] actions;
+    public AvatarInteractiveSimulationActions[] actions;
     public MouseHandler mouseHandler;
     public KeyListener keyHandler;
 
@@ -251,6 +239,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     private Map<String, List<String>> transTimes = new HashMap<String, List<String>>(); //Map of each checked element: all transaction times
     private JScrollPane jspLatency;
 
+
     public JFrameAvatarInteractiveSimulation(/*Frame _f,*/ MainGUI _mgui, String _title, AvatarSpecification _avspec) {
         super(_title);
 
@@ -260,7 +249,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         avspec = _avspec;
 
         addWindowListener(this);
-        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE );
+        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
         setIconImage(IconManager.img5100);
         setBackground(Color.WHITE);
 
@@ -272,25 +261,24 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         initActions();
 
         initSimulation();
-        for (String id: _avspec.checkedIDs){
+        for (String id : _avspec.checkedIDs) {
             // checkedTransactions.add(id);
             transTimes.put(id, new ArrayList<String>());
         }
-        for (AvatarPragmaLatency latencyPragma: _avspec.getLatencyPragmas()){
-            for (String id1: latencyPragma.getId1()){
-                for (String id2: latencyPragma.getId2()){
-                    if (!nameLatencyMap.containsKey(id1 + "--"+id2)){
+        for (AvatarPragmaLatency latencyPragma : _avspec.getLatencyPragmas()) {
+            for (String id1 : latencyPragma.getId1()) {
+                for (String id2 : latencyPragma.getId2()) {
+                    if (!nameLatencyMap.containsKey(id1 + "--" + id2)) {
                         SimulationLatency sl = new SimulationLatency();
                         sl.setTransaction1(id1);
                         sl.setTransaction2(id2);
                         sl.addPragma(latencyPragma);
-                        nameLatencyMap.put(id1 + "--"+id2, sl);
+                        nameLatencyMap.put(id1 + "--" + id2, sl);
                         latencies.add(sl);
                         //toCheck.add(latencyPragma.getId1().get(0) + "--"+latencyPragma.getId2().get(0));
                         updateTransactionsTable();
-                    }
-                    else {
-                        nameLatencyMap.get(id1 + "--"+id2).addPragma(latencyPragma);
+                    } else {
+                        nameLatencyMap.get(id1 + "--" + id2).addPragma(latencyPragma);
                     }
                 }
             }
@@ -307,7 +295,6 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         ass = new AvatarSpecificationSimulation(avspec, this);
 
 
-
         //ass.initialize();
         simulationRunning = false;
         simulationThread = new Thread(this);
@@ -347,35 +334,34 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
                 // Use probabilities
                 double sumProb = 0.0;
-                for (AvatarSimulationPendingTransaction pt: ll) {
+                for (AvatarSimulationPendingTransaction pt : ll) {
                     //TraceManager.addDev("prob=" + pt.probability);
                     sumProb += pt.probability;
                 }
 
 
-
                 double rand2 = Math.random() * sumProb;
                 //TraceManager.addDev("Nb of pending:" + ll.size() + " total prob=" + sumProb +  " rand=" + rand2);
 
 
                 double prob = 0.0;
                 int index = 0;
-                for (AvatarSimulationPendingTransaction pt: ll) {
+                for (AvatarSimulationPendingTransaction pt : ll) {
                     prob += pt.probability;
                     //TraceManager.addDev("rand=" + rand2 + " prob=" + prob + " pt.probability=" + pt.probability);
                     if (rand2 < prob) {
                         listPendingTransactions.setSelectedIndex(index);
                         break;
                     }
-                    index ++;
+                    index++;
                 }
 
 
-
             } else {
                 listPendingTransactions.setListData(new Vector<AvatarSimulationPendingTransaction>());
             }
-        } catch (Exception e) {}
+        } catch (Exception e) {
+        }
 
         //TraceManager.addDev("Simulation is already running -> end of code:" + Thread.currentThread());
     }
@@ -394,8 +380,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     }
 
 
-
-    private JLabel createStatusBar()  {
+    private JLabel createStatusBar() {
         statuss = new JLabel("Ready...");
         statuss.setForeground(ColorManager.InteractiveSimulationText);
         statuss.setBorder(BorderFactory.createEtchedBorder());
@@ -406,7 +391,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         JPanel jp01, jp02;
         //jp01.setPreferredSize(new Dimension(375, 400));
         GridBagLayout gridbag01;
-        GridBagConstraints c01 ;
+        GridBagConstraints c01;
 
         //cp = new CommandParser();
 
@@ -471,7 +456,8 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
           //jsp.setColumnHeaderView(100);
           //jsp.setRowHeaderView(30);
           //jsp.setMaximumSize(new Dimension(800, 400));*/
-        JPanel lowerPartPanel = new JPanel(); lowerPartPanel.setLayout(new BorderLayout());
+        JPanel lowerPartPanel = new JPanel();
+        lowerPartPanel.setLayout(new BorderLayout());
         sdpanel = new AvatarSpecificationSimulationSDPanel(ass);
         sdpanel.setShowHiddenStates(false);
         //ass.setName("Interaction Overview Diagram");
@@ -479,7 +465,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         sdpanel.setMyScrollPanel(jsp);
         jsp.setWheelScrollingEnabled(true);
         //jsp.setPreferredSize(new Dimension(800, 400));
-        jsp.getVerticalScrollBar().setUnitIncrement( MainGUI.INCREMENT );
+        jsp.getVerticalScrollBar().setUnitIncrement(MainGUI.INCREMENT);
         lowerPartPanel.add(jsp, BorderLayout.CENTER);
 
         // Commands
@@ -522,7 +508,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
         listPendingTransactions = new JList<AvatarSimulationPendingTransaction>();
         //listPendingTransactions.setPreferredSize(new Dimension(400, 300));
-        listPendingTransactions.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION );
+        listPendingTransactions.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
         listPendingTransactions.addListSelectionListener(this);
         JScrollPane scrollPane1 = new JScrollPane(listPendingTransactions);
         scrollPane1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
@@ -690,73 +676,76 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         traceInSD.addItemListener(this);
         traceInSD.setSelected(true);
         jp01.add(new JLabel("# of transactions:"), c01);
-        displayedTransactionsText = new JTextField(""+TRACED_TRANSACTIONS, 10);
+        displayedTransactionsText = new JTextField("" + TRACED_TRANSACTIONS, 10);
         jp01.add(displayedTransactionsText, c01);
         //displayedTransactionsText.addActionListener(this);
         displayedTransactionsText.getDocument().addDocumentListener(new DocumentListener() {
-                public void changedUpdate(DocumentEvent e) {
-                    warn();
-                }
-                public void removeUpdate(DocumentEvent e) {
-                    warn();
-                }
-                public void insertUpdate(DocumentEvent e) {
-                    warn();
-                }
+            public void changedUpdate(DocumentEvent e) {
+                warn();
+            }
 
-                public void warn() {
-                    try {
-                        int nb = Integer.parseInt(displayedTransactionsText.getText());
-                        if ((nb > 0) && (nb <= 100000)){
-                            statuss.setText("Nb of traced transactions modified to: " + nb);
-                            if (sdpanel != null) {
-                                sdpanel.setNbOfDrawnTransactions(nb);
-                                if (sdpanel.isVisible()) {
-                                    sdpanel.repaint();
-                                }
+            public void removeUpdate(DocumentEvent e) {
+                warn();
+            }
+
+            public void insertUpdate(DocumentEvent e) {
+                warn();
+            }
+
+            public void warn() {
+                try {
+                    int nb = Integer.parseInt(displayedTransactionsText.getText());
+                    if ((nb > 0) && (nb <= 100000)) {
+                        statuss.setText("Nb of traced transactions modified to: " + nb);
+                        if (sdpanel != null) {
+                            sdpanel.setNbOfDrawnTransactions(nb);
+                            if (sdpanel.isVisible()) {
+                                sdpanel.repaint();
                             }
-                            return;
                         }
-                    } catch (Exception e) {
+                        return;
                     }
-                    statuss.setText("Unknown / bad number: " + displayedTransactionsText.getText());
+                } catch (Exception e) {
                 }
-            });
+                statuss.setText("Unknown / bad number: " + displayedTransactionsText.getText());
+            }
+        });
         jp01.add(new JLabel("Index of last trans.:"), c01);
         c01.gridwidth = GridBagConstraints.REMAINDER; //end row
-        lastTransactionsText = new JTextField(""+LAST_TRANSACTIONS, 10);
+        lastTransactionsText = new JTextField("" + LAST_TRANSACTIONS, 10);
         jp01.add(lastTransactionsText, c01);
         //displayedTransactionsText.addActionListener(this);
         lastTransactionsText.getDocument().addDocumentListener(new DocumentListener() {
-                public void changedUpdate(DocumentEvent e) {
-                    warn();
-                }
-                public void removeUpdate(DocumentEvent e) {
-                    warn();
-                }
-                public void insertUpdate(DocumentEvent e) {
-                    warn();
-                }
+            public void changedUpdate(DocumentEvent e) {
+                warn();
+            }
 
-                public void warn() {
-                    try {
-                        int nb = Integer.parseInt(lastTransactionsText.getText());
-                        if (nb > -1){
-                            statuss.setText("Index of last transation modified to: " + nb);
-                            if (sdpanel != null) {
-                                sdpanel.setLastDrawnTransactions(nb);
-                                if (sdpanel.isVisible()) {
-                                    sdpanel.repaint();
-                                }
+            public void removeUpdate(DocumentEvent e) {
+                warn();
+            }
+
+            public void insertUpdate(DocumentEvent e) {
+                warn();
+            }
+
+            public void warn() {
+                try {
+                    int nb = Integer.parseInt(lastTransactionsText.getText());
+                    if (nb > -1) {
+                        statuss.setText("Index of last transation modified to: " + nb);
+                        if (sdpanel != null) {
+                            sdpanel.setLastDrawnTransactions(nb);
+                            if (sdpanel.isVisible()) {
+                                sdpanel.repaint();
                             }
-                            return;
                         }
-                    } catch (Exception e) {
+                        return;
                     }
-                    statuss.setText("Unknown / bad number: " + lastTransactionsText.getText());
+                } catch (Exception e) {
                 }
-            });
-
+                statuss.setText("Unknown / bad number: " + lastTransactionsText.getText());
+            }
+        });
 
 
         c01.gridwidth = 1;
@@ -863,8 +852,6 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         transactionPanel.add(jspTransactionInfo, BorderLayout.CENTER);
 
 
-
-
         // Met elements
         metElementsPanel = new JPanel();
         metElementsPanel.setLayout(new BorderLayout());
@@ -898,7 +885,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         c.gridheight = 1;
 
         displayedBlocks = new Vector<JCheckBox>();
-        for(AvatarSimulationBlock block: ass.getSimulationBlocks()) {
+        for (AvatarSimulationBlock block : ass.getSimulationBlocks()) {
             JCheckBox jcb = new JCheckBox(block.getName(), true);
             block.selected = true;
             jcb.addActionListener(this);
@@ -924,23 +911,23 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         c0.gridwidth = GridBagConstraints.REMAINDER;
         latencyPanel.add(new JLabel("Latencies shown in number of cycles w.r.t. the main clock"), c0);
 
-        c0.gridwidth=1;
-        c0.gridheight=1;
-        latencyPanel.add(new JLabel("Checkpoint 1:"),c0);
+        c0.gridwidth = 1;
+        c0.gridheight = 1;
+        latencyPanel.add(new JLabel("Checkpoint 1:"), c0);
         c0.gridwidth = GridBagConstraints.REMAINDER;
         Vector<String> transactions = new Vector<String>(transTimes.keySet());
         transaction1 = new JComboBox<String>(transactions);
         latencyPanel.add(transaction1, c0);
 
-        c0.gridwidth=1;
-        latencyPanel.add(new JLabel("Checkpoint 2:"),c0);
-        c0.gridwidth= GridBagConstraints.REMAINDER;
+        c0.gridwidth = 1;
+        latencyPanel.add(new JLabel("Checkpoint 2:"), c0);
+        c0.gridwidth = GridBagConstraints.REMAINDER;
         transaction2 = new JComboBox<String>(transactions);
         latencyPanel.add(transaction2, c0);
 
 
         addLatencyCheckButton = new JButton(actions[AvatarInteractiveSimulationActions.ACT_ADD_LATENCY]);
-        latencyPanel.add(addLatencyCheckButton,c0);
+        latencyPanel.add(addLatencyCheckButton, c0);
         latm = new LatencyTableModel();
         latm.setData(latencies);
         sorterPI = new TableSorter(latm);
@@ -976,7 +963,6 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         latencyPanel.add(jspLatency, c0);
 
 
-
         //        updateLatencyButton = new JButton(actions[InteractiveSimulationActions.ACT_UPDATE_LATENCY]);
         //      latencyPanel.add(updateLatencyButton,c0);
 
@@ -1016,7 +1002,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         // Making vector of fifos
         AvatarInteractiveSimulationFIFOData fifo;
         fifos = new Vector<AvatarInteractiveSimulationFIFOData>();
-        for(AvatarRelation ar: avspec.getRelations()) {
+        for (AvatarRelation ar : avspec.getRelations()) {
             if (ar.isAsynchronous()) {
                 fifo = new AvatarInteractiveSimulationFIFOData(ar);
                 fifos.add(fifo);
@@ -1076,9 +1062,9 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
     }
 
-    private     void initActions() {
+    private void initActions() {
         actions = new AvatarInteractiveSimulationActions[AvatarInteractiveSimulationActions.NB_ACTION];
-        for(int i=0; i<AvatarInteractiveSimulationActions.NB_ACTION; i++) {
+        for (int i = 0; i < AvatarInteractiveSimulationActions.NB_ACTION; i++) {
             actions[i] = new AvatarInteractiveSimulationActions(i);
             actions[i].addActionListener(this);
             //actions[i].addKeyListener(this);
@@ -1092,7 +1078,6 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     }
 
 
-
     public void setComponents() {
         setAll();
         animateDiagrams();
@@ -1152,7 +1137,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         }
         //      latencies.clear();
         transTimes.clear();
-        for (String id: avspec.checkedIDs){
+        for (String id : avspec.checkedIDs) {
             transTimes.put(id, new ArrayList<String>());
         }
         //ass.killSimulation();
@@ -1164,13 +1149,16 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     }
 
 
-    public void mouseClicked(MouseEvent e) {}
+    public void mouseClicked(MouseEvent e) {
+    }
 
-    public void mouseEntered(MouseEvent e) {}
+    public void mouseEntered(MouseEvent e) {
+    }
 
-    public void mouseExited(MouseEvent e) {}
+    public void mouseExited(MouseEvent e) {
+    }
 
-    public void mousePressed(MouseEvent e){
+    public void mousePressed(MouseEvent e) {
         /*if (e.getSource() == sendTextCommand) {
           if (sendTextCommand.isEnabled()) {
           sendCommand();
@@ -1195,7 +1183,6 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     }
 
 
-
     public void setMode(int _mode) {
         busyMode = _mode;
         //TraceManager.addDev("****************** mode set to " + busyMode);
@@ -1230,45 +1217,45 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     }
 
     public void setAll() {
-        boolean b= true;
-
-        switch(busyMode) {
-        case AvatarSpecificationSimulation.DONT_EXECUTE:
-            actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].setEnabled(true);
-            actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(true);
-            actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(true);
-            actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(true);
-            actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(false);
-
-            b = true;
-            break;
-        case AvatarSpecificationSimulation.GATHER:
-        case AvatarSpecificationSimulation.EXECUTE:
-            actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].setEnabled(false);
-            actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(false);
-            actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(false);
-            actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(false);
-            actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(true);
-            b = false;
-            break;
-        case AvatarSpecificationSimulation.TERMINATED:
-            actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].setEnabled(false);
-            actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(true);
-            actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(false);
-            actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(true);
-            actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(false);
-            b = true;
-            break;
-        case AvatarSpecificationSimulation.INITIALIZE:
-        case AvatarSpecificationSimulation.RESET:
-        case AvatarSpecificationSimulation.KILLED:
-            actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].setEnabled(false);
-            actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(false);
-            actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(false);
-            actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(true);
-            actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(false);
-            b = true;
-            break;
+        boolean b = true;
+
+        switch (busyMode) {
+            case AvatarSpecificationSimulation.DONT_EXECUTE:
+                actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].setEnabled(true);
+                actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(true);
+                actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(true);
+                actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(true);
+                actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(false);
+
+                b = true;
+                break;
+            case AvatarSpecificationSimulation.GATHER:
+            case AvatarSpecificationSimulation.EXECUTE:
+                actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].setEnabled(false);
+                actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(false);
+                actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(false);
+                actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(false);
+                actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(true);
+                b = false;
+                break;
+            case AvatarSpecificationSimulation.TERMINATED:
+                actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].setEnabled(false);
+                actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(true);
+                actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(false);
+                actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(true);
+                actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(false);
+                b = true;
+                break;
+            case AvatarSpecificationSimulation.INITIALIZE:
+            case AvatarSpecificationSimulation.RESET:
+            case AvatarSpecificationSimulation.KILLED:
+                actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].setEnabled(false);
+                actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(false);
+                actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(false);
+                actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(true);
+                actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(false);
+                b = true;
+                break;
         }
 
         actions[AvatarInteractiveSimulationActions.ACT_SAVE_SD_PNG].setEnabled(b);
@@ -1316,7 +1303,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         if (down != null) {
             delete.setEnabled(b && (asyncmsgs.getSelectedIndex() > -1));
             up.setEnabled(b && (asyncmsgs.getSelectedIndex() > 0));
-            down.setEnabled(b && (asyncmsgs.getSelectedIndex() > -1) && (asyncmsgs.getSelectedIndex() < (nbOfAsyncMsgs-1   )));
+            down.setEnabled(b && (asyncmsgs.getSelectedIndex() > -1) && (asyncmsgs.getSelectedIndex() < (nbOfAsyncMsgs - 1)));
         }
     }
 
@@ -1325,54 +1312,54 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     }
 
     public void setLabelColors() {
-        if ((time !=null) && (status != null) && (info != null) && (coverage != null)) {
+        if ((time != null) && (status != null) && (info != null) && (coverage != null)) {
             String oldTime = time.getText();
             int index = oldTime.indexOf("(");
             if (index != -1) {
                 oldTime = oldTime.substring(0, index).trim();
             }
-            String newTime = ""+ass.getClockValue();
+            String newTime = "" + ass.getClockValue();
             if (oldTime.compareTo(newTime) != 0) {
                 newTime += " (before:" + oldTime + ")";
             }
             time.setText(newTime);
             if (ass.getAllTransactions() != null) {
-                info.setText(""+ass.getAllTransactions().size());
+                info.setText("" + ass.getAllTransactions().size());
             } else {
                 info.setText("0");
             }
-            switch(busyMode) {
-            case AvatarSpecificationSimulation.DONT_EXECUTE:
-                status.setText("Stopped");
-                status.setForeground(ColorManager.InteractiveSimulationText_UNKNOWN);
-                time.setForeground(ColorManager.InteractiveSimulationText_UNKNOWN);
-                info.setForeground(ColorManager.InteractiveSimulationText_UNKNOWN);
-                coverage.setForeground(ColorManager.InteractiveSimulationText_UNKNOWN);
-                break;
-            case AvatarSpecificationSimulation.GATHER:
-            case AvatarSpecificationSimulation.EXECUTE:
-            case AvatarSpecificationSimulation.RESET:
-            case AvatarSpecificationSimulation.INITIALIZE:
-                status.setText("Running...");
-                status.setForeground(ColorManager.InteractiveSimulationText_BUSY);
-                time.setForeground(ColorManager.InteractiveSimulationText_BUSY);
-                info.setForeground(ColorManager.InteractiveSimulationText_BUSY);
-                coverage.setForeground(ColorManager.InteractiveSimulationText_BUSY);
-                break;
-            case AvatarSpecificationSimulation.TERMINATED:
-                status.setText("Terminated");
-                status.setForeground(ColorManager.InteractiveSimulationText_TERM);
-                time.setForeground(ColorManager.InteractiveSimulationText_TERM);
-                info.setForeground(ColorManager.InteractiveSimulationText_TERM);
-                coverage.setForeground(ColorManager.InteractiveSimulationText_TERM);
-                break;
-            case AvatarSpecificationSimulation.KILLED:
-                status.setText("killed");
-                status.setForeground(ColorManager.InteractiveSimulationText_TERM);
-                time.setForeground(ColorManager.InteractiveSimulationText_TERM);
-                info.setForeground(ColorManager.InteractiveSimulationText_TERM);
-                coverage.setForeground(ColorManager.InteractiveSimulationText_TERM);
-                break;
+            switch (busyMode) {
+                case AvatarSpecificationSimulation.DONT_EXECUTE:
+                    status.setText("Stopped");
+                    status.setForeground(ColorManager.InteractiveSimulationText_UNKNOWN);
+                    time.setForeground(ColorManager.InteractiveSimulationText_UNKNOWN);
+                    info.setForeground(ColorManager.InteractiveSimulationText_UNKNOWN);
+                    coverage.setForeground(ColorManager.InteractiveSimulationText_UNKNOWN);
+                    break;
+                case AvatarSpecificationSimulation.GATHER:
+                case AvatarSpecificationSimulation.EXECUTE:
+                case AvatarSpecificationSimulation.RESET:
+                case AvatarSpecificationSimulation.INITIALIZE:
+                    status.setText("Running...");
+                    status.setForeground(ColorManager.InteractiveSimulationText_BUSY);
+                    time.setForeground(ColorManager.InteractiveSimulationText_BUSY);
+                    info.setForeground(ColorManager.InteractiveSimulationText_BUSY);
+                    coverage.setForeground(ColorManager.InteractiveSimulationText_BUSY);
+                    break;
+                case AvatarSpecificationSimulation.TERMINATED:
+                    status.setText("Terminated");
+                    status.setForeground(ColorManager.InteractiveSimulationText_TERM);
+                    time.setForeground(ColorManager.InteractiveSimulationText_TERM);
+                    info.setForeground(ColorManager.InteractiveSimulationText_TERM);
+                    coverage.setForeground(ColorManager.InteractiveSimulationText_TERM);
+                    break;
+                case AvatarSpecificationSimulation.KILLED:
+                    status.setText("killed");
+                    status.setForeground(ColorManager.InteractiveSimulationText_TERM);
+                    time.setForeground(ColorManager.InteractiveSimulationText_TERM);
+                    info.setForeground(ColorManager.InteractiveSimulationText_TERM);
+                    coverage.setForeground(ColorManager.InteractiveSimulationText_TERM);
+                    break;
             }
         }
     }
@@ -1399,12 +1386,12 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
     public void resetMetElements() {
         if (avspec.getReferenceObject() instanceof AvatarDesignPanel) {
-            ((AvatarDesignPanel)(avspec.getReferenceObject())).resetMetElements();
+            ((AvatarDesignPanel) (avspec.getReferenceObject())).resetMetElements();
 
         } else if (avspec.getReferenceObject() instanceof AttackTreePanel) {
-            ((AttackTreePanel)(avspec.getReferenceObject())).resetMetElements();
+            ((AttackTreePanel) (avspec.getReferenceObject())).resetMetElements();
         } else if (avspec.getReferenceObject() instanceof FaultTreePanel) {
-            ((FaultTreePanel)(avspec.getReferenceObject())).resetMetElements();
+            ((FaultTreePanel) (avspec.getReferenceObject())).resetMetElements();
         }
 
         if (coverage != null) {
@@ -1413,21 +1400,21 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     }
 
     public void updateMetElements() {
-        Hashtable<AvatarStateMachineElement, Integer> hashOfAllElements  = AvatarSimulationTransaction.hashOfAllElements;
+        Hashtable<AvatarStateMachineElement, Integer> hashOfAllElements = AvatarSimulationTransaction.hashOfAllElements;
         TGComponent tgc;
         Object o;
 
 
-        if ((totalNbOfElements == -1) && (ass != null)){
+        if ((totalNbOfElements == -1) && (ass != null)) {
             totalNbOfElements = 0;
             Vector<Object> mettableElements = new Vector<Object>();
-            for(AvatarSimulationBlock asb: ass.getSimulationBlocks()) {
+            for (AvatarSimulationBlock asb : ass.getSimulationBlocks()) {
                 AvatarBlock ab = asb.getBlock();
                 if (ab != null) {
                     //if (!(ab.getName().startsWith("Timer__"))) {
                     AvatarStateMachine asm = ab.getStateMachine();
                     if (asm != null) {
-                        for(AvatarStateMachineElement elt: asm.getListOfElements()) {
+                        for (AvatarStateMachineElement elt : asm.getListOfElements()) {
                             Object obj = elt.getReferenceObject();
                             if (obj != null) {
 
@@ -1461,19 +1448,19 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
             //int total = 0;
             //int totalMet = 0;
             //TraceManager.addDev("Parsing array of elements: " + objs.length);
-            for(int i=0; i<objs.length; i++) {
+            for (int i = 0; i < objs.length; i++) {
                 o = objs[i];
                 //TraceManager.addDev("objs: " + o);
-                Object oo = ((AvatarStateMachineElement)o).getReferenceObject();
+                Object oo = ((AvatarStateMachineElement) o).getReferenceObject();
                 if (oo != null) {
-                    tgc = (TGComponent)oo;
+                    tgc = (TGComponent) oo;
                     /*if (tgc.getClass().getPackage().getName().compareTo("ui.avatarsmd") == 0) {
                       total ++;
                       }*/
                     //TraceManager.addDev("TGComponent: " + tgc);
                     int met = hashOfAllElements.get(o).intValue();
                     if ((met > 0) && (tgc.getClass().getPackage().getName().compareTo("ui.avatarsmd") == 0)) {
-                        total ++;
+                        total++;
                     }
                     tgc.setAVATARMet(met);
                     //total ++;
@@ -1487,31 +1474,31 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
             nbOfAllExecutedElements = hashOfAllElements.hashCode();
             if ((totalNbOfElements != -1)) {
                 //TraceManager.addDev("totalMet=" + hashOfAllElements.size() + " total=" + totalNbOfElements);
-                double cov = (total*1000.0)/totalNbOfElements;
+                double cov = (total * 1000.0) / totalNbOfElements;
                 cov = Math.floor(cov);
                 coverageVal = cov / 10;
-                if(coverage != null) {
-                    coverage.setText(""+  coverageVal + "%");
+                if (coverage != null) {
+                    coverage.setText("" + coverageVal + "%");
                 }
             }
         }
         //nbOfAllExecutedElements = hashOfAllElements.hashCode();
     }
 
-    public void addLatency(){
+    public void addLatency() {
         SimulationLatency sl = new SimulationLatency();
-        if (transaction1.getSelectedItem() !=null && transaction2.getSelectedItem() != null){        
-	        sl.setTransaction1(transaction1.getSelectedItem().toString());	
-	        sl.setTransaction2(transaction2.getSelectedItem().toString());
-	        nameLatencyMap.put(transaction1.getSelectedItem().toString()+"--"+transaction2.getSelectedItem().toString(), sl);
-	        latencies.add(sl);
-        //        toCheck.add(transaction1.getSelectedItem().toString()+"--"+transaction2.getSelectedItem().toString());
-	        updateTransactionsTable();
-	    }
+        if (transaction1.getSelectedItem() != null && transaction2.getSelectedItem() != null) {
+            sl.setTransaction1(transaction1.getSelectedItem().toString());
+            sl.setTransaction2(transaction2.getSelectedItem().toString());
+            nameLatencyMap.put(transaction1.getSelectedItem().toString() + "--" + transaction2.getSelectedItem().toString(), sl);
+            latencies.add(sl);
+            //        toCheck.add(transaction1.getSelectedItem().toString()+"--"+transaction2.getSelectedItem().toString());
+            updateTransactionsTable();
+        }
     }
 
-    public void resetLatencies(){
-        for (SimulationLatency latency: latencies){
+    public void resetLatencies() {
+        for (SimulationLatency latency : latencies) {
             latency.setMinTime("N/A");
             latency.setMaxTime("N/A");
             latency.setAverageTime("N/A");
@@ -1523,24 +1510,24 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         if (transactiontm != null) {
             transactiontm.fireTableStructureChanged();
         }
-        if (ass!=null && latm!=null){
+        if (ass != null && latm != null) {
             resetLatencies();
-            if (ass.getAllTransactions()!=null){
-                for (AvatarSimulationTransaction trans: ass.getAllTransactions()){
+            if (ass.getAllTransactions() != null) {
+                for (AvatarSimulationTransaction trans : ass.getAllTransactions()) {
                     if ((trans.executedElement != null) && (trans.executedElement.getReferenceObject() != null)) {
                         //                        String id = ((TGComponent)trans.executedElement.getReferenceObject()).getName() + ":"+Integer.toString(trans.executedElement.getID());
                         String id = Integer.toString(trans.executedElement.getID());
                         //  System.out.println(id + " " + transTimes.keySet());
                         //  System.out.println("transaction " + trans.executedElement.getID() + " " + trans.initialClockValue);
-                        String key="";
-                        for (String s: transTimes.keySet()){
+                        String key = "";
+                        for (String s : transTimes.keySet()) {
                             String tmpid = s.split(":")[1];
-                            if (id.equals(tmpid)){
-                                key=s;
+                            if (id.equals(tmpid)) {
+                                key = s;
                             }
                         }
-                        if (transTimes.containsKey(key)){
-                            if (!transTimes.get(key).contains(Long.toString(trans.initialClockValue))){
+                        if (transTimes.containsKey(key)) {
+                            if (!transTimes.get(key).contains(Long.toString(trans.initialClockValue))) {
                                 transTimes.get(key).add(Long.toString(trans.initialClockValue));
                             }
                         }
@@ -1548,45 +1535,45 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
                 }
             }
             //  System.out.println(transTimes);
-            for (String st1:transTimes.keySet()){
-                for (String st2:transTimes.keySet()){
-                    if (st1!=st2 && nameLatencyMap.containsKey(st1 +"--"+st2)){
-                        SimulationLatency sl = nameLatencyMap.get(st1 +"--"+st2);
-                        if (transTimes.get(st1) !=null && transTimes.get(st2)!=null){
+            for (String st1 : transTimes.keySet()) {
+                for (String st2 : transTimes.keySet()) {
+                    if (st1 != st2 && nameLatencyMap.containsKey(st1 + "--" + st2)) {
+                        SimulationLatency sl = nameLatencyMap.get(st1 + "--" + st2);
+                        if (transTimes.get(st1) != null && transTimes.get(st2) != null) {
                             ArrayList<Integer> minTimes = new ArrayList<Integer>();
                             /*SimulationLatency sl = new SimulationLatency();
                               sl.setTransaction1(st1);
                               sl.setTransaction2(st2);*/
-                            for(String time1: transTimes.get(st1)){
+                            for (String time1 : transTimes.get(st1)) {
                                 //Find the first subsequent transaction
                                 int time = Integer.MAX_VALUE;
-                                for (String time2: transTimes.get(st2)){
+                                for (String time2 : transTimes.get(st2)) {
                                     int diff = Integer.valueOf(time2) - Integer.valueOf(time1);
-                                    if (diff < time && diff >=0){
-                                        time=diff;
+                                    if (diff < time && diff >= 0) {
+                                        time = diff;
                                     }
                                 }
-                                if (time!=Integer.MAX_VALUE){
+                                if (time != Integer.MAX_VALUE) {
                                     minTimes.add(time);
                                 }
                             }
                             //  System.out.println(transTimes.get(st1) + " " + transTimes.get(st2) + " " + minTimes);
-                            if (minTimes.size()>0){
-                                int sum=0;
+                            if (minTimes.size() > 0) {
+                                int sum = 0;
                                 sl.setMinTime(Integer.toString(Collections.min(minTimes)));
                                 sl.setMaxTime(Integer.toString(Collections.max(minTimes)));
-                                for (int time: minTimes){
-                                    sum+=time;
+                                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);
+                                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 = stdev / minTimes.size();
                                 stdev = Math.sqrt(stdev);
-                                sl.setAverageTime(String.format("%.1f",average));
-                                sl.setStDev(String.format("%.1f",stdev));
+                                sl.setAverageTime(String.format("%.1f", average));
+                                sl.setStDev(String.format("%.1f", stdev));
                                 mgui.addLatencyVals(Integer.valueOf(st2.split(":")[1]), new String[]{st1, Integer.toString(Collections.max(minTimes))});
                             }
                             //                          latencies.add(sl);
@@ -1599,16 +1586,16 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
                 }
             }
 
-            if (latm !=null && latencies.size()>0){
+            if (latm != null && latencies.size() > 0) {
                 latm.setData(latencies);
-                ((AvatarDesignPanel)(avspec.getReferenceObject())).modelBacktracingLatency(latencies);
+                ((AvatarDesignPanel) (avspec.getReferenceObject())).modelBacktracingLatency(latencies);
             }
         }
     }
 
 
     public String[] getFirstMessagesOnEachConnectorSide(AvatarBDPortConnector conn) {
-        String []messages = new String[2];
+        String[] messages = new String[2];
         messages[0] = null;
         messages[1] = null;
         boolean b0, b1;
@@ -1621,8 +1608,9 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
             return messages;
         }
 
-        b0 = false; b1 = false;
-        for(AvatarSimulationAsynchronousTransaction msg: lastAsyncmsgs) {
+        b0 = false;
+        b1 = false;
+        for (AvatarSimulationAsynchronousTransaction msg : lastAsyncmsgs) {
             ar = msg.getRelation();
             if (ar.hasReferenceObject(conn)) {
                 ab = ar.getInBlock(msg.getIndex());
@@ -1662,18 +1650,18 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
             lastAsyncmsgs = new Vector<>(ass.getAsynchronousMessages());
 
             if (fifos != null) {
-                for(AvatarInteractiveSimulationFIFOData fifo: fifos) {
-                    fifo.nb=0;
+                for (AvatarInteractiveSimulationFIFOData fifo : fifos) {
+                    fifo.nb = 0;
                 }
             }
 
             if (lastAsyncmsgs != null) {
 
                 if (lastAsyncmsgs.size() > 0) {
-                    for(AvatarSimulationAsynchronousTransaction msg: lastAsyncmsgs) {
-                        for(AvatarInteractiveSimulationFIFOData fifo0: fifos) {
+                    for (AvatarSimulationAsynchronousTransaction msg : lastAsyncmsgs) {
+                        for (AvatarInteractiveSimulationFIFOData fifo0 : fifos) {
                             if (fifo0.fifo == msg.getRelation()) {
-                                fifo0.nb ++;
+                                fifo0.nb++;
                                 break;
                             }
                         }
@@ -1689,13 +1677,12 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
                 }
 
 
-
                 if (asyncmsgs != null) {
-                    AvatarInteractiveSimulationFIFOData currentFifo = (AvatarInteractiveSimulationFIFOData)(comboFIFOs.getSelectedItem());
+                    AvatarInteractiveSimulationFIFOData currentFifo = (AvatarInteractiveSimulationFIFOData) (comboFIFOs.getSelectedItem());
                     if (currentFifo != null) {
                         nbOfAsyncMsgs = 0;
                         Vector<AvatarSimulationAsynchronousTransaction> vectorForList = new Vector<AvatarSimulationAsynchronousTransaction>();
-                        for(AvatarSimulationAsynchronousTransaction as: lastAsyncmsgs) {
+                        for (AvatarSimulationAsynchronousTransaction as : lastAsyncmsgs) {
                             if (as.getRelation() == currentFifo.fifo) {
                                 vectorForList.add(as);
                                 nbOfAsyncMsgs++;
@@ -1717,11 +1704,11 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
                 runningTGComponents.clear();
                 AvatarStateMachineElement asme;
                 TGComponent tgc;
-                for(AvatarSimulationBlock block: ass.getSimulationBlocks()) {
+                for (AvatarSimulationBlock block : ass.getSimulationBlocks()) {
                     asme = block.getCurrentAvatarElement();
                     if (asme != null) {
                         // Search for corresponding element in avatar spec
-                        tgc = (TGComponent)(asme.getReferenceObject());
+                        tgc = (TGComponent) (asme.getReferenceObject());
                         if (tgc != null) {
                             //TraceManager.addDev("Found an object:" + tgc);
                             runningTGComponents.add(tgc);
@@ -1770,12 +1757,11 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         } else {
             // Using model directory
             String path = mgui.getModelFileFullPath();
-            fileName = path.substring(0,path.lastIndexOf(File.separator)+1) + fileName;
+            fileName = path.substring(0, path.lastIndexOf(File.separator) + 1) + fileName;
             TraceManager.addDev("New Filename = " + fileName);
         }
 
 
-
         boolean ok = true;
 
         try {
@@ -1787,9 +1773,9 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
         if (!ok) {
             JOptionPane.showMessageDialog(this,
-                                          "The capture could not be performed: the file name or path is not valid",
-                                          "Error",
-                                          JOptionPane.INFORMATION_MESSAGE);
+                    "The capture could not be performed: the file name or path is not valid",
+                    "Error",
+                    JOptionPane.INFORMATION_MESSAGE);
             return;
         }
 
@@ -1799,16 +1785,16 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
         } catch (Exception e) {
             JOptionPane.showMessageDialog(this,
-                                          "The simulation trace in text format could not be saved: " + e.getMessage(),
-                                          "Error",
-                                          JOptionPane.INFORMATION_MESSAGE);
+                    "The simulation trace in text format could not be saved: " + e.getMessage(),
+                    "Error",
+                    JOptionPane.INFORMATION_MESSAGE);
             return;
         }
 
         JOptionPane.showMessageDialog(this,
-                                      "Simulation trace was saved in " + fileName,
-                                      "Error",
-                                      JOptionPane.INFORMATION_MESSAGE);
+                "Simulation trace was saved in " + fileName,
+                "Error",
+                JOptionPane.INFORMATION_MESSAGE);
 
         //ass.printExecutedTransactions();
     }
@@ -1817,6 +1803,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
     public void actSaveSvg() {
         TraceManager.addDev("Saving in svg format");
 
+
         // Testing file for save
 
         String fileName = saveFileName.getText().trim();
@@ -1850,11 +1837,10 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
             return;
         }
 
-        newSVGSave("NEW" + fileName);
-
+        newSVGSave(fileName);
 
 
-      StringBuffer sb = new StringBuffer("<?xml version=\"1.0\" standalone=\"no\"?>\n");
+        /*StringBuffer sb = new StringBuffer("<?xml version=\"1.0\" standalone=\"no\"?>\n");
         sb.append("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n");
         sb.append("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n");
 
@@ -1876,20 +1862,20 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
         } catch (Exception e) {
             JOptionPane.showMessageDialog(this,
-                                          "The capture could not be performed: " + e.getMessage(),
-                                          "Error",
-                                          JOptionPane.INFORMATION_MESSAGE);
+                    "The capture could not be performed: " + e.getMessage(),
+                    "Error",
+                    JOptionPane.INFORMATION_MESSAGE);
             return;
         }
 
         JOptionPane.showMessageDialog(this,
-                                      "The capture was performed in " + fileName,
-                                      "Error",
-                                      JOptionPane.INFORMATION_MESSAGE);
+                "The capture was performed in " + fileName,
+                "Error",
+                JOptionPane.INFORMATION_MESSAGE);
 
         //TraceManager.addDev("Svg=" + sb.toString());
 
-        //return sb.toString();
+        //return sb.toString();*/
 
     }
 
@@ -1908,14 +1894,21 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
 
         // Ask the test to render into the SVG Graphics2D implementation.
+        sdpanel.paint(svgGenerator);
         /*TestSVGGen test = new TestSVGGen();
-        test.paint(svgGenerator);
+        test.paint(svgGenerator);*/
 
         // Finally, stream out SVG to the standard output using
         // UTF-8 encoding.
         boolean useCSS = true; // we want to use CSS style attributes
-        Writer out = new OutputStreamWriter(System.out, "UTF-8");
-        svgGenerator.stream(out, useCSS);*/
+        try {
+            File fileSave = new File(fileName);
+            FileOutputStream fos = new FileOutputStream(fileSave);
+            Writer out = new OutputStreamWriter(fos, "UTF-8");
+            svgGenerator.stream(out, useCSS);
+        } catch (Exception e) {
+            TraceManager.addDev("SVG generation failed: " + e.getMessage());
+        }
     }
 
     public void actSaveSDPNG() {
@@ -1925,7 +1918,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
         bi = sdpanel.performCapture();
 
-        String filePath="";
+        String filePath = "";
         if (ConfigurationTTool.isConfigured(ConfigurationTTool.IMGPath)) {
             filePath += ConfigurationTTool.IMGPath;
             if (!filePath.endsWith(File.separator)) {
@@ -1933,7 +1926,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
             }
         } else {
             String path = mgui.getModelFileFullPath();
-            filePath = path.substring(0,path.lastIndexOf(File.separator)+1);
+            filePath = path.substring(0, path.lastIndexOf(File.separator) + 1);
         }
 
         if ((saveFileName.getText() != null) && (saveFileName.getText().length() > 0)) {
@@ -1949,10 +1942,10 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
     public void deleteAsyncMsg() {
         //TraceManager.addDev("Deleting async msg");
-        if ((ass != null) && (!isBusy())){
+        if ((ass != null) && (!isBusy())) {
             int index = asyncmsgs.getSelectedIndex();
             if (index > -1) {
-                boolean pendingModified = ass.removeAsyncMessage(((AvatarInteractiveSimulationFIFOData)(comboFIFOs.getSelectedItem())).fifo, index);
+                boolean pendingModified = ass.removeAsyncMessage(((AvatarInteractiveSimulationFIFOData) (comboFIFOs.getSelectedItem())).fifo, index);
                 updateAsynchronousChannels();
                 if (pendingModified) {
                     updatePending();
@@ -1964,12 +1957,12 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
     public void upAsyncMsg() {
         //TraceManager.addDev("Up async msg");
-        if ((ass != null) && (!isBusy())){
+        if ((ass != null) && (!isBusy())) {
             int index = asyncmsgs.getSelectedIndex();
             if (index > 0) {
-                ass.moveAsyncMessage(((AvatarInteractiveSimulationFIFOData)(comboFIFOs.getSelectedItem())).fifo, index ,index-1);
+                ass.moveAsyncMessage(((AvatarInteractiveSimulationFIFOData) (comboFIFOs.getSelectedItem())).fifo, index, index - 1);
                 updateAsynchronousChannels();
-                asyncmsgs.setSelectedIndex(index-1);
+                asyncmsgs.setSelectedIndex(index - 1);
             }
         }
 
@@ -1979,24 +1972,24 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
     public void downAsyncMsg() {
         //TraceManager.addDev("Down async msg");
-        if ((ass != null) && (!isBusy())){
+        if ((ass != null) && (!isBusy())) {
             int index = asyncmsgs.getSelectedIndex();
             if (index > -1) {
                 //TraceManager.addDev("Moving from  index: " + index + " to: " + (index+1));
-                ass.moveAsyncMessage(((AvatarInteractiveSimulationFIFOData)(comboFIFOs.getSelectedItem())).fifo, index, index+1);
+                ass.moveAsyncMessage(((AvatarInteractiveSimulationFIFOData) (comboFIFOs.getSelectedItem())).fifo, index, index + 1);
                 updateAsynchronousChannels();
                 //TraceManager.addDev("Selecting list at index:" + index);
                 asyncmsgs.repaint();
-                asyncmsgs.setSelectedIndex(index+1);
+                asyncmsgs.setSelectedIndex(index + 1);
             }
         }
         //printFullList();
     }
 
     public void printFullList() {
-        int  i = 0;
+        int i = 0;
         if (ass != null) {
-            for(AvatarSimulationAsynchronousTransaction tr: ass.getAsynchronousMessages()) {
+            for (AvatarSimulationAsynchronousTransaction tr : ass.getAsynchronousMessages()) {
                 TraceManager.addDev("#" + i + "\t: " + tr);
                 i++;
             }
@@ -2005,78 +1998,79 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
 
     // Mouse management
-    public void mouseReleased(MouseEvent e) {}
-
+    public void mouseReleased(MouseEvent e) {
+    }
 
 
     /**
      * This adapter is constructed to handle mouse over component events.
      */
-    private class MouseHandler extends MouseAdapter  {
+    private class MouseHandler extends MouseAdapter {
 
         private JLabel label;
 
         /**
          * ctor for the adapter.
+         *
          * @param label the JLabel which will recieve value of the
          *              Action.LONG_DESCRIPTION key.
          */
-        public MouseHandler(JLabel label)  {
+        public MouseHandler(JLabel label) {
             setLabel(label);
         }
 
-        public void setLabel(JLabel label)  {
+        public void setLabel(JLabel label) {
             this.label = label;
         }
 
-        public void mouseEntered(MouseEvent evt)  {
-            if (evt.getSource() instanceof AbstractButton)  {
-                AbstractButton button = (AbstractButton)evt.getSource();
+        public void mouseEntered(MouseEvent evt) {
+            if (evt.getSource() instanceof AbstractButton) {
+                AbstractButton button = (AbstractButton) evt.getSource();
                 Action action = button.getAction();
-                if (action != null)  {
-                    String message = (String)action.getValue(Action.LONG_DESCRIPTION);
+                if (action != null) {
+                    String message = (String) action.getValue(Action.LONG_DESCRIPTION);
                     label.setText(message);
                 }
             }
         }
     }
 
-    public void actionPerformed(ActionEvent evt)  {
+    public void actionPerformed(ActionEvent evt) {
         String command = evt.getActionCommand();
         //TraceManager.addDev("Command:" + command);
 
-        if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].getActionCommand()))  {
+        if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_RUN_SIMU].getActionCommand())) {
             runSimulation();
             //TraceManager.addDev("Start simulation!");
-        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].getActionCommand()))  {
+        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].getActionCommand())) {
             runXCommands();
 
-        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].getActionCommand()))  {
+        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].getActionCommand())) {
             stopSimulation();
 
-        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].getActionCommand()))  {
+        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].getActionCommand())) {
             backwardOneTransaction();
 
-        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].getActionCommand()))  {
+        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].getActionCommand())) {
             resetSimulation();
 
-        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_STOP_AND_CLOSE_ALL].getActionCommand()))  {
+        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_STOP_AND_CLOSE_ALL].getActionCommand())) {
             close();
             return;
 
-        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_SAVE_TXT].getActionCommand()))  {
+        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_SAVE_TXT].getActionCommand())) {
             actSaveTxt();
             return;
 
-        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_SAVE_SD_PNG].getActionCommand()))  {
+        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_SAVE_SD_PNG].getActionCommand())) {
             actSaveSDPNG();
             return;
 
-        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_SAVE_SVG].getActionCommand()))  {
+        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_SAVE_SVG].getActionCommand())) {
             actSaveSvg();
             return;
 
-        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_ZOOM_IN].getActionCommand()))  {
+        } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_ZOOM_IN].getActionCommand())) {
             zoomIn();
             return;
 
@@ -2104,23 +2098,23 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
                     ass.forceRandom(-1);
                 }
             }
-        } else if  (evt.getSource() == comboFIFOs) {
+        } else if (evt.getSource() == comboFIFOs) {
             updateAsynchronousChannels();
             setDeleteUpDown();
-        } else if (evt.getSource() == delete)  {
+        } else if (evt.getSource() == delete) {
             deleteAsyncMsg();
             return;
-        } else if (evt.getSource() == up)  {
+        } else if (evt.getSource() == up) {
             TraceManager.addDev("Source = up");
             upAsyncMsg();
-        } else if (evt.getSource() == down)  {
+        } else if (evt.getSource() == down) {
             TraceManager.addDev("Source = up");
             downAsyncMsg();
         }
 
         // Check for source of jcheckbox
         int index = 0;
-        for(JCheckBox jcb: displayedBlocks) {
+        for (JCheckBox jcb : displayedBlocks) {
             if (evt.getSource() == jcb) {
                 ass.getSimulationBlocks().get(index).selected = jcb.isSelected();
                 TraceManager.addDev("Block " + ass.getSimulationBlocks().get(index) + " is now " + ass.getSimulationBlocks().get(index).selected);
@@ -2128,7 +2122,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
                 sdpanel.repaint();
                 return;
             }
-            index ++;
+            index++;
         }
     }
 
@@ -2147,14 +2141,14 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
         if (index > -1) {
             try {
                 AvatarSimulationPendingTransaction aspt = listPendingTransactions.getSelectedValue();
-                selectedComponentForTransaction1 = (TGComponent)(aspt.elementToExecute.getReferenceObject());
+                selectedComponentForTransaction1 = (TGComponent) (aspt.elementToExecute.getReferenceObject());
                 selectedComponentForTransaction2 = null;
                 if ((selectedComponentForTransaction1 == null) && (aspt.linkedTransaction != null)) {
                     //TraceManager.addDev("Adding reference object: " + aspt.linkedTransaction.elementToExecute.getReferenceObject());
-                    selectedComponentForTransaction1 = (TGComponent)(aspt.linkedTransaction.elementToExecute.getReferenceObject());
+                    selectedComponentForTransaction1 = (TGComponent) (aspt.linkedTransaction.elementToExecute.getReferenceObject());
                     selectedComponentForTransaction2 = null;
                 } else if (aspt.linkedTransaction != null) {
-                    selectedComponentForTransaction2 = (TGComponent)(aspt.linkedTransaction.elementToExecute.getReferenceObject());
+                    selectedComponentForTransaction2 = (TGComponent) (aspt.linkedTransaction.elementToExecute.getReferenceObject());
                 }
                 if (!(busyMode == AvatarSpecificationSimulation.GATHER) && !(busyMode == AvatarSpecificationSimulation.EXECUTE)) {
                     ass.setIndexSelectedTransaction(listPendingTransactions.getSelectedIndex());
@@ -2169,12 +2163,12 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
                         mgui.refreshCurrentPanel();
                     }
                 }
-            } catch (Exception ex){
+            } catch (Exception ex) {
                 TraceManager.addDev("Exception selected component");
                 selectedComponentForTransaction1 = null;
                 selectedComponentForTransaction2 = null;
                 if (openDiagram.isSelected()) {
-                    if ((previousBlock != null) &&  (animate.isSelected())){
+                    if ((previousBlock != null) && (animate.isSelected())) {
                         mgui.openAVATARSMD(previousBlock.getName());
                     } else {
                         mgui.refreshCurrentPanel();
@@ -2216,7 +2210,7 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
             ass.setExecuteEmptyTransition(executeEmptyTransition.isSelected());
         } else if (e.getSource() == executeStateEntering) {
             ass.setExecuteStateEntering(executeStateEntering.isSelected());
-        } else if  (e.getSource() == traceInSD) {
+        } else if (e.getSource() == traceInSD) {
             if (sdpanel != null) {
                 sdpanel.setTrace(traceInSD.isSelected());
                 sdpanel.repaint();
diff --git a/ttool/META-INF/MANIFEST.MF b/ttool/META-INF/MANIFEST.MF
index bb5a4b141a..a293f3cdd6 100644
--- a/ttool/META-INF/MANIFEST.MF
+++ b/ttool/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
-Class-Path: jsoup-1.8.1.jar commons-codec-1.10.jar gs-core-1.3.jar gs-ui-1.3.jar commons-io-2.5.jar commons-math3-3.6.1.jar
+Class-Path: jsoup-1.8.1.jar commons-codec-1.10.jar gs-core-1.3.jar gs-ui-1.3.jar commons-io-2.5.jar commons-math3-3.6.1.jar batik-awt-util.jar batik-dom.jar batik-svggen.jar batik-util.jar batik-xml.jar
 Main-Class: Main
 
-- 
GitLab