From bbed04d64f4e3d8a50fa351e575a2f21ec450532 Mon Sep 17 00:00:00 2001
From: Letitia Li <letitia.li@telecom-paristech.fr>
Date: Tue, 4 Jul 2017 10:11:34 +0200
Subject: [PATCH] yay more simulation trace bugs

---
 src/main/java/tmltranslator/TMLTask.java      | 10 +++-
 src/main/java/ui/GTMLModeling.java            | 27 ++++++++-
 .../JFrameAvatarInteractiveSimulation.java    | 12 ++--
 .../JFrameInteractiveSimulation.java          | 48 +++++++++------
 .../LatencyTableModel.java                    | 25 ++++----
 .../SimulationLatency.java                    | 58 +++++++++++++++++--
 .../ui/tmlcompd/TMLCPrimitiveComponent.java   | 10 +++-
 7 files changed, 142 insertions(+), 48 deletions(-)

diff --git a/src/main/java/tmltranslator/TMLTask.java b/src/main/java/tmltranslator/TMLTask.java
index 7c8075fa0b..8ded67bc9f 100755
--- a/src/main/java/tmltranslator/TMLTask.java
+++ b/src/main/java/tmltranslator/TMLTask.java
@@ -61,7 +61,7 @@ public class TMLTask extends TMLElement {
     private Set<TMLChannel> writeTMLChannelsList;
     private Set<TMLEvent> eventsList;
     private int operationType;
-
+	private boolean isAttacker;
 
     public TMLTask(String name, Object referenceToClass, Object referenceToActivityDiagram) {
         super(name, referenceToClass);
@@ -90,6 +90,14 @@ public class TMLTask extends TMLElement {
         return isRequested;
     }
 
+	public boolean isAttacker(){
+		return isAttacker;
+	}
+	
+	public void setAttacker(boolean a){
+		isAttacker=a;
+	}
+
     public void setRequest(TMLRequest _request) {
         request = _request;
     }
diff --git a/src/main/java/ui/GTMLModeling.java b/src/main/java/ui/GTMLModeling.java
index ec3791335f..ea91311162 100755
--- a/src/main/java/ui/GTMLModeling.java
+++ b/src/main/java/ui/GTMLModeling.java
@@ -419,6 +419,7 @@ public class GTMLModeling  {
                     throw new MalformedTMLDesignException(tmlcpc.getValue() + " msg");
                 }
                 tmlt = new TMLTask(makeName(tgc, tmlcpc.getValue()), tmlcpc, tmladp);
+				tmlt.setAttacker(tmlcpc.isAttacker());
                 TraceManager.addDev("Task added:" + tmlt.getName() + " with tadp=" + tmladp + " major=" + tmladp.getMGUI().getMajorTitle(tmladp));
                 listE.addCor(tmlt, tgc);
                 tmlm.addTask(tmlt);
@@ -1816,6 +1817,7 @@ public class GTMLModeling  {
                 listE.addCor(tmlrsequence, tgc);
 
             } else if (tgc instanceof TMLADReadChannel) {
+				if (!tmltask.isAttacker()){
                 // Get the channel
                 channel = tmlm.getChannelByName(getFromTable(tmltask, ((TMLADReadChannel)tgc).getChannelName()));
                 if (channel == null) {
@@ -1867,7 +1869,15 @@ public class GTMLModeling  {
                     activity.addElement(tmlreadchannel);
                     ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
                     listE.addCor(tmlreadchannel, tgc);
-                }
+					}
+                } else {
+					tmlexecc = new TMLExecC("execc", tgc);
+					tmlexecc.setValue("100");
+					tmlexecc.setAction("100");
+					activity.addElement(tmlexecc);
+					((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
+					listE.addCor(tmlexecc, tgc);
+				}
             } else if (tgc instanceof TMLADSendEvent) {
                 event = tmlm.getEventByName(getFromTable(tmltask, ((TMLADSendEvent)tgc).getEventName()));
                 if (event == null) {
@@ -2116,6 +2126,7 @@ public class GTMLModeling  {
 
             } else if (tgc instanceof TMLADWriteChannel) {
                 // Get channels
+				if (!tmltask.isAttacker()){
                 channels = ((TMLADWriteChannel)tgc).getChannelsByName();
                 boolean error = false;
                 for(int i=0; i<channels.length; i++) {
@@ -2171,7 +2182,19 @@ public class GTMLModeling  {
                     ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
                     listE.addCor(tmlwritechannel, tgc);
                 }
-            }
+			} else {
+					System.out.println("removing write channel");
+					tmlexecc = new TMLExecC("execc", tgc);
+					tmlexecc.setValue("100");
+					tmlexecc.setAction("100");
+					activity.addElement(tmlexecc);
+					((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK);
+					listE.addCor(tmlexecc, tgc);
+				}
+            }    
+			
+
+
         }
 
         // Interconnection between elements
diff --git a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
index a60eb11888..f6152f7ffa 100755
--- a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
+++ b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
@@ -1458,8 +1458,8 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 
     	                        ArrayList<Integer> minTimes = new ArrayList<Integer>();
 								SimulationLatency sl = new SimulationLatency();
-								sl.trans1=st1;
-								sl.trans2=st2;
+								sl.setTransaction1(st1);
+								sl.setTransaction2(st2);
                                 for(String time1: transTimes.get(st1)){
                                     //Find the first subsequent transaction
                                     int time = Integer.MAX_VALUE;
@@ -1477,8 +1477,8 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
 							//	System.out.println("Min times " + minTimes);
                                 if (minTimes.size()>0){
                                     int sum=0;
-                                    sl.minTime=Integer.toString(Collections.min(minTimes));
-                                    sl.maxTime=Integer.toString(Collections.max(minTimes));
+                                    sl.setMinTime(Integer.toString(Collections.min(minTimes)));
+                                    sl.setMaxTime(Integer.toString(Collections.max(minTimes)));
                                     for (int time: minTimes){
                                         sum+=time;
                                     }
@@ -1489,8 +1489,8 @@ public  class JFrameAvatarInteractiveSimulation extends JFrame implements Avatar
                                     }
                                     stdev= stdev/minTimes.size();
                                     stdev = Math.sqrt(stdev);
-                                    sl.avTime= String.format("%.1f",average);
-                                    sl.stDev = String.format("%.1f",stdev);
+                                    sl.setAverageTime(String.format("%.1f",average));
+                                    sl.setStDev(String.format("%.1f",stdev));
                                 }
 								latencies.add(sl);
 
diff --git a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
index 6d7390f140..2b5ba85c98 100755
--- a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
+++ b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
@@ -961,7 +961,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
  			public void mouseClicked(java.awt.event.MouseEvent evt) {
     			int row = latTable.rowAtPoint(evt.getPoint());
     			int col = latTable.columnAtPoint(evt.getPoint());
-    			if (row >= 0 && col >= 0 && col <2) {
+    			if (row >= 0 && col >= 0 && col <2 && latencies.size()>row) {
 					for (TGComponent tgc: tmap.getTMLModeling().getCheckedComps().keySet()){
 						if (tmap.getTMLModeling().getCheckedComps().get(tgc).equals(latm.getValueAt(row,col).toString().split(" ")[0])){
         				    mgui.selectTab(tgc.getTDiagramPanel());
@@ -1443,6 +1443,8 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 						//else {
 							String asynchType = (command.equals("Write") ? "send_async" : "receive_async");
 							int msgId=chanId;
+							int tmp=msgId-1;
+							if (!simtraces.contains("time=" + tran.endTime+ " block="+ originTask.getName() + " type="+asynchType+ " blockdestination="+ destTask.getName() + " channel="+tran.channelName+" msgid="+  tmp+ " params=\"" +chan.getSize()+"\"")){
 							if (command.equals("Write")){	
 								if (!channelIDMap.containsKey(tran.channelName)){
 									channelIDMap.put(tran.channelName, new ArrayList<Integer>());
@@ -1456,7 +1458,13 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 								}
 							
 							}
-							String trace = "time=" + tran.endTime+ " block="+ originTask.getName() + " type="+asynchType+ " blockdestination="+ destTask.getName() + " channel="+tran.channelName+" msgid="+ msgId + " params=\"" +chan.getSize()+"\"";	
+						String trace="";
+						if (command.equals("Write")){
+							trace = "time=" + tran.endTime+ " block="+ originTask.getName() + " type="+asynchType+ " blockdestination="+ destTask.getName() + " channel="+tran.channelName+" msgid="+ msgId + " params=\"" +chan.getSize()+"\"";	
+						}
+						else {
+							trace = "time=" + tran.endTime+ " block="+ destTask.getName() + " type="+asynchType+ " blockdestination="+ destTask.getName() + " channel="+tran.channelName+" msgid="+ msgId + " params=\"" +chan.getSize()+"\"";	
+						}
 						//	System.out.println("sending asynch " + trace);
 							if (!simtraces.contains(trace)){
 								simtraces.add(trace);
@@ -1464,6 +1472,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 						//}
 					}
 				}
+				}
 			}
 			else if (command.equals("SelectEvent")){
 			}
@@ -2395,16 +2404,16 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
 
     private void addLatency(){
         SimulationLatency sl = new SimulationLatency();
-        sl.trans1 = transaction1.getSelectedItem().toString();
-        sl.trans2 = transaction2.getSelectedItem().toString();
-        sl.minTime="??";
-        sl.maxTime="??";
-        sl.avTime="??";
-        sl.stDev="??";
+        sl.setTransaction1(transaction1.getSelectedItem().toString());
+        sl.setTransaction2(transaction2.getSelectedItem().toString());
+        sl.setMinTime("??");
+        sl.setMaxTime("??");
+        sl.setAverageTime("??");
+        sl.setStDev("??");
         boolean found=false;
         for (Object o:latencies){
             SimulationLatency s = (SimulationLatency) o;
-            if (s.trans1 == sl.trans1 && s.trans2 == sl.trans2){
+            if (s.getTransaction1() == sl.getTransaction1() && s.getTransaction2() == sl.getTransaction2()){
                 found=true;
             }
         }
@@ -2420,7 +2429,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
         for (Object o:latencies){
             SimulationLatency sl = (SimulationLatency) o;
             //calcuate response + checkpoint 1 id + checkpoint 2 id
-            sendCommand("cl " + sl.trans1.split("ID: ")[1].split("\\)")[0] + " " + sl.trans2.split("ID: ")[1].split("\\)")[0]);
+            sendCommand("cl " + sl.getTransaction1().split("ID: ")[1].split("\\)")[0] + " " + sl.getTransaction2().split("ID: ")[1].split("\\)")[0]);
         }
     }
 
@@ -2432,14 +2441,14 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
         for (Object o: latencies){
             SimulationLatency sl = (SimulationLatency) o;
 			//System.out.println(sl.trans2 + " " + sl.trans1);
-            sl.minTime="??";
-            sl.maxTime="??";
-            sl.avTime="??";
-            sl.stDev="??";
+            sl.setMinTime("??");
+            sl.setMaxTime("??");
+            sl.setAverageTime("??");
+            sl.setStDev("??");
             for (String st1:transTimes.keySet()){
                 for (String st2:transTimes.keySet()){
                     if (st1!=st2){
-                        if (checkTable.get(st2).contains(sl.trans2) && checkTable.get(st1).contains(sl.trans1)){
+                        if (checkTable.get(st2).contains(sl.getTransaction2()) && checkTable.get(st1).contains(sl.getTransaction1())){
                             ArrayList<Integer> minTimes = new ArrayList<Integer>();
                             if (transTimes.get(st1) !=null && transTimes.get(st2)!=null){
                                 for(String time1: transTimes.get(st1)){
@@ -2457,11 +2466,12 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
                                 }
                                 if (minTimes.size()>0){
                                     int sum=0;
-                                    sl.minTime=Integer.toString(Collections.min(minTimes));
-                                    sl.maxTime=Integer.toString(Collections.max(minTimes));
+                                    sl.setMinTime(Integer.toString(Collections.min(minTimes)));
+                                    sl.setMaxTime(Integer.toString(Collections.max(minTimes)));
                                     for (int time: minTimes){
                                         sum+=time;
                                     }
+									//System.out.println("mintimes " + minTimes);
                                     double average = (double) sum/ (double) minTimes.size();
                                     double stdev =0.0;
                                     for (int time:minTimes){
@@ -2469,8 +2479,8 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
                                     }
                                     stdev= stdev/minTimes.size();
                                     stdev = Math.sqrt(stdev);
-                                    sl.avTime= String.format("%.1f",average);
-                                    sl.stDev = String.format("%.1f",stdev);
+                                    sl.setAverageTime(String.format("%.1f",average));
+                                    sl.setStDev(String.format("%.1f",stdev));
                                 }
                             }
 
diff --git a/src/main/java/ui/interactivesimulation/LatencyTableModel.java b/src/main/java/ui/interactivesimulation/LatencyTableModel.java
index 9df771fe36..b4783915bb 100755
--- a/src/main/java/ui/interactivesimulation/LatencyTableModel.java
+++ b/src/main/java/ui/interactivesimulation/LatencyTableModel.java
@@ -84,22 +84,21 @@ public class LatencyTableModel extends AbstractTableModel {
 	if (row >= data.length) {
 	    return "";
 	}
-
 	SimulationLatency st = data[row];
 
 	switch(column) {
         case 0:
-            return st.trans1;
+            return st.getTransaction1();
         case 1:
-            return st.trans2;
+            return st.getTransaction2();
         case 2:
-            return st.minTime;
+            return st.getMinTime();
 		case 3:
-			return st.maxTime;
+			return st.getMaxTime();
 		case 4:	
-			return st.avTime;
+			return st.getAverageTime();
 		case 5:
-			return st.stDev;
+			return st.getStDev();
         }
         return "unknown";		
     }
@@ -124,11 +123,11 @@ public class LatencyTableModel extends AbstractTableModel {
     }
 
     public synchronized void setData(Vector<SimulationLatency> _trans) {
-	data = new SimulationLatency[_trans.size()];
-	for(int i=0; i<_trans.size(); i++) {
-	    data[i] = _trans.get(i);
-	}
-	fireTableStructureChanged();
-    }
+		data = new SimulationLatency[_trans.size()];
+		for(int i=0; i<_trans.size(); i++) {
+		    data[i] = _trans.get(i);
+		}
+		fireTableStructureChanged();
+    	}
 
 }
diff --git a/src/main/java/ui/interactivesimulation/SimulationLatency.java b/src/main/java/ui/interactivesimulation/SimulationLatency.java
index 64f8447b29..d6e6fb9331 100644
--- a/src/main/java/ui/interactivesimulation/SimulationLatency.java
+++ b/src/main/java/ui/interactivesimulation/SimulationLatency.java
@@ -50,14 +50,60 @@ package ui.interactivesimulation;
  */
 public class SimulationLatency  {
 
-    public String trans1;
-    public String trans2;
-    public String minTime="N/A"; 
-	public String maxTime="N/A";
-	public String avTime="N/A";
-	public String stDev="N/A";
+    private String trans1;
+    private String trans2;
+    private String minTime="N/A"; 
+	private String maxTime="N/A";
+	private String avTime="N/A";
+	private String stDev="N/A";
 
     public SimulationLatency() {
     }
 
+	public void setTransaction1(String t){
+		trans1=t;
+	}
+	public void setTransaction2(String t){
+		trans2=t;
+	}
+
+	public void setMinTime(String time){
+		minTime=time;
+	}
+
+	public void setMaxTime(String time){
+		maxTime=time;
+	}
+
+	public void setAverageTime(String time){
+		avTime=time;
+	}
+
+	public void setStDev(String dev){
+		stDev=dev;
+	}
+
+	public String getTransaction1(){
+		return trans1;
+	}
+	public String getTransaction2(){
+		return trans2;
+	}
+
+	public String getMinTime(){
+		return minTime;
+	}
+
+	public String getMaxTime(){
+		return maxTime;
+	}
+
+	public String getAverageTime(){
+		return avTime;
+	}
+
+	public String getStDev(){
+		return stDev;
+	}
+
 }
diff --git a/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java b/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java
index 7ce70ff2a4..5694e357c1 100755
--- a/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java
+++ b/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java
@@ -71,7 +71,7 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp
 //    private int spacePt = 3;
     private Color myColor;
 
-	public boolean isAttacker=false;
+	private boolean isAttacker=false;
     // Icon
     private int iconSize = 15;
     private boolean iconIsDrawn = false;
@@ -200,6 +200,9 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp
         } else {
             iconIsDrawn = false;
         }
+		if (isAttacker){
+			g.drawImage(IconManager.imgic8.getImage(), x + width - iconSize - textX, y + 2*textX, null);
+		}
 
         // Attributes
         if (tdp.areAttributesVisible()) {
@@ -283,6 +286,10 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp
     }
 
 
+	public boolean isAttacker(){
+		return isAttacker;
+	}
+
     public boolean editOndoubleClick(JFrame frame, int _x, int _y) {
         // On the icon?
         if (iconIsDrawn) {
@@ -323,6 +330,7 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp
 
                 //TraceManager.addDev("Set value with change");
                 setValueWithChange(s);
+				isAttacker = s.contains("Attacker");
                 rescaled = true;
                 //TraceManager.addDev("return true");
                 return true;
-- 
GitLab