From c0760ff590c63cb89839e2ce81e633b1cabdc987 Mon Sep 17 00:00:00 2001
From: maysam zoor <maysam_zoor@hotmail.com>
Date: Mon, 23 Mar 2020 22:24:48 +0100
Subject: [PATCH] add progress bar

---
 .../DirectedGraphTranslator.java              | 310 +++++++++++++++---
 .../JFrameCompareLatencyDetail.java           | 271 +++++++++++----
 .../JFrameLatencyDetailedAnalysis.java        |  59 +++-
 .../latencyDetailedAnalysisMain.java          | 127 +++----
 .../CompareLatencyInSimulationTraces.java     |  84 +++--
 5 files changed, 633 insertions(+), 218 deletions(-)

diff --git a/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java b/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java
index 09674e578c..f454ef771a 100644
--- a/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java
+++ b/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java
@@ -66,7 +66,9 @@ import javax.swing.DefaultListModel;
 import javax.swing.JApplet;
 import javax.swing.JFrame;
 import javax.swing.JList;
+import javax.swing.JProgressBar;
 import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
 
 import org.apache.commons.math3.geometry.spherical.twod.Vertex;
 import org.apache.derby.tools.sysinfo;
@@ -157,11 +159,13 @@ public class DirectedGraphTranslator extends JApplet {
     // private TMLArchiPanel tmlap; // USed to retrieve the currently opened
     // architecture panel
     // private TMLMapping<TGComponent> tmap;
-    private TMLComponentDesignPanel tmlcdp;
+    // private TMLComponentDesignPanel tmlcdp;
 
     private TMLTask task, task1, task2;
 
     protected TMLActivity activity;
+    int nodeNbProgressBar = 0;
+    int nodeNb = 0;
 
     // List<HwNode> path;
 
@@ -180,7 +184,8 @@ public class DirectedGraphTranslator extends JApplet {
     }
 
     private static final Dimension DEFAULT_SIZE = new Dimension(530, 320);
-    private final List<TMLComponentDesignPanel> cpanels;
+    private List<TMLComponentDesignPanel> cpanels;
+
     private final List<HwLink> links;
     private final TMLMapping<TGComponent> tmap;
     private final HashMap<String, String> addedEdges = new HashMap<String, String>();
@@ -247,18 +252,37 @@ public class DirectedGraphTranslator extends JApplet {
     Vector<SimulationTransaction> relatedsimTraces = new Vector<SimulationTransaction>();
     Vector<SimulationTransaction> delayDueTosimTraces = new Vector<SimulationTransaction>();
 
+    JFrameLatencyDetailedAnalysis frameLatencyDetailedAnalysis;
+    JFrameCompareLatencyDetail frameCompareLatencyDetail;
+    int callingFrame;
+    int nbOfNodes = 0;
+
     HashMap<String, ArrayList<ArrayList<Integer>>> runnableTimePerDevice = new HashMap<String, ArrayList<ArrayList<Integer>>>();
 
     @SuppressWarnings("deprecation")
-    public DirectedGraphTranslator(TMLMapping<TGComponent> tmap1, List<TMLComponentDesignPanel> cpanels1) {
+    public DirectedGraphTranslator(JFrameLatencyDetailedAnalysis jFrameLatencyDetailedAnalysis, JFrameCompareLatencyDetail jframeCompareLatencyDetail,
+            TMLMapping<TGComponent> tmap1, List<TMLComponentDesignPanel> cpanels1, int i) {
 
         tmap = tmap1;
-        cpanels = cpanels1;
+        setCpanels(cpanels1);
 
         links = tmap.getTMLArchitecture().getHwLinks();
 
-        tmlcdp = cpanels.get(0);
+        // tmlcdp = getCpanels().get(0);
+
+        callingFrame = i;
+
+        if (callingFrame == 0)
+
+        {
+            frameLatencyDetailedAnalysis = jFrameLatencyDetailedAnalysis;
+        } else if (callingFrame == 1) {
+            frameCompareLatencyDetail = jframeCompareLatencyDetail;
+            // frameCompareLatencyDetail.pack();
+            // frameCompareLatencyDetail.revalidate();
+            // frameCompareLatencyDetail.repaint();
 
+        }
         DrawDirectedGraph();
 
         /*
@@ -287,6 +311,118 @@ public class DirectedGraphTranslator extends JApplet {
     // The main function to add the vertices and edges according to the model
 
     private void DrawDirectedGraph() {
+        nodeNbProgressBar = 0;
+
+        nodeNbProgressBar = tmap.getArch().getBUSs().size() + tmap.getArch().getHwBridge().size() + tmap.getArch().getHwA().size()
+                + tmap.getArch().getMemories().size() + tmap.getArch().getCPUs().size();
+
+        for (HwA node : tmap.getArch().getHwA()) {
+
+            if (tmap.getLisMappedTasks(node).size() > 0) {
+
+                nodeNbProgressBar = tmap.getLisMappedTasks(node).size() + nodeNbProgressBar;
+
+                for (TMLTask task : tmap.getLisMappedTasks(node)) {
+
+                    nodeNbProgressBar = task.getActivityDiagram().nElements() + nodeNbProgressBar;
+
+                }
+
+            }
+
+        }
+
+        for (HwNode node : tmap.getArch().getCPUs()) {
+
+            if (tmap.getLisMappedTasks(node).size() > 0) {
+
+                nodeNbProgressBar = tmap.getLisMappedTasks(node).size() + nodeNbProgressBar;
+
+                for (TMLTask task : tmap.getLisMappedTasks(node)) {
+
+                    nodeNbProgressBar = task.getActivityDiagram().nElements() + nodeNbProgressBar;
+
+                }
+
+            }
+        }
+
+        HashSet<String> mappedcomm = new HashSet<String>();
+
+        for (HwNode node : tmap.getArch().getBUSs()) {
+
+            if (tmap.getLisMappedChannels(node).size() > 0) {
+                for (TMLElement entry : tmap.getLisMappedChannels(node)) {
+
+                    if (!mappedcomm.contains(entry.getName())) {
+                        mappedcomm.add(entry.getName());
+                        nodeNbProgressBar++;
+
+                    }
+
+                }
+            }
+
+        }
+
+        for (HwNode node : tmap.getArch().getHwBridge()) {
+
+            if (tmap.getLisMappedChannels(node).size() > 0) {
+
+                for (TMLElement entry : tmap.getLisMappedChannels(node)) {
+                    if (!mappedcomm.contains(entry.getName())) {
+                        mappedcomm.add(entry.getName());
+                        nodeNbProgressBar++;
+
+                    }
+
+                }
+            }
+
+        }
+
+        for (HwNode node : tmap.getArch().getMemories()) {
+
+            if (tmap.getLisMappedChannels(node).size() > 0) {
+                for (TMLElement entry : tmap.getLisMappedChannels(node)) {
+                    if (!mappedcomm.contains(entry.getName())) {
+                        mappedcomm.add(entry.getName());
+                        nodeNbProgressBar++;
+
+                    }
+
+                }
+
+            }
+
+        }
+
+        for (TMLChannel ch : tmap.getTMLModeling().getChannels()) {
+
+            if (!mappedcomm.contains(ch.getName())) {
+                mappedcomm.add(ch.getName());
+
+                nodeNbProgressBar++;
+
+            }
+
+        }
+
+        if (callingFrame == 0)
+
+        {
+            frameLatencyDetailedAnalysis.pbar.setMaximum(nodeNbProgressBar);
+            frameLatencyDetailedAnalysis.pbar.setMinimum(0);
+
+        }
+        if (callingFrame == 1)
+
+        {
+            frameCompareLatencyDetail.pbar.setMaximum(nodeNbProgressBar);
+            frameCompareLatencyDetail.pbar.setMinimum(0);
+        }
+
+        nbOfNodes = 0;
 
         HashMap<String, HashSet<String>> cpuTasks;
         HashMap<String, HashSet<TMLElement>> buschannel = new HashMap<String, HashSet<TMLElement>>();
@@ -300,7 +436,12 @@ public class DirectedGraphTranslator extends JApplet {
 
         for (HwNode node : tmap.getArch().getBUSs()) {
 
-            g.addVertex(node.getName());
+            if (!g.containsVertex(node.getName())) {
+                g.addVertex(node.getName());
+
+                updatemainBar("getBUSs");
+
+            }
 
             if (tmap.getLisMappedChannels(node).size() > 0) {
                 buschannel.put(node.getName(), tmap.getLisMappedChannels(node));
@@ -311,7 +452,12 @@ public class DirectedGraphTranslator extends JApplet {
 
         for (HwNode node : tmap.getArch().getHwBridge()) {
 
-            g.addVertex(node.getName());
+            if (!g.containsVertex(node.getName())) {
+                g.addVertex(node.getName());
+
+                updatemainBar("getHwBridge");
+
+            }
 
             if (tmap.getLisMappedChannels(node).size() > 0) {
                 bridgechannel.put(node.getName(), tmap.getLisMappedChannels(node));
@@ -322,7 +468,10 @@ public class DirectedGraphTranslator extends JApplet {
 
         for (HwA node : tmap.getArch().getHwA()) {
 
+            cpuTask = new HashMap<String, HashSet<TMLTask>>();
+
             if (tmap.getLisMappedTasks(node).size() > 0) {
+
                 cpuTask.put(node.getName(), tmap.getLisMappedTasks(node));
 
             }
@@ -338,7 +487,12 @@ public class DirectedGraphTranslator extends JApplet {
 
         for (HwNode node : tmap.getArch().getMemories()) {
 
-            g.addVertex(node.getName());
+            if (!g.containsVertex(node.getName())) {
+                g.addVertex(node.getName());
+
+                updatemainBar("getMemories");
+
+            }
 
             if (tmap.getLisMappedChannels(node).size() > 0) {
                 memorychannel.put(node.getName(), tmap.getLisMappedChannels(node));
@@ -354,7 +508,14 @@ public class DirectedGraphTranslator extends JApplet {
             for (TMLElement busCh : busChList) {
 
                 String ChannelName = busCh.getName();
-                g.addVertex(ChannelName);
+
+                if (!g.containsVertex(ChannelName)) {
+                    g.addVertex(ChannelName);
+
+                    updatemainBar("ChannelName");
+
+                }
+
                 g.addEdge(busName, ChannelName);
 
                 TMLChannel tmlch = (TMLChannel) busCh;
@@ -373,7 +534,13 @@ public class DirectedGraphTranslator extends JApplet {
             for (TMLElement busCh : busChList) {
 
                 String ChannelName = busCh.getName();
-                g.addVertex(ChannelName);
+                if (!g.containsVertex(ChannelName)) {
+                    g.addVertex(ChannelName);
+
+                    updatemainBar("ChannelName");
+
+                }
+
                 g.addEdge(busName, ChannelName);
             }
 
@@ -386,7 +553,13 @@ public class DirectedGraphTranslator extends JApplet {
             for (TMLElement busCh : busChList) {
 
                 String ChannelName = busCh.getName();
-                g.addVertex(ChannelName);
+                if (!g.containsVertex(ChannelName)) {
+                    g.addVertex(ChannelName);
+
+                    updatemainBar("ChannelName");
+
+                }
+
                 g.addEdge(busName, ChannelName);
             }
 
@@ -399,6 +572,7 @@ public class DirectedGraphTranslator extends JApplet {
 
             if (!g.vertexSet().contains(ch.getName())) {
                 g.addVertex(ch.getName());
+                updatemainBar(ch.getName());
             }
 
             if (!pathNodes.isEmpty()) {
@@ -427,7 +601,9 @@ public class DirectedGraphTranslator extends JApplet {
         SummaryCommMapping = tmap.getSummaryCommMapping();
 
         for (HwNode node : tmap.getArch().getCPUs()) {
+            cpuTask = new HashMap<String, HashSet<TMLTask>>();
             if (tmap.getLisMappedTasks(node).size() > 0) {
+
                 cpuTask.put(node.getName(), tmap.getLisMappedTasks(node));
 
             }
@@ -510,6 +686,22 @@ public class DirectedGraphTranslator extends JApplet {
 
     // draw the vertices and edges for the tasks mapped to the CPUs
 
+    private void updatemainBar(String string) {
+
+        nbOfNodes++;
+
+        if (callingFrame == 0)
+
+        {
+            frameLatencyDetailedAnalysis.updateBar(nbOfNodes);
+        } else if (callingFrame == 1) {
+
+            frameCompareLatencyDetail.updateBar(nbOfNodes);
+
+        }
+
+    }
+
     public HashMap<String, HashSet<String>> getCPUTaskMap(HashMap<String, HashSet<TMLTask>> cpuTask) {
 
         HashMap<String, HashSet<String>> cpuTaskMap = new HashMap<String, HashSet<String>>();
@@ -600,14 +792,14 @@ public class DirectedGraphTranslator extends JApplet {
 
             for (TMLTask task : value) {
 
-                for (TMLComponentDesignPanel dpPanel : cpanels) {
-                    String[] taskpanel = task.getName().split("__");
-
-                    if (dpPanel.getNameOfTab().equals(taskpanel[0])) {
-                        tmlcdp = dpPanel;
-                    }
-
-                }
+                /*
+                 * for (TMLComponentDesignPanel dpPanel : getCpanels()) { String[] taskpanel =
+                 * task.getName().split("__");
+                 * 
+                 * if (dpPanel.getNameOfTab().equals(taskpanel[0])) { tmlcdp = dpPanel; }
+                 * 
+                 * }
+                 */
                 // get the names and params of send events per task and their corresponding wait
                 // events
                 for (TMLSendEvent sendEvent : task.getSendEvents()) {
@@ -697,8 +889,15 @@ public class DirectedGraphTranslator extends JApplet {
                 }
 
                 // add the name of the task as a vertex
-                g.addVertex(key);
-                g.addVertex(task.getName());
+
+                if (!g.vertexSet().contains(key)) {
+                    g.addVertex(key);
+                    updatemainBar(key);
+                }
+                if (!g.vertexSet().contains(task.getName())) {
+                    g.addVertex(task.getName());
+                    updatemainBar(task.getName());
+                }
 
                 g.addEdge(key, task.getName());
 
@@ -747,6 +946,8 @@ public class DirectedGraphTranslator extends JApplet {
 
                     }
 
+                    updatemainBar(eventName);
+
                     if (currentElement.getNexts().size() > 1) {
                         for (TMLActivityElement ae : currentElement.getNexts()) {
                             multiNexts.add(ae);
@@ -767,6 +968,7 @@ public class DirectedGraphTranslator extends JApplet {
                                 + activity.getPrevious(currentElement).getID();
 
                         g.addVertex(taskEndName);
+
                         // allTasks.add(taskEndName);
 
                         if (!(activity.getPrevious(currentElement).getReferenceObject() instanceof TMLADSequence)) {
@@ -1961,33 +2163,30 @@ public class DirectedGraphTranslator extends JApplet {
             for (SimulationTransaction st : transFile1) {
                 Boolean onPath = false;
 
-               // if (Integer.valueOf(st.startTime) >= times1.get(i) && Integer.valueOf(st.startTime) < times2.get(i)) {
+                // if (Integer.valueOf(st.startTime) >= times1.get(i) &&
+                // Integer.valueOf(st.startTime) < times2.get(i)) {
 
-                    
-                    
-                    
-                    if (!(Integer.valueOf(st.startTime) < times1.get(i) && Integer.valueOf(st.endTime) < times1.get(i))
-                            && !(Integer.valueOf(st.startTime) > times2.get(i) && Integer.valueOf(st.endTime) > times2.get(i))) {
+                if (!(Integer.valueOf(st.startTime) < times1.get(i) && Integer.valueOf(st.endTime) < times1.get(i))
+                        && !(Integer.valueOf(st.startTime) > times2.get(i) && Integer.valueOf(st.endTime) > times2.get(i))) {
 
-                    
-                  //  if (Integer.valueOf(st.startTime) >= minTime && Integer.valueOf(st.startTime) < maxTime) {
+                    // if (Integer.valueOf(st.startTime) >= minTime && Integer.valueOf(st.startTime)
+                    // < maxTime) {
 
-                        if (Integer.valueOf(st.endTime) > times2.get(i)) {
-                            st.endTime = times2.get(i).toString();
-                            st.length = Integer.valueOf(Integer.valueOf(times2.get(i)) - Integer.valueOf(st.startTime)).toString();
-                        }
-                        
-                        
-                        if (Integer.valueOf(st.startTime) < times1.get(i)) {
-                            st.startTime = Integer.valueOf(times1.get(i)).toString();
-                            st.length = Integer.valueOf(Integer.valueOf(st.endTime)-Integer.valueOf(times1.get(i))).toString();
-                        }
-                        
-                        if (Integer.valueOf(st.startTime) < times1.get(i) && Integer.valueOf(st.endTime) > times2.get(i)) {
-                            st.startTime = Integer.valueOf(times1.get(i)).toString();
-                            st.endTime = times2.get(i).toString();
-                            st.length = Integer.valueOf(Integer.valueOf(times2.get(i))-Integer.valueOf(times1.get(i))).toString();
-                        }
+                    if (Integer.valueOf(st.endTime) > times2.get(i)) {
+                        st.endTime = times2.get(i).toString();
+                        st.length = Integer.valueOf(Integer.valueOf(times2.get(i)) - Integer.valueOf(st.startTime)).toString();
+                    }
+
+                    if (Integer.valueOf(st.startTime) < times1.get(i)) {
+                        st.startTime = Integer.valueOf(times1.get(i)).toString();
+                        st.length = Integer.valueOf(Integer.valueOf(st.endTime) - Integer.valueOf(times1.get(i))).toString();
+                    }
+
+                    if (Integer.valueOf(st.startTime) < times1.get(i) && Integer.valueOf(st.endTime) > times2.get(i)) {
+                        st.startTime = Integer.valueOf(times1.get(i)).toString();
+                        st.endTime = times2.get(i).toString();
+                        st.length = Integer.valueOf(Integer.valueOf(times2.get(i)) - Integer.valueOf(times1.get(i))).toString();
+                    }
 
                     String taskname = "";
 
@@ -2219,27 +2418,24 @@ public class DirectedGraphTranslator extends JApplet {
             if (!(Integer.valueOf(st.startTime) < minTime && Integer.valueOf(st.endTime) < minTime)
                     && !(Integer.valueOf(st.startTime) > maxTime && Integer.valueOf(st.endTime) > maxTime)) {
 
-            
-          //  if (Integer.valueOf(st.startTime) >= minTime && Integer.valueOf(st.startTime) < maxTime) {
+                // if (Integer.valueOf(st.startTime) >= minTime && Integer.valueOf(st.startTime)
+                // < maxTime) {
 
                 if (Integer.valueOf(st.endTime) > maxTime) {
                     st.endTime = Integer.valueOf(maxTime).toString();
                     st.length = Integer.valueOf(Integer.valueOf(maxTime) - Integer.valueOf(st.startTime)).toString();
                 }
-                
+
                 if (Integer.valueOf(st.startTime) < minTime) {
                     st.startTime = Integer.valueOf(minTime).toString();
-                    st.length = Integer.valueOf(Integer.valueOf(st.endTime)-Integer.valueOf(minTime)).toString();
+                    st.length = Integer.valueOf(Integer.valueOf(st.endTime) - Integer.valueOf(minTime)).toString();
                 }
-                
+
                 if (Integer.valueOf(st.startTime) < minTime && Integer.valueOf(st.endTime) > maxTime) {
                     st.startTime = Integer.valueOf(minTime).toString();
                     st.endTime = Integer.valueOf(maxTime).toString();
                     st.length = Integer.valueOf(Integer.valueOf(maxTime) - Integer.valueOf(minTime)).toString();
                 }
-                
-                
-                
 
                 String taskname = "";
 
@@ -2527,4 +2723,12 @@ public class DirectedGraphTranslator extends JApplet {
 
     }
 
+    public List<TMLComponentDesignPanel> getCpanels() {
+        return cpanels;
+    }
+
+    public void setCpanels(List<TMLComponentDesignPanel> cpanels) {
+        this.cpanels = cpanels;
+    }
+
 }
diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameCompareLatencyDetail.java b/src/main/java/ui/simulationtraceanalysis/JFrameCompareLatencyDetail.java
index 85dfd22c64..496e996d21 100644
--- a/src/main/java/ui/simulationtraceanalysis/JFrameCompareLatencyDetail.java
+++ b/src/main/java/ui/simulationtraceanalysis/JFrameCompareLatencyDetail.java
@@ -7,7 +7,6 @@ import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
-import java.awt.GridLayout;
 import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -25,35 +24,32 @@ import javax.swing.JFileChooser;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JProgressBar;
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
 import javax.swing.JTable;
 import javax.swing.JTextArea;
 import javax.swing.JTextField;
 import javax.swing.ListSelectionModel;
+import javax.swing.SwingUtilities;
 import javax.swing.border.LineBorder;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 import javax.xml.xpath.XPathExpressionException;
 
-import org.jgrapht.io.ExportException;
 import org.xml.sax.SAXException;
 
 import common.ConfigurationTTool;
 import myutil.GraphicLib;
 import myutil.ScrolledJTextArea;
-import myutil.TraceManager;
 import tmltranslator.TMLMapping;
 import ui.ColorManager;
 import ui.MainGUI;
 import ui.SimulationTrace;
 import ui.TGComponent;
 import ui.TMLComponentDesignPanel;
-import ui.interactivesimulation.JFrameCompareSimulationTraces;
 import ui.interactivesimulation.SimulationTransaction;
 import ui.interactivesimulation.SimulationTransactionParser;
 
@@ -62,9 +58,8 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
     protected JButton buttonClose, buttonShowDGraph1, buttonShowDGraph2, buttonDetailedAnalysis, buttonCompareInDetails;
     public LatencyDetailedAnalysisActions[] actions;
     private DirectedGraphTranslator dgraph1, dgraph2;
-  
 
-    private JPanel loadxml, commandTab, jp05, graphAnalysisResult, jp03, jp04, loadmodel;
+    private JPanel loadxml, commandTab, jp05, graphAnalysisResult, jp03, jp04, loadmodel, progressBarpanel;
     protected JTextArea jta;
     protected JScrollPane jsp;
     private JTabbedPane resultTab;
@@ -88,6 +83,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
     private File file1, file2;
     private JFileChooser fc, fc2;
     private boolean visible;
+    public Thread t, t1;
 
     private Object[][] tableData2MinMax, tableData1MinMax, tableData2, tableData = null;
 
@@ -95,25 +91,33 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
     private MainGUI mainGUI;
     private latencyDetailedAnalysisMain latencyDetailedAnalysisMain;
-    //private DirectedGraphTranslator dgraph;
-    public JFrameCompareLatencyDetail(latencyDetailedAnalysisMain latencyDetailedAnaly, MainGUI mgui , final DirectedGraphTranslator graph1, final Vector<String> checkedTransactionsFile1,
-            final SimulationTrace selectedST1, boolean b) {
+    private JFrameLatencyDetailedAnalysis jFrameLatencyDetailedAnalysis;
+    private JFrameCompareLatencyDetail jFrameCompareLatencyDetail;
+
+    JProgressBar pbar;
+    JLabel pBarLabel;
+    TMLMapping<TGComponent> map;
+    List<TMLComponentDesignPanel> cpanels;
+    public DirectedGraphTranslator dgraph;
+
+    // private DirectedGraphTranslator dgraph;
+    public JFrameCompareLatencyDetail(latencyDetailedAnalysisMain latencyDetailedAnaly, MainGUI mgui, final Vector<String> checkedTransactionsFile1,
+            TMLMapping<TGComponent> map1, List<TMLComponentDesignPanel> cpanels1, final SimulationTrace selectedST1, boolean b) {
 
         super("Latency Detailed Comparision");
 
         this.setVisible(b);
-        dgraph1 = graph1;
-        mainGUI=mgui;
-        latencyDetailedAnalysisMain=latencyDetailedAnaly;
+
+        mainGUI = mgui;
+        map = map1;
+        cpanels = cpanels1;
+        latencyDetailedAnalysisMain = latencyDetailedAnaly;
         // dgraph2 = graph2;
         file1 = new File(selectedST1.getFullPath());
         // file2 = new File(selectedST2.getFullPath());
-        visible=b;
+        visible = b;
         setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 
-        // System.out.println(graph1.getTmap());
-        // System.out.println(graph2.getTmap());
-
         initActions();
 
         GridBagLayout gridbagmain = new GridBagLayout();
@@ -142,7 +146,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
         jp.add(buttonDetailedAnalysis);
         jp.add(buttonCompareInDetails);
 
-        buttonShowDGraph1.setEnabled(true);
+        buttonShowDGraph1.setEnabled(false);
         buttonShowDGraph2.setEnabled(false);
         buttonDetailedAnalysis.setEnabled(false);
         buttonCompareInDetails.setEnabled(false);
@@ -188,7 +192,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         browse = new JButton("Browse");
         browse.addActionListener(this);
-
+        browse.setEnabled(false);
         c02.gridx = 2;
         c02.gridy = 0;
         c02.weightx = 1;
@@ -271,6 +275,41 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         loadxml.add(tasksDropDownCombo4, c01);
 
+        gridbag01 = new GridBagLayout();
+        c01 = new GridBagConstraints();
+        progressBarpanel = new JPanel(gridbag01);
+
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 0;
+        c01.gridy = 0;
+        // c01.fill = GridBagConstraints.BOTH;
+
+        pBarLabel = new JLabel("Progress of Graph Generation", JLabel.LEFT);
+        progressBarpanel.add(pBarLabel, c01);
+
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 1;
+        c01.gridy = 0;
+
+        pbar = new JProgressBar();
+        pbar.setForeground(Color.GREEN);
+
+        progressBarpanel.add(pbar, c01);
+
+        mainConstraint.gridheight = 1;
+        mainConstraint.gridx = 0;
+        mainConstraint.gridy = 5;
+        mainConstraint.ipady = 40;
+        mainConstraint.fill = GridBagConstraints.HORIZONTAL;
+
+        framePanel.add(progressBarpanel, mainConstraint);
+
         graphAnalysisResult = new JPanel(new BorderLayout());
         graphAnalysisResult.setBorder(new javax.swing.border.TitledBorder("Latency Detailed Analysis "));
         mainConstraint.gridheight = 1;
@@ -279,7 +318,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
         mainConstraint.weighty = 1.0;
         mainConstraint.weightx = 1.0;
         mainConstraint.gridx = 0;
-        mainConstraint.gridy = 3;
+        mainConstraint.gridy = 4;
         mainConstraint.ipady = 200;
         mainConstraint.gridwidth = 1; // end row
         // mainConstraint.gridwidth = GridBagConstraints.REMAINDER; // end row
@@ -386,7 +425,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
         mainConstraint.ipady = 200;
 
         mainConstraint.gridx = 0;
-        mainConstraint.gridy = 4;
+        mainConstraint.gridy = 6;
 
         mainConstraint.fill = GridBagConstraints.HORIZONTAL;
 
@@ -402,7 +441,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
         jta.setEditable(false);
         jta.setMargin(new Insets(10, 10, 10, 10));
         jta.setTabSize(3);
-        jta.append("Click on \"Connect to simulator\" to start the remote simulator and connect to it\n");
+        jta.append("Generating the corresponding Directed Graph \nPlease wait...\n");
         Font f = new Font("Courrier", Font.BOLD, 12);
         jta.setFont(f);
         jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
@@ -420,6 +459,35 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         this.pack();
         this.setVisible(b);
+
+        t = new Thread() {
+            public void run() {
+                generateDirectedGraph(map, cpanels);
+
+            }
+
+        };
+
+        t.start();
+    }
+
+    private void generateDirectedGraph(TMLMapping<TGComponent> map, List<TMLComponentDesignPanel> cpanels) {
+        try {
+            dgraph = new DirectedGraphTranslator(jFrameLatencyDetailedAnalysis, this, map, cpanels, 1);
+            dgraph1 = dgraph;
+            jta.append("A Directed Graph with " + dgraph.getGraphsize() + " vertices" + dgraph.getGraphEdgeSet() + "Edges was generated.\n");
+            // buttonSaveDGraph.setEnabled(true);
+            buttonShowDGraph1.setEnabled(true);
+            jta.append("Browse the second simulation trace to generate the second graph \n");
+            browse.setEnabled(true);
+
+        } catch (Exception e) {
+            jta.append("An Error has Accord \n");
+            jta.append(e.getMessage() + "\n");
+            // buttonSaveDGraph.setEnabled(false);
+            buttonShowDGraph1.setEnabled(false);
+        }
+
     }
 
     private void initActions() {
@@ -432,6 +500,63 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
     }
 
+    private void generateDirectedGraph2(TMLMapping<TGComponent> map, List<TMLComponentDesignPanel> cpanels) {
+        // TODO Auto-generated method stub
+        try {
+            dgraph = null;
+
+            jFrameCompareLatencyDetail = this;
+
+            t1 = new Thread() {
+                public void run() {
+                    dgraph = new DirectedGraphTranslator(jFrameLatencyDetailedAnalysis, jFrameCompareLatencyDetail, map, cpanels, 1);
+
+                }
+
+            };
+
+            t1.start();
+
+            while (t1.getState() != Thread.State.TERMINATED) {
+
+            }
+
+            if (t1.getState() == Thread.State.TERMINATED) {
+
+                dgraph2 = dgraph;
+
+            }
+            String[] checkTransactionStrTable = new String[checkedTransactionsFile2.size()];
+            int idx = 0;
+            for (String str : checkedTransactionsFile2) {
+                checkTransactionStrTable[idx] = str;
+                idx++;
+            }
+
+            ComboBoxModel<String> aModel = new DefaultComboBoxModel<String>(checkTransactionStrTable);
+            ComboBoxModel<String> aModel1 = new DefaultComboBoxModel<String>(checkTransactionStrTable);
+
+            tasksDropDownCombo3.setModel(aModel);
+            tasksDropDownCombo4.setModel(aModel1);
+
+            buttonShowDGraph2.setEnabled(true);
+            buttonDetailedAnalysis.setEnabled(true);
+            buttonCompareInDetails.setEnabled(true);
+
+            this.pack();
+            this.revalidate();
+            this.repaint();
+
+            jta.append("A Directed Graph with " + dgraph.getGraphsize() + " vertices" + dgraph.getGraphEdgeSet() + "Edges was generated.\n");
+
+        } catch (Exception e) {
+            jta.append("An Error has Accord \n");
+            jta.append(e.getMessage() + "\n");
+            // buttonSaveDGraph.setEnabled(false);
+            buttonShowDGraph2.setEnabled(false);
+        }
+    }
+
     @Override
     public void actionPerformed(ActionEvent evt) {
         // TODO Auto-generated method stub
@@ -443,7 +568,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
             Thread t1 = new Thread() {
                 public void run() {
                     dgraph1.showGraph(dgraph1);
-                    // System.out.println(dgraph1.getGraphsize());
+
                 }
             };
 
@@ -453,7 +578,6 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
             Thread t2 = new Thread() {
                 public void run() {
                     dgraph2.showGraph(dgraph2);
-                    // System.out.println(dgraph2.getGraphsize());
 
                 }
             };
@@ -465,7 +589,10 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
             dispose();
             setVisible(false);
         } else if (evt.getSource() == browse) {
-            
+
+            pBarLabel.setText("Progress of Graph 2 Generation");
+
+            updateBar(0);
             if (ConfigurationTTool.SystemCCodeDirectory.length() > 0) {
                 fc = new JFileChooser(ConfigurationTTool.SystemCCodeDirectory);
             } else {
@@ -475,7 +602,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
             FileNameExtensionFilter filter = new FileNameExtensionFilter("XML files", "xml");
             fc.setFileFilter(filter);
             int returnVal = fc.showOpenDialog(mainGUI.frame);
-            
+
             if (returnVal == JFileChooser.APPROVE_OPTION) {
                 File filefc = fc.getSelectedFile();
                 // file2.setText(file.getPath());
@@ -488,54 +615,48 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
                 if (STfile2 instanceof SimulationTrace) {
 
+                    file2 = new File(STfile2.getFullPath());
+
                     try {
-                        file2 = new File(STfile2.getFullPath());
                         latencyDetailedAnalysisMain.latencyDetailedAnalysisForXML(mainGUI, STfile2, false, true, 2);
                     } catch (XPathExpressionException | ParserConfigurationException | SAXException | IOException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                     }
 
-                    while (latencyDetailedAnalysisMain.dgraph.getGraphsize() == 0) {
+                    checkedTransactionsFile2 = latencyDetailedAnalysisMain.checkedTransactionsFile;
+                    map = latencyDetailedAnalysisMain.map1;
+                    cpanels = latencyDetailedAnalysisMain.getCpanels1();
 
-                    }
+                    this.toFront();
+                    this.requestFocus();
 
-                    if (latencyDetailedAnalysisMain.dgraph.getGraphsize() > 0) {
-                        dgraph2 = latencyDetailedAnalysisMain.dgraph;
-                        checkedTransactionsFile2 = latencyDetailedAnalysisMain.checkedTransactionsFile;  
-                     
-                                             
-                        
-                       String [] checkTransactionStrTable = new String [checkedTransactionsFile2.size()];
-                       int idx =0 ;
-                       for(String str : checkedTransactionsFile2) {
-                           checkTransactionStrTable[idx]= str;
-                           idx++;
-                       }
-                        
-                        
-                        ComboBoxModel<String> aModel=new DefaultComboBoxModel<String>(checkTransactionStrTable);
-                        ComboBoxModel<String> aModel1=new DefaultComboBoxModel<String>(checkTransactionStrTable);
-                        
-                        tasksDropDownCombo3.setModel(aModel);
-                        tasksDropDownCombo4.setModel(aModel1);
-                        latencyDetailedAnalysisMain.mainGUI_compare2.closeTurtleModeling();
-                        
-                        
-                        buttonShowDGraph2.setEnabled(true);
-                        buttonDetailedAnalysis.setEnabled(true);
-                        buttonCompareInDetails.setEnabled(true);
-                        
-                        this.pack();
-                        this.revalidate();
-                        this.repaint();
+                    this.pack();
+                    this.revalidate();
+                    this.repaint();
+                    Thread t3 = new Thread() {
+                        public void run() {
+                            generateDirectedGraph2(map, cpanels);
+                        }
 
-                    }
+                    };
+
+                    t3.start();
                 }
+
             }
         } else if (command.equals(actions[LatencyDetailedAnalysisActions.ACT_DETAILED_ANALYSIS].getActionCommand())) {
-            jta.append("the Latency Between: \n " + tasksDropDownCombo1.getSelectedItem() + " and \n" + tasksDropDownCombo2.getSelectedItem()
-                    + " is studied \n");
+            jta.append("Simulation Trace 1 : the Latency Between: \n " + tasksDropDownCombo1.getSelectedItem() + " and \n"
+                    + tasksDropDownCombo2.getSelectedItem() + " is studied \n");
+
+            jta.append("Simulation Trace 2 : the Latency Between: \n " + tasksDropDownCombo3.getSelectedItem() + " and \n"
+                    + tasksDropDownCombo4.getSelectedItem() + " is studied \n");
+
+            // pBarLabel.setText("Generating Detailed Latency");
+            // pbar.setIndeterminate(true);
+            // pbar.setMinimum(0);
+            // pbar.setMaximum(1);
+            updateBar(0);
             Thread t = new Thread() {
                 public void run() {
 
@@ -548,12 +669,26 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
                     Vector<SimulationTransaction> transFile1, transFile2;
                     transFile1 = parseFile(file1);
                     transFile2 = parseFile(file2);
+
                     latencyDetailedAnalysis(task1, task2, task3, task4, transFile1, transFile2, true);
+
                 }
             };
 
             t.start();
 
+            while (t.getState() != Thread.State.TERMINATED) {
+
+            }
+
+            if (t.getState() == Thread.State.TERMINATED) {
+
+                // pbar.setIndeterminate(false);
+
+                updateBar(1);
+
+            }
+
         } else if (command.equals(actions[LatencyDetailedAnalysisActions.ACT_COMPARE_IN_DETAILS].getActionCommand())) {
             jta.append("the Latency Between: \n " + tasksDropDownCombo1.getSelectedItem() + " and \n" + tasksDropDownCombo2.getSelectedItem()
                     + " is studied \n");
@@ -753,12 +888,12 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
 
         if (selectedIndex == 0) {
 
-            jta.append(row1 + ": " + row2 + "\n");
+            jta.append("the latency for row : " + row1 + ": and row: " + row2 + " will be studied\n");
 
             new JFrameLatencyComparedDetailedPopup(dgraph1, dgraph2, row1, row2, true);
 
         } else if (selectedIndex == 1) {
-            jta.append(row3 + ": " + row4 + "\n");
+            jta.append("the latency for row : " + row3 + ": and row: " + row4 + " will be studied\n");
 
             new JFrameLatencyComparedDetailedPopup(dgraph1, dgraph2, row3, row4, false);
 
@@ -789,7 +924,7 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
     public Object[][] getTableData() {
         return tableData;
     }
-    
+
     public DirectedGraphTranslator getDgraph2() {
         return dgraph2;
     }
@@ -798,4 +933,10 @@ public class JFrameCompareLatencyDetail extends JFrame implements ActionListener
         this.dgraph2 = dgraph2;
     }
 
+    public void updateBar(int newValue) {
+
+        pbar.setValue(newValue);
+
+    }
+
 }
diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java
index 560dc1b37d..561442b27b 100644
--- a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java
+++ b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java
@@ -39,6 +39,7 @@
 package ui.simulationtraceanalysis;
 
 import java.awt.BorderLayout;
+import java.awt.Color;
 import java.awt.Container;
 import java.awt.Dimension;
 import java.awt.Font;
@@ -68,6 +69,7 @@ import javax.swing.JFileChooser;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JProgressBar;
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
 import javax.swing.JTable;
@@ -122,7 +124,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
     protected JTextArea jta;
     protected JScrollPane jsp;
     private JTabbedPane commandTab, resultTab;/* , resultTabDetailed; */
-    private JPanel loadxml, commands, jp01, jp02, /* activities, */ graphAnalysisResult, jp03, jp04, jp05; // ,graphAnalysisResultDetailed;
+    private JPanel loadxml, commands, jp01, jp02, /* activities, */ graphAnalysisResult, jp03, jp04, jp05, progressBarpanel; // ,graphAnalysisResultDetailed;
     protected JButton buttonClose, buttonShowDGraph, buttonSaveDGraph, buttonBrowse, buttonDetailedAnalysis;
 
     public Vector<String> checkedTransactions = new Vector<String>();
@@ -159,6 +161,10 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
     private Thread t;
 
     // @SuppressWarnings("deprecation")
+
+    JProgressBar pbar;
+    JFrameCompareLatencyDetail jframeCompareLatencyDetail;
+
     public JFrameLatencyDetailedAnalysis(TMLMapping<TGComponent> tmap, List<TMLComponentDesignPanel> cpanels, SimulationTrace selectedST) {
         super("Latency Detailed Analysis");
         initActions();
@@ -203,6 +209,41 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
 
         framePanel.add(jp, mainConstraint);
 
+        GridBagLayout gridbag01 = new GridBagLayout();
+        GridBagConstraints c01 = new GridBagConstraints();
+        progressBarpanel = new JPanel(gridbag01);
+
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 0;
+        c01.gridy = 0;
+        // c01.fill = GridBagConstraints.BOTH;
+
+        JLabel pBarLabel = new JLabel("Progress of Graph Generation", JLabel.LEFT);
+        progressBarpanel.add(pBarLabel, c01);
+
+        c01.gridheight = 1;
+        c01.weighty = 1.0;
+        c01.weightx = 1.0;
+        c01.gridwidth = 1;
+        c01.gridx = 1;
+        c01.gridy = 0;
+
+        pbar = new JProgressBar();
+        pbar.setForeground(Color.GREEN);
+
+        progressBarpanel.add(pbar, c01);
+
+        mainConstraint.gridheight = 1;
+        mainConstraint.gridx = 0;
+        mainConstraint.gridy = 3;
+        mainConstraint.ipady = 40;
+        mainConstraint.fill = GridBagConstraints.HORIZONTAL;
+
+        framePanel.add(progressBarpanel, mainConstraint);
+
         // mainpanel.add(jp, BorderLayout.NORTH);
 
 //        GridBagLayout gridbag02 = new GridBagLayout();
@@ -242,21 +283,24 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         framePanel.add(graphAnalysisResult, mainConstraint);
         // mainTop.add(commands, c02);
 
+        // mainConstraint.gridwidth = GridBagConstraints.REMAINDER; // end row
+        // mainConstraint.fill = GridBagConstraints.BOTH;
+
         jp05 = new JPanel(new BorderLayout());
         // mainpanel.add(split, BorderLayout.SOUTH);
         mainConstraint.weighty = 00;
         mainConstraint.ipady = 100;
 
         mainConstraint.gridx = 0;
-        mainConstraint.gridy = 3;
+        mainConstraint.gridy = 4;
 
         mainConstraint.fill = GridBagConstraints.HORIZONTAL;
 
         framePanel.add(jp05, mainConstraint);
         commandTab = GraphicLib.createTabbedPaneRegular();// new JTabbedPane();
 
-        GridBagLayout gridbag01 = new GridBagLayout();
-        GridBagConstraints c01 = new GridBagConstraints();
+        gridbag01 = new GridBagLayout();
+        c01 = new GridBagConstraints();
         loadxml = new JPanel(gridbag01);
         commandTab.addTab("load XML", null, loadxml, "load XML");
 
@@ -461,6 +505,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
         t = new Thread() {
             public void run() {
                 generateDirectedGraph(tmap, cpanels);
+
             }
         };
 
@@ -468,6 +513,10 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
 
     }
 
+    public void updateBar(int newValue) {
+        pbar.setValue(newValue);
+    }
+
     public DirectedGraphTranslator getDgraph() {
         return dgraph;
     }
@@ -479,7 +528,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
     private void generateDirectedGraph(TMLMapping<TGComponent> tmap, List<TMLComponentDesignPanel> cpanels) {
 
         try {
-            dgraph = new DirectedGraphTranslator(tmap, cpanels);
+            dgraph = new DirectedGraphTranslator(this, jframeCompareLatencyDetail, tmap, cpanels, 0);
             jta.append("A Directed Graph with " + dgraph.getGraphsize() + " vertices" + dgraph.getGraphEdgeSet() + "Edges was generated.\n");
             // buttonSaveDGraph.setEnabled(true);
             buttonShowDGraph.setEnabled(true);
diff --git a/src/main/java/ui/simulationtraceanalysis/latencyDetailedAnalysisMain.java b/src/main/java/ui/simulationtraceanalysis/latencyDetailedAnalysisMain.java
index d66d661bac..fb843b2f5e 100644
--- a/src/main/java/ui/simulationtraceanalysis/latencyDetailedAnalysisMain.java
+++ b/src/main/java/ui/simulationtraceanalysis/latencyDetailedAnalysisMain.java
@@ -38,15 +38,18 @@ import ui.window.JDialogToChosePanel;
 
 public class latencyDetailedAnalysisMain {
 
-    public DirectedGraphTranslator dgraph;
+    // public DirectedGraphTranslator dgraph;
     private Vector<String> checkedTransactionsFile1 = new Vector<String>();
     public Vector<String> checkedTransactionsFile2 = new Vector<String>();
     public Vector<String> checkedTransactionsFile = new Vector<String>();
     public MainGUI mainGUI_compare2, mainGUI_compare;
 
     private JFrameLatencyDetailedAnalysis latencyDetailedAnalysis;
+    JFrameCompareLatencyDetail cld;
 
     private Thread t, t1;
+    public TMLMapping<TGComponent> map1;
+    public List<TMLComponentDesignPanel> cpanels1;
 
     public latencyDetailedAnalysisMain(int callerId, MainGUI mainGUI, SimulationTrace selectedST, boolean b, boolean compare, int j) {
 
@@ -106,6 +109,7 @@ public class latencyDetailedAnalysisMain {
 
                 TMLArchiPanel tmlap = (TMLArchiPanel) tp;
                 TMLMapping<TGComponent> map = mainGUI_compare.gtm.getTMLMapping();
+
                 for (TGComponent component : tmlap.tmlap.getComponentList()) {
                     tmlNodesToValidate.add(component);
                 }
@@ -140,7 +144,11 @@ public class latencyDetailedAnalysisMain {
                     }
                 }
                 if (compare) {
-                    dgraph = new DirectedGraphTranslator(map, cpanels);
+
+                    map1 = map;
+                    setCpanels1(cpanels);
+                    // dgraph = new DirectedGraphTranslator(latencyDetailedAnalysis,cld,map,
+                    // cpanels,1);
 
                     for (TGComponent tgc1 : map.getTMLModeling().getCheckedComps().keySet()) {
                         String compName = map.getTMLModeling().getCheckedComps().get(tgc1);
@@ -165,7 +173,11 @@ public class latencyDetailedAnalysisMain {
                     cpanels = new ArrayList<TMLComponentDesignPanel>();
                     cpanels.add(tmlcdp);
                     if (compare) {
-                        dgraph = new DirectedGraphTranslator(map, cpanels);
+                        // dgraph = new DirectedGraphTranslator(latencyDetailedAnalysis,cld,map,
+                        // cpanels,1);
+
+                        map1 = map;
+                        setCpanels1(cpanels);
 
                         for (TGComponent tgc : map.getTMLModeling().getCheckedComps().keySet()) {
                             String compName = map.getTMLModeling().getCheckedComps().get(tgc);
@@ -216,59 +228,48 @@ public class latencyDetailedAnalysisMain {
             e1.printStackTrace();
         }
 
-        while (dgraph.getGraphsize() == 0) {
-
-        }
-
-        if (dgraph.getGraphsize() > 0) {
-            dgraph1 = dgraph;
-            dgraph = null;
-
-            JFileChooser fc;
-
-            JFrameCompareLatencyDetail cld = new JFrameCompareLatencyDetail(this, mainGUI, dgraph1, checkedTransactionsFile1, selectedST, true);
-
-            /*
-             * if (ConfigurationTTool.SystemCCodeDirectory.length() > 0) { fc = new
-             * JFileChooser(ConfigurationTTool.SystemCCodeDirectory); } else { fc = new
-             * JFileChooser(); }
-             * 
-             * FileNameExtensionFilter filter = new FileNameExtensionFilter("XML files",
-             * "xml"); fc.setFileFilter(filter);
-             * 
-             * int returnVal = fc.showOpenDialog(mainGUI.frame);
-             * 
-             * if (returnVal == JFileChooser.APPROVE_OPTION) { File filefc =
-             * fc.getSelectedFile(); // file2.setText(file.getPath());
-             * 
-             * // Object obj = filefc;
-             * 
-             * checkedTransactionsFile = new Vector<String>(); SimulationTrace file2 = new
-             * SimulationTrace(filefc.getName(), 6, filefc.getAbsolutePath());
-             * 
-             * if (file2 instanceof SimulationTrace) {
-             * 
-             * try { latencyDetailedAnalysisForXML(mainGUI, file2, false, true, 2); } catch
-             * (XPathExpressionException | ParserConfigurationException | SAXException |
-             * IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
-             * 
-             * while (dgraph.getGraphsize() == 0) {
-             * 
-             * }
-             * 
-             * if (dgraph.getGraphsize() > 0) { dgraph2 = dgraph; checkedTransactionsFile2 =
-             * checkedTransactionsFile; JFrameCompareLatencyDetail cld = new
-             * JFrameCompareLatencyDetail(dgraph1, dgraph2, checkedTransactionsFile1,
-             * checkedTransactionsFile2, selectedST, file2, true);
-             * 
-             * mainGUI_compare2.closeTurtleModeling();
-             * 
-             * } }
-             * 
-             * }
-             */
+        cld = new JFrameCompareLatencyDetail(this, mainGUI, checkedTransactionsFile1, map1, cpanels1, selectedST, true);
+
+        /*
+         * if (ConfigurationTTool.SystemCCodeDirectory.length() > 0) { fc = new
+         * JFileChooser(ConfigurationTTool.SystemCCodeDirectory); } else { fc = new
+         * JFileChooser(); }
+         * 
+         * FileNameExtensionFilter filter = new FileNameExtensionFilter("XML files",
+         * "xml"); fc.setFileFilter(filter);
+         * 
+         * int returnVal = fc.showOpenDialog(mainGUI.frame);
+         * 
+         * if (returnVal == JFileChooser.APPROVE_OPTION) { File filefc =
+         * fc.getSelectedFile(); // file2.setText(file.getPath());
+         * 
+         * // Object obj = filefc;
+         * 
+         * checkedTransactionsFile = new Vector<String>(); SimulationTrace file2 = new
+         * SimulationTrace(filefc.getName(), 6, filefc.getAbsolutePath());
+         * 
+         * if (file2 instanceof SimulationTrace) {
+         * 
+         * try { latencyDetailedAnalysisForXML(mainGUI, file2, false, true, 2); } catch
+         * (XPathExpressionException | ParserConfigurationException | SAXException |
+         * IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
+         * 
+         * while (dgraph.getGraphsize() == 0) {
+         * 
+         * }
+         * 
+         * if (dgraph.getGraphsize() > 0) { dgraph2 = dgraph; checkedTransactionsFile2 =
+         * checkedTransactionsFile; JFrameCompareLatencyDetail cld = new
+         * JFrameCompareLatencyDetail(dgraph1, dgraph2, checkedTransactionsFile1,
+         * checkedTransactionsFile2, selectedST, file2, true);
+         * 
+         * mainGUI_compare2.closeTurtleModeling();
+         * 
+         * } }
+         * 
+         * }
+         */
 
-        }
     }
 
     public void latencyDetailedAnalysisForXML(MainGUI mainGUI, SimulationTrace selectedST, boolean b, boolean compare, int j)
@@ -463,14 +464,6 @@ public class latencyDetailedAnalysisMain {
 
     }
 
-    public DirectedGraphTranslator getDgraph() {
-        return dgraph;
-    }
-
-    public void setDgraph(DirectedGraphTranslator dgraph) {
-        this.dgraph = dgraph;
-    }
-
     public Vector<String> getCheckedTransactionsFile() {
         return checkedTransactionsFile;
     }
@@ -501,4 +494,12 @@ public class latencyDetailedAnalysisMain {
         return t1;
     }
 
+    public List<TMLComponentDesignPanel> getCpanels1() {
+        return cpanels1;
+    }
+
+    public void setCpanels1(List<TMLComponentDesignPanel> cpanels1) {
+        this.cpanels1 = cpanels1;
+    }
+
 }
diff --git a/ttool/src/test/java/ui/GraphLatencyAnalysis/CompareLatencyInSimulationTraces.java b/ttool/src/test/java/ui/GraphLatencyAnalysis/CompareLatencyInSimulationTraces.java
index c554a08e55..94cdcc5bf6 100644
--- a/ttool/src/test/java/ui/GraphLatencyAnalysis/CompareLatencyInSimulationTraces.java
+++ b/ttool/src/test/java/ui/GraphLatencyAnalysis/CompareLatencyInSimulationTraces.java
@@ -19,6 +19,7 @@ import ui.TMLArchiPanel;
 import ui.interactivesimulation.SimulationTransaction;
 import ui.simulationtraceanalysis.DirectedGraphTranslator;
 import ui.simulationtraceanalysis.JFrameCompareLatencyDetail;
+import ui.simulationtraceanalysis.JFrameLatencyDetailedAnalysis;
 import ui.simulationtraceanalysis.latencyDetailedAnalysisMain;
 
 public class CompareLatencyInSimulationTraces extends AbstractUITest {
@@ -40,6 +41,7 @@ public class CompareLatencyInSimulationTraces extends AbstractUITest {
     private static String task1, task2, task3, task4;
     JFrameCompareLatencyDetail cld;
     private latencyDetailedAnalysisMain latencyDetailedAnalysisMain;
+    private JFrameLatencyDetailedAnalysis jFrameLatencyDetailedAnalysis;
 
     Vector<SimulationTransaction> transFile1, transFile2;
     SimulationTrace simT1, simT2;
@@ -72,6 +74,16 @@ public class CompareLatencyInSimulationTraces extends AbstractUITest {
 
                 try {
                     latencyDetailedAnalysisMain.latencyDetailedAnalysisForXML(mainGUI, simT1, false, true, 1);
+
+                    cld = new JFrameCompareLatencyDetail(latencyDetailedAnalysisMain, mainGUI, checkedTransactionsFile1,
+                            latencyDetailedAnalysisMain.map1, latencyDetailedAnalysisMain.cpanels1, simT1, false);
+
+                    if (cld == null) {
+                        System.out.println("NULL Panel");
+                    } else {
+                        cld.setVisible(false);
+                    }
+
                 } catch (XPathExpressionException | ParserConfigurationException | SAXException | IOException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
@@ -86,60 +98,68 @@ public class CompareLatencyInSimulationTraces extends AbstractUITest {
         }
         if (t.getState() == Thread.State.TERMINATED) {
 
-            while (latencyDetailedAnalysisMain.getDgraph().getGraphsize() == 0) {
+            while (cld.t.getState() != Thread.State.TERMINATED) {
 
             }
+            if (cld.t.getState() == Thread.State.TERMINATED) {
 
-            if (latencyDetailedAnalysisMain.getDgraph().getGraphsize() > 0) {
-                dgraph1 = latencyDetailedAnalysisMain.getDgraph();
-                checkedTransactionsFile1 = latencyDetailedAnalysisMain.getCheckedTransactionsFile();
-                latencyDetailedAnalysisMain.setDgraph(null);
-
-                cld = new JFrameCompareLatencyDetail(latencyDetailedAnalysisMain, mainGUI, dgraph1, checkedTransactionsFile1, simT1, false);
+                while (cld.dgraph.getGraphsize() == 0) {
 
-                if (cld == null) {
-                    System.out.println("NULL Panel");
-                } else {
-                    cld.setVisible(false);
                 }
 
-                latencyDetailedAnalysisMain.setCheckedTransactionsFile(new Vector<String>());
-                simT2 = new SimulationTrace("graphTestSimulationTrace", 6, (getBaseResourcesDir() + simulationTracePathFile2));
+                if (cld.dgraph.getGraphsize() > 0) {
+                    dgraph1 = cld.dgraph;
+                    checkedTransactionsFile1 = latencyDetailedAnalysisMain.getCheckedTransactionsFile();
+                    cld.dgraph = null;
 
-                Thread t1 = new Thread() {
-                    public void run() {
+                    latencyDetailedAnalysisMain.setCheckedTransactionsFile(new Vector<String>());
+                    simT2 = new SimulationTrace("graphTestSimulationTrace", 6, (getBaseResourcesDir() + simulationTracePathFile2));
 
-                        try {
+                    Thread t1 = new Thread() {
+                        public void run() {
+
+                            try {
+
+                                latencyDetailedAnalysisMain.latencyDetailedAnalysisForXML(mainGUI, simT2, false, true, 1);
+
+                            } catch (XPathExpressionException | ParserConfigurationException | SAXException | IOException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            }
 
-                            latencyDetailedAnalysisMain.latencyDetailedAnalysisForXML(mainGUI, simT2, false, true, 1);
-                        } catch (XPathExpressionException | ParserConfigurationException | SAXException | IOException e) {
-                            // TODO Auto-generated catch block
-                            e.printStackTrace();
                         }
+                    };
+                    t1.start();
+
+                    while (t1.getState() != Thread.State.TERMINATED) {
 
                     }
-                };
-                t1.start();
+                    if (t1.getState() == Thread.State.TERMINATED) {
 
-                while (t1.getState() != Thread.State.TERMINATED) {
+                        t1 = new Thread() {
+                            public void run() {
+                                dgraph2 = new DirectedGraphTranslator(jFrameLatencyDetailedAnalysis, cld, latencyDetailedAnalysisMain.map1,
+                                        latencyDetailedAnalysisMain.getCpanels1(), 3);
 
-                }
-                if (t1.getState() == Thread.State.TERMINATED) {
+                            }
 
-                    while (latencyDetailedAnalysisMain.getDgraph().getGraphsize() == 0) {
+                        };
 
-                    }
+                        t1.start();
 
-                    if (latencyDetailedAnalysisMain.getDgraph().getGraphsize() > 0) {
-                        dgraph2 = latencyDetailedAnalysisMain.getDgraph();
+                        while (t1.getState() != Thread.State.TERMINATED) {
 
-                        checkedTransactionsFile2 = latencyDetailedAnalysisMain.getCheckedTransactionsFile();
+                        }
 
-                    }
+                        if (t1.getState() == Thread.State.TERMINATED) {
+
+                            checkedTransactionsFile2 = latencyDetailedAnalysisMain.getCheckedTransactionsFile();
 
+                        }
+
+                    }
                 }
             }
-
         }
     }
 
-- 
GitLab