diff --git a/src/main/java/cli/Interpreter.java b/src/main/java/cli/Interpreter.java index 991d47d615cc16cac60586fdba8895fd0eacdc53..36ca96a432fd1a2dd755a02362712191fa8a96ea 100644 --- a/src/main/java/cli/Interpreter.java +++ b/src/main/java/cli/Interpreter.java @@ -58,7 +58,7 @@ import java.util.Vector; */ public class Interpreter implements Runnable, TerminalProviderInterface { - public final static Command[] commands = {new Action(), new Help(), new History(), new Print(), new PluginAction(), new Quit(), + public final static Command[] commands = {new Action(), new Help(), new History(), new Print(), new Plan(), new PluginAction(), new Quit(), new TestSpecific(), new TML(), new Set(), new Wait(), new Robot(), new BF(), new SimulatorScript()}; // Errors diff --git a/src/main/java/cli/Plan.java b/src/main/java/cli/Plan.java new file mode 100644 index 0000000000000000000000000000000000000000..59f774e5a1e6df29ca1dbfbfcf528c6ebc278539 --- /dev/null +++ b/src/main/java/cli/Plan.java @@ -0,0 +1,417 @@ +/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + * + * ludovic.apvrille AT enst.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ + +package cli; + +import common.ConfigurationTTool; +import common.SpecConfigTTool; +import launcher.RTLLauncher; +import myutil.FileUtils; +import myutil.PluginManager; +import myutil.TraceManager; +import tmltranslator.*; +import tmltranslator.dsez3engine.InputInstance; +import tmltranslator.dsez3engine.OptimizationModel; +import tmltranslator.dsez3engine.OptimizationResult; +import ui.CheckableLatency; +import ui.MainGUI; +import ui.SimulationTrace; +import ui.TGComponent; +import ui.TMLArchiPanel; +import ui.TURTLEPanel; +import ui.interactivesimulation.SimulationTransaction; +import ui.simulationtraceanalysis.DirectedGraphTranslator; +import ui.simulationtraceanalysis.JFrameLatencyDetailedAnalysis; +import ui.simulationtraceanalysis.JFrameLatencyDetailedPopup; +import ui.simulationtraceanalysis.latencyDetailedAnalysisMain; +import ui.tmlad.TMLADExecI; +import ui.tmlad.TMLActivityDiagramPanel; +import ui.util.IconManager; + +import java.io.File; +import java.util.*; +import java.util.Map.Entry; + +/** + * Class TML Creation: 25/03/2019 Version 2.0 25/03/2019 + * + * @author Ludovic APVRILLE + */ +public class Plan extends Command { + private final static String TABS = "tabs"; + + private TMLModeling tmlm; + private TMLMapping tmlmap; + private static Object[][] allLatencies, minMaxArray, taskHWByRowDetails, detailedLatency; + private HashMap<String, Integer> checkedT = new HashMap<String, Integer>(); + private Vector<SimulationTransaction> transFile1; + private latencyDetailedAnalysisMain latencyDetailedAnalysisMain; + private DirectedGraphTranslator dgt; + private String traceFile; + private Boolean taint; + + private OptimizationResult result; + + public Plan() { + + } + + public List<Command> getListOfSubCommands() { + return subcommands; + } + + public String getCommand() { + return "plan"; + } + + public String getShortCommand() { + return "plan"; + } + + public String getUsage() { + return "plan <subcommand>"; + } + + public String getDescription() { + return "Can be used to compute Latency"; + } + + public void fillSubCommands() { + Command graph = new Command() { + public String getCommand() { + return "graph"; + } + + public String getShortCommand() { + return "g"; + } + + public String getDescription() { + return "generate graph to use in latency computation"; + } + + public String executeCommand(String command, Interpreter interpreter) { + // interpreter.print("Command=" + command); + return generateGraph(command, interpreter); + } + }; + + Command latency = new Command() { + public String getCommand() { + return "latency"; + } + + public String getShortCommand() { + return "lat"; + } + + public String getDescription() { + return "compute latency between two operators"; + } + + public String executeCommand(String command, Interpreter interpreter) { + // interpreter.print("Command=" + command); + return computeLat(command, interpreter); + } + + }; + + Command listAllOp = new Command() { + public String getCommand() { + return "listAllOp"; + } + + public String getShortCommand() { + return "lao"; + } + + public String getDescription() { + return "List all operators Id that can be used for latency analysis"; + } + + public String executeCommand(String command, Interpreter interpreter) { + // interpreter.print("Command=" + command); + return listAllOperators(command, interpreter); + } + + }; + + Command preciseLatByRow = new Command() { + public String getCommand() { + return "planByRow"; + } + + public String getShortCommand() { + return "planR"; + } + + public String getDescription() { + return "precise Latency analysis by row"; + } + + public String executeCommand(String command, Interpreter interpreter) { + // interpreter.print("Command=" + command); + return preciseLatByRow(command, interpreter); + } + + }; + addAndSortSubcommand(graph); + addAndSortSubcommand(latency); + addAndSortSubcommand(listAllOp); + addAndSortSubcommand(preciseLatByRow); + + } + + private String generateGraph(String command, Interpreter interpreter) { + + JFrameLatencyDetailedAnalysis latencyDetailedAnalysis; + + String[] commands = command.split(" "); + + traceFile = commands[0]; + String mappingDiagName = commands[1]; + + SimulationTrace file2 = new SimulationTrace("graphTestSimulationTrace", 6, traceFile); + + MainGUI mgui = interpreter.mgui; + interpreter.print("file2=" + file2.toString()); + + TMLArchiPanel panel = null; + + for (final TMLArchiPanel panel1 : mgui.getTMLArchiDiagramPanels()) { + if (mappingDiagName.equals(mgui.getTitleAt(panel1))) { + panel = panel1; + } + } + + try { + mgui.checkModelingSyntax(panel, true); + + latencyDetailedAnalysisMain = new latencyDetailedAnalysisMain(3, mgui, file2, false, false, 3); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + return ("Exception during file loading: " + e.getMessage()); + } + + latencyDetailedAnalysisMain.getTc().setMainGUI(mgui); + + // latencyDetailedAnalysisMain.setTc(); + + interpreter.print("panel=" + panel); + + latencyDetailedAnalysisMain.latencyDetailedAnalysis(file2, panel, false, false, mgui); + + latencyDetailedAnalysis = latencyDetailedAnalysisMain.getLatencyDetailedAnalysis(); + + if (latencyDetailedAnalysis != null) { + latencyDetailedAnalysis.setVisible(false); + try { + latencyDetailedAnalysis.getT().join(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // if (latencyDetailedAnalysis.graphStatus() == Thread.State.TERMINATED) { + dgt = latencyDetailedAnalysis.getDgraph(); + + interpreter.print("graph=" + dgt.getGraphsize()); + + TMLActivity activity; + + for (TMLTask tmltask : latencyDetailedAnalysis.getTmap1().getTMLModeling().getTasks()) { + + int opCount = 0; + + activity = tmltask.getActivityDiagram(); + TMLActivityDiagramPanel tadp = (TMLActivityDiagramPanel) (activity.getReferenceObject()); + List<TGComponent> list = tadp.getComponentList(); + Iterator<TGComponent> iterator = list.listIterator(); + TGComponent tgc; + opCount = 0; + + iterator = list.listIterator(); + while (iterator.hasNext()) { + tgc = iterator.next(); + String compName = ""; + if (tgc.isEnabled()) { + if (tgc instanceof CheckableLatency) { + + compName = tmltask.getName() + ":" + tgc.getName(); + compName = compName.replaceAll(" ", ""); + + if (tgc.getValue().contains("(")) { + compName = compName + ":" + tgc.getValue().split("\\(")[0]; + } else { + if (tgc instanceof TMLADExecI) { + compName = ((TMLADExecI) tgc).getDelayValue(); + } + } + checkedT.put(compName + "__" + tgc.getDIPLOID(), tgc.getDIPLOID()); + + } + } + + } + + } + + return null; + } + return mappingDiagName; + } + + private String computeLat(String command, Interpreter interpreter) { + // TODO Auto-generated method stub + + String[] commands = command.split(" "); + + String task1 = null, task2 = null; + int operator1ID = Integer.valueOf(commands[0]); + int operator2ID = Integer.valueOf(commands[1]); + taint = Boolean.parseBoolean(commands[2]); + String filename = commands[3]; + + for (Entry<String, Integer> cT : checkedT.entrySet()) { + + int id = cT.getValue(); + String taskName = cT.getKey(); + if (id == operator1ID) { + task1 = taskName; + + } else if (id == operator2ID) { + task2 = taskName; + + } + } + + transFile1 = latencyDetailedAnalysisMain.getLatencyDetailedAnalysis().parseFile(new File(traceFile)); + + allLatencies = dgt.latencyDetailedAnalysis(task1, task2, transFile1, taint, false); + + interpreter.print("lat=" + allLatencies.length); + + if (taint) { + + minMaxArray = dgt.latencyMinMaxAnalysisTaintedData(task1, task2, transFile1); + } else { + + minMaxArray = dgt.latencyMinMaxAnalysis(task1, task2, transFile1); + } + + // dgt.getRowDetailsMinMax(1); + // taskHWByRowDetails = dgt.getTasksByRowMinMax(1); + + interpreter.print("minMaxArray.length=" + minMaxArray.length); + + // interpreter.print("taskHWByRowDetails.length=" + taskHWByRowDetails.length); + + // taskHWByRowDetails = dgt.getTaskHWByRowDetailsMinMax(1); + + // interpreter.print("taskHWByRowDetails.length=" + taskHWByRowDetails.length); + + dgt.saveLAtencyValuesToXML(filename); + + return null; + } + + private String listAllOperators(String command, Interpreter interpreter) { + + String allop = ""; + for (Entry<String, Integer> cT : checkedT.entrySet()) { + + int id = cT.getValue(); + + allop = allop.concat(id + " "); + } + + interpreter.print(allop); + + return null; + } + + private String preciseLatByRow(String command, Interpreter interpreter) { + + String[] commands = command.split(" "); + + String i = commands[0]; + Boolean minmax = Boolean.parseBoolean(commands[1]); + String filename = commands[2]; + + interpreter.print("minmax " + minmax); + interpreter.print("taint" + taint); + + int id = Integer.valueOf(i); + if (!minmax) { + + // detailedLatency = dgt.getTaskByRowDetails(id); + + // interpreter.print("detailedLatency.length=" + detailedLatency.length); + + // detailedLatency = dgt.getTaskHWByRowDetails(id); + + // interpreter.print("detailedLatency.length=" + detailedLatency.length); + + try { + new JFrameLatencyDetailedPopup(dgt, id, true, taint, latencyDetailedAnalysisMain.getTc(), false); + interpreter.print("dgt.getOffPathBehavior=" + dgt.getOffPath().size()); + interpreter.print("dgt.getOffPathBehaviorCausingDelay=" + dgt.getOffPathDelay().size()); + interpreter.print("dgt.getOnPath=" + dgt.getOnPath().size()); + dgt.saveDetailsToXML(filename); + + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } else { + try { + new JFrameLatencyDetailedPopup(dgt, id, false, taint, latencyDetailedAnalysisMain.getTc(), false); + interpreter.print("dgt.getOffPathBehavior=" + dgt.getOffPath().size()); + interpreter.print("dgt.getOffPathBehaviorCausingDelay=" + dgt.getOffPathDelay().size()); + interpreter.print("dgt.getOnPath=" + dgt.getOnPath().size()); + dgt.saveDetailsToXML(filename); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + return null; + } +} diff --git a/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java b/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java index a211a10cf4d89f76f4af96f659ca0851921d39a6..a2db77556538446bd010227dc2cb7cb6bd5debd2 100644 --- a/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java +++ b/src/main/java/ui/simulationtraceanalysis/DirectedGraphTranslator.java @@ -52,6 +52,10 @@ import org.jgrapht.ext.JGraphXAdapter; import org.jgrapht.graph.DefaultDirectedGraph; import org.jgrapht.graph.DefaultEdge; import org.jgrapht.io.*; +import org.w3c.dom.Attr; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + import tmltranslator.*; import tmltranslator.tomappingsystemc2.DiploSimulatorCodeGenerator; import ui.TGComponent; @@ -66,6 +70,21 @@ import ui.tmlcompd.TMLCPrimitivePort; import javax.imageio.ImageIO; import javax.swing.*; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; @@ -196,6 +215,7 @@ public class DirectedGraphTranslator extends JApplet { private HashMap<vertex, List<vertex>> ruleAddedEdgesChannels = new HashMap<vertex, List<vertex>>(); private HashMap<String, Integer> cpuIDs = new HashMap<String, Integer>(); + private HashMap<String, Integer> fpgaIDs = new HashMap<String, Integer>(); private HashMap<String, List<String>> forLoopNextValues = new HashMap<String, List<String>>(); private int opCount; @@ -207,6 +227,10 @@ public class DirectedGraphTranslator extends JApplet { private HashMap<String, String> receiveData = new HashMap<String, String>(); private String taskStartName = ""; + private List<SimulationTransaction> onPath = new ArrayList<SimulationTransaction>(); + private List<SimulationTransaction> offPath = new ArrayList<SimulationTransaction>(); + private List<SimulationTransaction> offPathDelay = new ArrayList<SimulationTransaction>(); + @SuppressWarnings("deprecation") public DirectedGraphTranslator(JFrameLatencyDetailedAnalysis jFrameLatencyDetailedAnalysis, JFrameCompareLatencyDetail jframeCompareLatencyDetail, TMLMapping<TGComponent> tmap1, List<TMLComponentDesignPanel> cpanels1, int i) { @@ -346,6 +370,8 @@ public class DirectedGraphTranslator extends JApplet { } + + private void addCPUs() { // TODO Auto-generated method stub HashMap<String, HashSet<TMLTask>> cpuTask = new HashMap<String, HashSet<TMLTask>>(); @@ -358,8 +384,9 @@ public class DirectedGraphTranslator extends JApplet { cpuTask.put(node.getName(), tmap.getLisMappedTasks(node)); } - - cpuTasks = getCPUTaskMap(cpuTask); + if (cpuTask.size() > 0) { + cpuTasks = getCPUTaskMap(cpuTask); + } } @@ -497,8 +524,9 @@ public class DirectedGraphTranslator extends JApplet { cpuTask.put(node.getName(), tmap.getLisMappedTasks(node)); } - - cpuTasks = getCPUTaskMap(cpuTask); + if (cpuTask.size() > 0) { + cpuTasks = getCPUTaskMap(cpuTask); + } } @@ -1688,14 +1716,13 @@ public class DirectedGraphTranslator extends JApplet { if (sendingPortdetails != null && receivePortdetails != null) { sendEvt.put("sendevent:" + sendingPortdetails.getPortName() + "(" + sendingPortparams + ")", new ArrayList<String>()); - - for (TMLWaitEvent wait_sendEvent : destinationTasks.getWaitEvents()) { - String receivePortparams = wait_sendEvent.getAllParams(); + for (TMLWaitEvent wait_sendEvent : destinationTasks.getWaitEvents()) { + String receivePortparams = wait_sendEvent.getAllParams(); - sendEvt.get("sendevent:" + sendingPortdetails.getPortName() + "(" + sendingPortparams + ")") - .add("waitevent:" + receivePortdetails.getPortName() + "(" + receivePortparams + ")"); + sendEvt.get("sendevent:" + sendingPortdetails.getPortName() + "(" + sendingPortparams + ")") + .add("waitevent:" + receivePortdetails.getPortName() + "(" + receivePortparams + ")"); - } + } } } @@ -3595,8 +3622,8 @@ public class DirectedGraphTranslator extends JApplet { for (SimulationTransaction st : relatedsimTraceswithTaint.get(labeli)) { - if (!(Integer.valueOf(st.startTime) < s1 && Integer.valueOf(st.endTime) < s1) - && !(Integer.valueOf(st.startTime) > s2 && Integer.valueOf(st.endTime) > s2)) { + if (!(Integer.valueOf(st.startTime) < s1 && Integer.valueOf(st.endTime) <= s1) + && !(Integer.valueOf(st.startTime) >= s2 && Integer.valueOf(st.endTime) > s2)) { // if (Integer.valueOf(st.startTime) >= minTime && Integer.valueOf(st.startTime) // < maxTime) { @@ -3606,7 +3633,7 @@ public class DirectedGraphTranslator extends JApplet { st.length = Integer.valueOf(Integer.valueOf(s2) - Integer.valueOf(st.startTime)).toString(); } - if (Integer.valueOf(st.startTime) < s1) { + if (Integer.valueOf(st.startTime) < s1 && Integer.valueOf(st.endTime) != s1) { st.startTime = Integer.valueOf(s1).toString(); st.length = Integer.valueOf(Integer.valueOf(st.endTime) - Integer.valueOf(s1)).toString(); } @@ -3636,8 +3663,8 @@ public class DirectedGraphTranslator extends JApplet { for (SimulationTransaction st : delayDueTosimTraces) { - if (!(Integer.valueOf(st.startTime) < times1.get(row) && Integer.valueOf(st.endTime) < times1.get(row)) - && !(Integer.valueOf(st.startTime) > times2.get(row) && Integer.valueOf(st.endTime) > times2.get(row))) { + if (!(Integer.valueOf(st.startTime) < times1.get(row) && Integer.valueOf(st.endTime) <= times1.get(row)) + && !(Integer.valueOf(st.startTime) >= times2.get(row) && Integer.valueOf(st.endTime) > times2.get(row))) { // if (Integer.valueOf(st.startTime) >= minTime && Integer.valueOf(st.startTime) // < maxTime) { @@ -3900,6 +3927,289 @@ public class DirectedGraphTranslator extends JApplet { } + public void saveDetailsToXML(String outputFile) { + + DocumentBuilder builder; + try { + builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + + Document dom = builder.newDocument(); + + Element root2 = dom.createElement("Transactions"); + dom.appendChild(root2); // write DOM to XML file + + Element root1 = dom.createElement("Mandatory"); + root2.appendChild(root1); // write DOM to XML file + + for (int i = 0; i < onPath.size(); i++) { + + SimulationTransaction st = onPath.get(i); + + // first create root element + Element root = dom.createElement("st"); + root1.appendChild(root); + + // set `id` attribute to root element + Attr attr = dom.createAttribute("id"); + attr.setValue(st.id); + root.setAttributeNode(attr); + + // now create child elements (name, email, phone) + Element operator = dom.createElement("operator"); + operator.setTextContent(st.command); + Element start = dom.createElement("starttime"); + start.setTextContent(st.startTime); + Element et = dom.createElement("endtime"); + et.setTextContent(st.endTime); + Element l = dom.createElement("length"); + l.setTextContent(st.length); + + // add child nodes to root node + root.appendChild(operator); + root.appendChild(start); + root.appendChild(et); + root.appendChild(l); + + } + + Element root3 = dom.createElement("NoContention"); + root2.appendChild(root3); // write DOM to XML file + + for (int i = 0; i < offPath.size(); i++) { + + SimulationTransaction st = offPath.get(i); + + // first create root element + Element root5 = dom.createElement("st"); + root3.appendChild(root5); + + // set `id` attribute to root element + Attr attr = dom.createAttribute("id"); + attr.setValue(st.id); + root5.setAttributeNode(attr); + + // now create child elements (name, email, phone) + Element operator = dom.createElement("operator"); + operator.setTextContent(st.command); + Element start = dom.createElement("starttime"); + start.setTextContent(st.startTime); + Element et = dom.createElement("endtime"); + et.setTextContent(st.endTime); + Element l = dom.createElement("length"); + l.setTextContent(st.length); + + // add child nodes to root node + root5.appendChild(operator); + root5.appendChild(start); + root5.appendChild(et); + root5.appendChild(l); + + } + + Element root4 = dom.createElement("Contention"); + root2.appendChild(root4); // write DOM to XML file + + for (int i = 0; i < offPathDelay.size(); i++) { + + SimulationTransaction st = offPathDelay.get(i); + + // first create root element + Element root6 = dom.createElement("st"); + root4.appendChild(root6); + + // set `id` attribute to root element + Attr attr = dom.createAttribute("id"); + attr.setValue(st.id); + root6.setAttributeNode(attr); + + // now create child elements (name, email, phone) + Element operator = dom.createElement("operator"); + operator.setTextContent(st.command); + Element start = dom.createElement("starttime"); + start.setTextContent(st.startTime); + Element et = dom.createElement("endtime"); + et.setTextContent(st.endTime); + Element l = dom.createElement("length"); + l.setTextContent(st.length); + + // add child nodes to root node + root6.appendChild(operator); + root6.appendChild(start); + root6.appendChild(et); + root6.appendChild(l); + + } + Transformer tr; + try { + tr = TransformerFactory.newInstance().newTransformer(); + tr.setOutputProperty(OutputKeys.INDENT, "yes"); + try { + tr.transform(new DOMSource(dom), new StreamResult(new File(outputFile))); + } catch (TransformerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } catch (TransformerConfigurationException | TransformerFactoryConfigurationError e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } catch (ParserConfigurationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public void saveLAtencyValuesToXML(String outputFile) { + + DocumentBuilder builder; + try { + builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + + Document dom = builder.newDocument(); + + Element root1 = dom.createElement("LatencyTable"); + dom.appendChild(root1); + + for (int id = 0; id < dataByTask.length; id++) { + + String starttime = String.valueOf(dataByTask[id][1]); + String endtime = String.valueOf(dataByTask[id][3]); + String latency = String.valueOf(dataByTask[id][4]); + + String op1 = String.valueOf(dataByTask[id][0]); + String op2 = String.valueOf(dataByTask[id][2]); + + // first create root element + Element root = dom.createElement("Row"); + root1.appendChild(root); + + // set `id` attribute to root element + Attr attr = dom.createAttribute("id"); + attr.setValue(String.valueOf(id)); + root.setAttributeNode(attr); + + // now create child elements (name, email, phone) + Element operator1 = dom.createElement("op1"); + operator1.setTextContent(op1); + Element operator2 = dom.createElement("op2"); + operator2.setTextContent(op2); + Element st = dom.createElement("starttime"); + st.setTextContent(starttime); + Element et = dom.createElement("endtime"); + et.setTextContent(endtime); + Element lat = dom.createElement("latency"); + lat.setTextContent(latency); + + // add child nodes to root node + root.appendChild(operator1); + root.appendChild(st); + root.appendChild(operator2); + root.appendChild(et); + root.appendChild(lat); + + } + + // for (int id = 0; id < dataByTaskMinMax.length; id++) { + + String starttime = String.valueOf(dataByTaskMinMax[0][1]); + String endtime = String.valueOf(dataByTaskMinMax[0][3]); + String latency = String.valueOf(dataByTaskMinMax[0][4]); + + String op1 = String.valueOf(dataByTaskMinMax[0][0]); + String op2 = String.valueOf(dataByTaskMinMax[0][2]); + + // first create root element + Element root = dom.createElement("Min"); + root1.appendChild(root); + + // set `id` attribute to root element + // Attr attr = dom.createAttribute("id"); + // attr.setValue(String.valueOf(0)); + // root.setAttributeNode(attr); + + // now create child elements (name, email, phone) + Element operator1 = dom.createElement("op1"); + operator1.setTextContent(op1); + Element operator2 = dom.createElement("op2"); + operator2.setTextContent(op2); + Element st = dom.createElement("starttime"); + st.setTextContent(starttime); + Element et = dom.createElement("endtime"); + et.setTextContent(endtime); + Element lat = dom.createElement("latency"); + lat.setTextContent(latency); + + // add child nodes to root node + root.appendChild(operator1); + root.appendChild(st); + root.appendChild(operator2); + root.appendChild(et); + root.appendChild(lat); + + String starttimeMax = String.valueOf(dataByTaskMinMax[1][1]); + String endtimeMax = String.valueOf(dataByTaskMinMax[1][3]); + String latencyMax = String.valueOf(dataByTaskMinMax[1][4]); + + String op1Max = String.valueOf(dataByTaskMinMax[1][0]); + String op2Max = String.valueOf(dataByTaskMinMax[1][2]); + + // first create root element + Element rootMax = dom.createElement("Max"); + root1.appendChild(rootMax); + + // set `id` attribute to root element + // Attr attrMax = dom.createAttribute("id"); + // attrMax.setValue(String.valueOf(1)); + // root1.setAttributeNode(attrMax); + + // now create child elements + Element operator1Max = dom.createElement("op1"); + operator1Max.setTextContent(op1Max); + Element operator2Max = dom.createElement("op2"); + operator2Max.setTextContent(op2Max); + Element stMax = dom.createElement("starttime"); + stMax.setTextContent(starttimeMax); + Element etMax = dom.createElement("endtime"); + etMax.setTextContent(endtimeMax); + Element latMax = dom.createElement("latency"); + latMax.setTextContent(latencyMax); + + // add child nodes to root node + rootMax.appendChild(operator1Max); + rootMax.appendChild(stMax); + rootMax.appendChild(operator2Max); + rootMax.appendChild(etMax); + rootMax.appendChild(latMax); + + // } + + // write DOM to XML file + Transformer tr; + try { + tr = TransformerFactory.newInstance().newTransformer(); + tr.setOutputProperty(OutputKeys.INDENT, "yes"); + try { + tr.transform(new DOMSource(dom), new StreamResult(new File(outputFile))); + } catch (TransformerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } catch (TransformerConfigurationException | TransformerFactoryConfigurationError e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } catch (ParserConfigurationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + private String getfirstCommonLabel(vertex vertex, vertex v) { for (int i = 0; i < v.getLabel().size(); i++) { @@ -5702,4 +6012,28 @@ public class DirectedGraphTranslator extends JApplet { return warnings; } + public List<SimulationTransaction> getOnPath() { + return onPath; + } + + public void setOnPath(List<SimulationTransaction> onPath) { + this.onPath = onPath; + } + + public List<SimulationTransaction> getOffPath() { + return offPath; + } + + public void setOffPath(List<SimulationTransaction> offPath) { + this.offPath = offPath; + } + + public List<SimulationTransaction> getOffPathDelay() { + return offPathDelay; + } + + public void setOffPathDelay(List<SimulationTransaction> offPathDelay) { + this.offPathDelay = offPathDelay; + } + } \ No newline at end of file diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java index 1afdddeb66381445445b0efe2d7205dbe1d8356e..758a1458cae5fde71bfbc304305fa8f14aa43745 100644 --- a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java +++ b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java @@ -1034,8 +1034,8 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe ComboBoxModel<String> aModel1 = new DefaultComboBoxModel<String>(checkedTransactions); tasksDropDownCombo2.setModel(aModel1); - tasksDropDownCombo1.setModel(getAlloperators((String) tasksDropDownCombo6.getItemAt(0))); - tasksDropDownCombo2.setModel(getAlloperators((String) tasksDropDownCombo7.getItemAt(0))); + tasksDropDownCombo1.setModel(getAlloperators(tasksDropDownCombo6.getItemAt(0))); + tasksDropDownCombo2.setModel(getAlloperators(tasksDropDownCombo7.getItemAt(0))); // ComboBoxModel<String> aModel2 = new // DefaultComboBoxModel<String>(checkedTransactions); @@ -1080,17 +1080,17 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe } else if (command.equals(actions[LatencyDetailedAnalysisActions.ACT_LOAD_ALL_OP].getActionCommand())) { - tasksDropDownCombo1.setModel(getAlloperators((String) tasksDropDownCombo6.getSelectedItem())); + tasksDropDownCombo1.setModel(getAlloperators(tasksDropDownCombo6.getSelectedItem())); } else if (command.equals(actions[LatencyDetailedAnalysisActions.ACT_LOAD_ALL_OP2].getActionCommand())) { - tasksDropDownCombo2.setModel(getAlloperators((String) tasksDropDownCombo7.getSelectedItem())); + tasksDropDownCombo2.setModel(getAlloperators(tasksDropDownCombo7.getSelectedItem())); } } - private ComboBoxModel<String> getAlloperators(String dropdown) { + private ComboBoxModel<String> getAlloperators(Object object) { TMLActivity activity; checkedTransactions = new Vector<String>(); @@ -1101,7 +1101,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe int opCount = 0; - if (tmltask.getName().equals(dropdown)) { + if (tmltask.getName().equals(object)) { activity = tmltask.getActivityDiagram(); TMLActivityDiagramPanel tadp = (TMLActivityDiagramPanel) (activity.getReferenceObject()); @@ -1188,7 +1188,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe if (row >= 0) { try { - new JFrameLatencyDetailedPopup(dgraph, row, true, taint, tc); + new JFrameLatencyDetailedPopup(dgraph, row, true, taint, tc,true); } catch (Exception e) { jta.append("An error has occurred \n"); jta.append(e.getMessage() + "\n"); @@ -1201,7 +1201,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe row = table12.getSelectedRow(); if (row >= 0) { try { - new JFrameLatencyDetailedPopup(dgraph, row, false, taint, tc); + new JFrameLatencyDetailedPopup(dgraph, row, false, taint, tc,true); } catch (Exception e) { jta.append("An error has occurred \n"); jta.append(e.getMessage() + "\n"); @@ -1484,4 +1484,8 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe return checkedT; } + public TMLMapping<TGComponent> getTmap1() { + return tmap1; + } + } \ No newline at end of file diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java index 797aa43fda13752599e5f49af1562582d694a8f5..a05b0706ea3a7c30ac4580e7a6245cac61474172 100644 --- a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java +++ b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java @@ -84,7 +84,7 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList private Object[][] dataHWDelayByTask; public JFrameLatencyDetailedPopup(DirectedGraphTranslator dgraph, int row, boolean firstTable, Boolean taint, - LatencyAnalysisParallelAlgorithms th) throws InterruptedException { + LatencyAnalysisParallelAlgorithms th, boolean visible) throws InterruptedException { super("Precise Latency By Row"); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); @@ -164,7 +164,7 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList taskNames.setAutoCreateRowSorter(true); scrollPane12 = new JScrollPane(taskNames, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - scrollPane12.setVisible(true); + scrollPane12.setVisible(visible); this.add(scrollPane12); @@ -241,7 +241,7 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList scrollPane13 = new JScrollPane(hardwareNames, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - scrollPane13.setVisible(true); + scrollPane13.setVisible(visible); this.add(scrollPane13); int maxTime = -1; @@ -293,12 +293,11 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList } - int timeInterval=0; - if (maxTime>-1 && minTime<Integer.MAX_VALUE ) - { + int timeInterval = 0; + if (maxTime > -1 && minTime < Integer.MAX_VALUE) { timeInterval = (maxTime - minTime); - } - + } + columnNames = new String[timeInterval + 1]; columnNames[0] = "Device Name"; @@ -325,8 +324,12 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList ; onPathBehavior.add(dgraph.getNameIDTaskList().get(st.id) + columnNames[columnnmber]); + if (!dgraph.getOnPath().contains(st)) { + dgraph.getOnPath().add(st); + } } + } } @@ -375,8 +378,15 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList if (causeDelay) { offPathBehaviorCausingDelay.add(dgraph.getNameIDTaskList().get(st.id) + columnNames[columnnmber]); + + if (!dgraph.getOffPathDelay().contains(st)) { + dgraph.getOffPathDelay().add(st); + } } else { offPathBehavior.add(dgraph.getNameIDTaskList().get(st.id) + columnNames[columnnmber]); + if (!dgraph.getOffPath().contains(st)) { + dgraph.getOffPath().add(st); + } } } @@ -488,13 +498,11 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList } } - int timeInterval=0; - if (maxTime>-1 && minTime<Integer.MAX_VALUE ) - { + int timeInterval = 0; + if (maxTime > -1 && minTime < Integer.MAX_VALUE) { timeInterval = (maxTime - minTime); - } - - + } + columnNames = new String[timeInterval + 1]; columnNames[0] = "Device Name"; @@ -521,7 +529,9 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList ; onPathBehavior.add(dgraph.getNameIDTaskList().get(st.id) + columnNames[columnnmber]); - + if (!dgraph.getOnPath().contains(st)) { + dgraph.getOnPath().add(st); + } } } @@ -571,8 +581,16 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList if (causeDelay) { offPathBehaviorCausingDelay.add(dgraph.getNameIDTaskList().get(st.id) + columnNames[columnnmber]); + if (!dgraph.getOffPathDelay().contains(st)) { + dgraph.getOffPathDelay().add(st); + } + } else { offPathBehavior.add(dgraph.getNameIDTaskList().get(st.id) + columnNames[columnnmber]); + + if (!dgraph.getOffPath().contains(st)) { + dgraph.getOffPath().add(st); + } } } @@ -649,11 +667,11 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList } scrollPane14 = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - scrollPane14.setVisible(true); + scrollPane14.setVisible(visible); this.add(scrollPane14); this.pack(); - this.setVisible(true); + this.setVisible(visible); // TODO Auto-generated constructor stub }