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