From a992c149f04ca38e4ff4588a36e7cb991bc95b51 Mon Sep 17 00:00:00 2001
From: Letitia Li <letitia.li@telecom-paristech.fr>
Date: Thu, 17 Nov 2016 17:16:27 +0100
Subject: [PATCH] Latency measurements updated to table

---
 src/tmltranslator/TMLModeling.java            |  18 +++
 src/ui/GTMLModeling.java                      |   1 +
 .../JFrameInteractiveSimulation.java          | 126 ++++++++++++++----
 .../SimulationTransaction.java                |   2 +-
 4 files changed, 123 insertions(+), 24 deletions(-)

diff --git a/src/tmltranslator/TMLModeling.java b/src/tmltranslator/TMLModeling.java
index 6b6615858f..f296fa5160 100755
--- a/src/tmltranslator/TMLModeling.java
+++ b/src/tmltranslator/TMLModeling.java
@@ -47,6 +47,7 @@ package tmltranslator;
 
 import java.util.*;
 import myutil.*;
+import ui.TGComponent;
 import ui.tmlcompd.*;
 import ui.TAttribute;
 import avatartranslator.*;
@@ -69,6 +70,7 @@ public class TMLModeling {
     public HashMap<SecurityPattern, ArrayList<TMLTask>> securityTaskMap = new HashMap<SecurityPattern, ArrayList<TMLTask>>();
     private String[] ops = {">", "<", "+", "-", "*", "/", "[", "]", "(", ")", ":", "=", "==", ","};
 	private ArrayList<String> checkedActivity = new ArrayList<String>();
+	private HashMap<String, TGComponent> checkedActivities = new HashMap<String, TGComponent>();
     private int hashCode;
     private boolean hashCodeComputed = false;
 
@@ -91,9 +93,17 @@ public class TMLModeling {
 	public void addCheckedActivity(String s){
 		checkedActivity.add(s);
 	}
+
+	public void addCheckedActivity(String s, TGComponent tgc){
+		checkedActivities.put(s,tgc);
+	}
 	public ArrayList<String> getCheckedActivities(){
 		return checkedActivity;
 	}
+
+	public HashMap<String, TGComponent> getCheckedComps(){
+		return checkedActivities;
+	}
     public SecurityPattern getSecurityPattern(String s){
 	for (SecurityPattern sp:secPatterns){
 	    if (sp.name.equals(s)){
@@ -1119,6 +1129,7 @@ public class TMLModeling {
 	secPatterns.addAll(tmlm.secPatterns);
 	securityTaskMap.putAll(tmlm.securityTaskMap);
 		checkedActivity.addAll(tmlm.getCheckedActivities());
+		checkedActivities.putAll(tmlm.getCheckedComps());
     }
 
     // Elements with same names are not duplicated
@@ -1162,6 +1173,13 @@ public class TMLModeling {
 			checkedActivity.add(s);
 		}
 	}
+
+	for (String s: tmlm.getCheckedComps().keySet()){
+		if (!checkedActivities.containsKey(s)){
+			checkedActivities.put(s, tmlm.getCheckedComps().get(s));
+		}
+	}
+
     }
 
 
diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java
index ae11a423e6..5ba77f2927 100755
--- a/src/ui/GTMLModeling.java
+++ b/src/ui/GTMLModeling.java
@@ -1455,6 +1455,7 @@ public class GTMLModeling  {
 				String name = tmltask.getName() + ":" +  tgc.getName();
 				TraceManager.addDev("To check " + name);
 				tmlm.addCheckedActivity(name);
+				tmlm.addCheckedActivity(name,tgc);
 			}
             if (tgc instanceof TMLADActionState) {
                 tmlaction = new TMLActionState("action", tgc);
diff --git a/src/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/ui/interactivesimulation/JFrameInteractiveSimulation.java
index c3e283c02b..ae29f1b464 100755
--- a/src/ui/interactivesimulation/JFrameInteractiveSimulation.java
+++ b/src/ui/interactivesimulation/JFrameInteractiveSimulation.java
@@ -69,6 +69,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Vector;
 
 import javax.swing.AbstractButton;
@@ -246,7 +247,7 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 	JComboBox transaction1;
 	JComboBox transaction2;
 	JButton addLatencyCheckButton;
-	JButton updateLatencyInformationButton;
+	JButton updateLatencyButton;
 	LatencyTableModel latm;
 	public Vector checkedTransactions = new Vector();
 	private JScrollPane jspLatency;
@@ -273,7 +274,9 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
     private Hashtable <String, String> diagramTable;
 
     private ArrayList<Point> points;
-
+	private HashMap<String, String> checkTable=new HashMap<String, String>();
+	private HashMap<String, ArrayList<String>> transTimes = new HashMap<String, ArrayList<String>>();
+	private Vector latencies=new Vector();
     public JFrameInteractiveSimulation(Frame _f, MainGUI _mgui, String _title, String _hostSystemC, String _pathExecute, TMLMapping _tmap, ArrayList<Point> _points) {
         super(_title);
 
@@ -966,32 +969,35 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 		GridBagLayout gridbag0 = new GridBagLayout();
 		GridBagConstraints c0 = new GridBagConstraints();
 		latencyPanel.setLayout(gridbag0);
-        infoTab.addTab("Latency", null, latencyPanel, "Latency Measurements");
-		transaction1 = new JComboBox(checkedTransactions);
-		transaction1.setPrototypeDisplayValue("Transaction1");
-	
-		transaction2 = new JComboBox(checkedTransactions);	
-		transaction2.setPrototypeDisplayValue("Transaction2");
-		latencyPanel.add(transaction1, c0);
-		c0.gridwidth = GridBagConstraints.RELATIVE;
-		latencyPanel.add(transaction2, c0);
+		infoTab.addTab("Latency", null, latencyPanel, "Latency Measurements");
 		c0.gridwidth = GridBagConstraints.REMAINDER;
-		addLatencyCheckButton = new JButton(actions[InteractiveSimulationActions.ACT_ADD_LATENCY]);
-		latencyPanel.add(addLatencyCheckButton,c0);
         latm = new LatencyTableModel(this);
+		latm.setData(latencies);	
 		sorterPI = new TableSorter(latm);
         jtablePI = new JTable(sorterPI);
         sorterPI.setTableHeader(jtablePI.getTableHeader());
-        ((jtablePI.getColumnModel()).getColumn(0)).setPreferredWidth(100);
-        ((jtablePI.getColumnModel()).getColumn(1)).setPreferredWidth(100);
+        ((jtablePI.getColumnModel()).getColumn(0)).setPreferredWidth(200);
+        ((jtablePI.getColumnModel()).getColumn(1)).setPreferredWidth(200);
         ((jtablePI.getColumnModel()).getColumn(2)).setPreferredWidth(50);
+
         jtablePI.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         jspLatency = new JScrollPane(jtablePI);
         jspLatency.setWheelScrollingEnabled(true);
         jspLatency.getVerticalScrollBar().setUnitIncrement(10);
-        jspLatency.setPreferredSize(new Dimension(260, 300));
+        jspLatency.setMinimumSize(new Dimension(300, 300));
+        jspLatency.setPreferredSize(new Dimension(300, 300));
         latencyPanel.add(jspLatency, c0);
 
+		transaction1 = new JComboBox(checkedTransactions);
+		transaction2 = new JComboBox(checkedTransactions);	
+		latencyPanel.add(transaction1, c0);
+		latencyPanel.add(transaction2, c0);
+
+		addLatencyCheckButton = new JButton(actions[InteractiveSimulationActions.ACT_ADD_LATENCY]);
+		latencyPanel.add(addLatencyCheckButton,c0);
+
+		updateLatencyButton = new JButton(actions[InteractiveSimulationActions.ACT_UPDATE_LATENCY]);
+		latencyPanel.add(updateLatencyButton,c0);
 		
         if (!hashOK) {
             wrongHashCode();
@@ -1518,6 +1524,9 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 
                     if (hashOK) {
                         if (elt.getTagName().compareTo(SIMULATION_TASK) == 0) {
+		//					for (int i=0; i<elt.getAttributes().getLength(); i++){
+	//							System.out.println(elt.getAttributes().item(i));
+//							}
                             id = null;
                             name = null;
                             command = null;
@@ -1602,6 +1611,18 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
                                     nextCommand = "-1";
                                 }
                                 updateRunningCommand(id, command, progression, startTime, finishTime, nextCommand, transStartTime, transFinishTime, state);
+								if (checkTable.containsKey(command)){
+									//System.out.println("added trans " + command + " " +finishTime);
+									if (!transTimes.containsKey(command)){
+										ArrayList<String> timeList = new ArrayList<String>();
+										transTimes.put(command, timeList);
+									}
+									if (!transTimes.get(command).contains(finishTime)){
+										transTimes.get(command).add(finishTime);
+									}
+                                    //System.out.println("nl:" + nl + " value=" + node0.getNodeValue() + " content=" + node0.getTextContent());
+                                	
+								}
                             }
 
                             if (openDiagram.isEnabled() && openDiagram.isSelected() && (name != null) && (command != null)) {
@@ -1684,6 +1705,7 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 
                           }*/
                         if (elt.getTagName().compareTo(SIMULATION_TRANS) == 0) {
+
                             SimulationTransaction st = new SimulationTransaction();
                             st.nodeType = elt.getAttribute("deviceid");
 
@@ -1700,19 +1722,32 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
                                     st.command = commandT.substring(index+1, commandT.length()).trim();
                                 }
                             }
+							
                             //TraceManager.addDev("Command handled");
                             st.startTime = elt.getAttribute("starttime");
-			    st.endTime = elt.getAttribute("endtime");
+						    st.endTime = elt.getAttribute("endtime");
+							if (checkTable.containsKey(commandT)){
+								//System.out.println("added trans " + commandT + " " +st.endTime);
+								if (!transTimes.containsKey(commandT)){
+									ArrayList<String> timeList = new ArrayList<String>();
+									transTimes.put(commandT, timeList);
+								}
+								if (!transTimes.get(commandT).contains(st.endTime)){
+									transTimes.get(commandT).add(st.endTime);
+								}
+                                    //System.out.println("nl:" + nl + " value=" + node0.getNodeValue() + " content=" + node0.getTextContent());
+                                	
+							}
                             st.length = elt.getAttribute("length");
                             st.virtualLength = elt.getAttribute("virtuallength");
                             st.channelName = elt.getAttribute("ch");
-
+						//	st.id = id;
                             if (trans == null) {
                                 trans = new Vector<SimulationTransaction>();
                             }
 
                             trans.add(st);
-			    addTransactionToNode(st);
+			    			addTransactionToNode(st);
                             transInfo = true;
                         }
 
@@ -2249,6 +2284,7 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
         }
 
         trans = null;
+
 	int nb = NB_OF_TRANSACTIONS;
 	if (transactionPanel != null) {
 	    nb = transactionPanel.getNbOfTransactions();
@@ -2257,17 +2293,55 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
     }
 
 	private void addLatency(){
-		Vector latencies = new Vector();
 		SimulationLatency sl = new SimulationLatency();
 		sl.trans1 = transaction1.getSelectedItem().toString();
 		sl.trans2 = transaction2.getSelectedItem().toString();
 		sl.time="0";
-		latencies.add(sl);
+		boolean found=false;
+		for (Object o:latencies){
+			SimulationLatency s = (SimulationLatency) o;
+			if (s.trans1 == sl.trans1 && s.trans2 == sl.trans2){
+				found=true;
+			}
+		}
+		if (!found){
+			latencies.add(sl);
+		}
+		updateLatency();
 		latm.setData(latencies);
 	}
 	
 	private void updateLatency(){
-		
+		System.out.println(transTimes);
+		for (Object o: latencies){
+		SimulationLatency sl = (SimulationLatency) o;
+		for (String st1:transTimes.keySet()){
+			if (checkTable.containsKey(st1)){
+				for (String st2:transTimes.keySet()){
+					if (st1!=st2){
+						if (checkTable.containsKey(st2)){
+							if (checkTable.get(st2).contains(sl.trans2) && checkTable.get(st1).contains(sl.trans1)){
+								int time = 0;
+								for(String time1: transTimes.get(st1)){
+									for (String time2: transTimes.get(st2)){
+										int diff = Integer.valueOf(time1) - Integer.valueOf(time2);
+										if (diff > time && diff >0){
+											time=diff;
+										}
+									}
+								}
+								sl.time=Integer.toString(time);	
+								//System.out.println(sl.trans2 + " "+sl.trans1 + " " + time);
+								//sl.time= Integer.toString(Math.abs(Integer.valueOf(st.startTime)-Integer.valueOf(st2.startTime)));
+							
+							}
+						}
+					}
+				}
+			}
+		}
+		}
+		latm.setData(latencies);
 	}
 
     private void updateTaskCommands() {
@@ -2310,7 +2384,7 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
         }
 
         TraceManager.addDev("state:" + _state);
-
+		
         if ((i != null) && (c != null)) {
             try {
                 //System.out.println("Searching for old value");
@@ -2955,10 +3029,16 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
 		if (tmap==null){
 			return;
 		}
+		
+		System.out.println(tmap.getTMLModeling().getCheckedComps());
 		for (String s: tmap.getTMLModeling().getCheckedActivities()){
 			TraceManager.addDev(s);
 			checkedTransactions.add(s.split("__")[s.split("__").length-1]);
 		}
+		for (String s: tmap.getTMLModeling().getCheckedComps().keySet()){
+			//System.out.println(tmap.getTMLModeling().getCheckedComps().get(s).getDIPLOID() + " "+s);
+			checkTable.put(Integer.toString(tmap.getTMLModeling().getCheckedComps().get(s).getDIPLOID()),s);
+		}
 	}
     public void activeBreakPoint(boolean active) {
         if (mode == STARTED_AND_CONNECTED) {
diff --git a/src/ui/interactivesimulation/SimulationTransaction.java b/src/ui/interactivesimulation/SimulationTransaction.java
index c885ab1e32..784ab6e8f3 100755
--- a/src/ui/interactivesimulation/SimulationTransaction.java
+++ b/src/ui/interactivesimulation/SimulationTransaction.java
@@ -66,7 +66,7 @@ public class SimulationTransaction  {
     public String length; /* Used for identifiying asynchronous messages */
     public String virtualLength;
     public String channelName;
-
+	public String id;
     public SimulationTransaction() {
     }
 
-- 
GitLab