/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille * * ludovic.apvrille AT telecom-paristech.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 ui; import avatartranslator.*; import avatartranslator.toproverif.AVATAR2ProVerif; import avatartranslator.totpn.AVATAR2TPN; import avatartranslator.toturtle.AVATAR2TURTLE; import avatartranslator.touppaal.AVATAR2UPPAAL; import common.ConfigurationTTool; import common.SpecConfigTTool; import ddtranslator.DDSyntaxException; import ddtranslator.DDTranslator; import graph.RG; import launcher.LauncherException; import launcher.RemoteExecutionThread; import launcher.RshClient; import myutil.*; import nc.NCStructure; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import proverifspec.ProVerifOutputAnalyzer; import proverifspec.ProVerifSpec; import req.ebrdd.EBRDD; import sddescription.HMSC; import sddescription.MSC; import sddescription.SDExchange; import sdtranslator.SDTranslationException; import sdtranslator.SDTranslator; import tmatrix.RequirementModeling; import tmltranslator.*; import tmltranslator.modelcompiler.TMLModelCompiler; import tmltranslator.toautomata.TML2AUT; import tmltranslator.toautomata.TML2AUTviaLOTOS; import tmltranslator.toavatar.FullTML2Avatar; import tmltranslator.toavatarsec.TML2Avatar; import tmltranslator.tosystemc.TML2SystemC; import tmltranslator.toturtle.Mapping2TIF; import tmltranslator.toturtle.TML2TURTLE; import tmltranslator.touppaal.RelationTMLUPPAAL; import tmltranslator.touppaal.TML2UPPAAL; import tpndescription.TPN; import translator.*; import translator.totpn.TURTLE2TPN; import translator.touppaal.RelationTIFUPPAAL; import translator.touppaal.TURTLE2UPPAAL; import ui.ad.TActivityDiagramPanel; import ui.atd.AttackTreeDiagramPanel; import ui.avatarad.AvatarADPanel; import ui.avatarbd.*; import ui.avatarcd.AvatarCDPanel; import ui.avatardd.ADDDiagramPanel; import ui.avatarmad.AvatarMADPanel; import ui.avatarmethodology.AvatarMethodologyDiagramPanel; import ui.avatarpd.AvatarPDPanel; import ui.avatarrd.AvatarRDPanel; import ui.avatarsmd.*; import ui.cd.TCDTClass; import ui.cd.TCDTObject; import ui.cd.TClassDiagramPanel; import ui.dd.TDDArtifact; import ui.dd.TDDNode; import ui.dd.TDeploymentDiagramPanel; import ui.diplodocusmethodology.DiplodocusMethodologyDiagramPanel; import ui.ebrdd.EBRDDPanel; import ui.eln.ELNDiagramPanel; import ui.ftd.FaultTreeDiagramPanel; import ui.iod.InteractionOverviewDiagramPanel; import ui.ncdd.NCDiagramPanel; import ui.osad.TURTLEOSActivityDiagramPanel; import ui.oscd.TOSClass; import ui.oscd.TURTLEOSClassDiagramPanel; import ui.procsd.ProCSDComponent; import ui.procsd.ProactiveCSDPanel; import ui.prosmd.ProactiveSMDPanel; import ui.req.Requirement; import ui.req.RequirementDiagramPanel; import ui.syscams.SysCAMSComponentTaskDiagramPanel; import ui.sysmlsecmethodology.SysmlsecMethodologyDiagramPanel; import ui.tmlad.*; import ui.tmlcd.TMLTaskDiagramPanel; import ui.tmlcd.TMLTaskOperator; import ui.tmlcompd.*; import ui.tmlcp.TMLCPPanel; import ui.tmldd.*; import ui.tmlsd.TMLSDPanel; import ui.tree.*; import ui.ucd.UseCaseDiagramPanel; import ui.util.DefaultText; import ui.util.IconManager; import ui.window.JFrameSimulationTrace; import uppaaldesc.UPPAALSpec; import javax.swing.*; import javax.swing.tree.TreePath; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.awt.*; import java.io.*; import java.util.*; import java.util.List; // AVATAR // AVATAR //Communication Pattern javaCC parser //Communication Pattern javaCC parser //import compiler.tmlCPparser.*; /** * Class GTURTLEModeling * Creation: 09/12/2003 * Version: 1.1 02/06/2014 * * @author Ludovic APVRILLE */ public class GTURTLEModeling { //Added by Solange public GProactiveDesign gpdtemp; // private Vector<TURTLEPanel> panels; /* analysis, design, deployment, tml design */ private TURTLEModeling tm; private AvatarSpecification avatarspec; // private AttackTree attackTree; private AVATAR2UPPAAL avatar2uppaal; private AVATAR2ProVerif avatar2proverif; private boolean optimizeAvatar; private int tmState; // 0:generated, 1: to be generated from mapping, 2: to be generated from TML modeling private TMLModeling<TGComponent> tmlm; private TMLMapping<TGComponent> artificialtmap; private TMLMapping<TGComponent> tmap; private TMLCP tmlcp; private TML2Avatar t2a; private RequirementModeling rm; private NCStructure ncs; private final MainGUI mgui; private CorrespondanceTGElement listE; private String rtlotos; private EBRDD ebrdd; private UPPAALSpec uppaal; private RelationTIFUPPAAL uppaalTIFTable; private RelationTMLUPPAAL uppaalTMLTable; private ProVerifSpec proverif; private AVATAR2TPN avatar2tpn; private TPN tpnFromAvatar; private String tpn; private String sim; private String dta; private String dtadot; private String rg; private String rgdot; private String rgaut; private String rgautdot; private String rgautproj; private String rgautprojdot; private String tlsa; private String tlsadot; private List<SimulationTrace> simulationTraces; private List<RG> graphs; private GraphTree gt; private SimulationTraceTree stt; private int nbRTLOTOS; private int nbSuggestedDesign; // private int nbSuggestedAnalysis; // private int nbTPN; //private ValidationDataTree vdt; private SearchTree st; private SyntaxAnalysisTree mcvdt; private InvariantDataTree idt; private HelpTree ht; private List<CheckingError> checkingErrors; private List<CheckingError> warnings; private List<Invariant> invariants; List<TGConnectorInfo> pendingConnectors; private Vector<String> savedOperations; private Vector<Point> savedPanels; private int nbMaxSavedOperations = 10; private int pointerOperation; private DocumentBuilderFactory dbf; private DocumentBuilder db; private Document docCopy; private int decX, decY, decId; private static int graphId = 0; private int languageID; public final static int RT_LOTOS = 0; public final static int LOTOS = 1; public final static int AUT = 2; public final static int TPN = 3; public final static int MATRIX = 4; public final static int UPPAAL = 5; public final static int PROVERIF = 6; private boolean undoRunning = false; boolean hasCrypto = false; //private Charset chset1, chset2; public GTURTLEModeling(MainGUI _mgui, Vector<TURTLEPanel> _panels) { mgui = _mgui; panels = _panels; try { dbf = DocumentBuilderFactory.newInstance(); db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException e) { dbf = null; db = null; } savedOperations = new Vector<String>(); savedPanels = new Vector<Point>(); pointerOperation = -1; graphs = new ArrayList<RG>(); simulationTraces = new ArrayList<SimulationTrace>(); invariants = new LinkedList<Invariant>(); //vdt = new ValidationDataTree(mgui); mcvdt = new SyntaxAnalysisTree(mgui); idt = new InvariantDataTree(mgui); st = new SearchTree(mgui); gt = new GraphTree(mgui); stt = new SimulationTraceTree(mgui); ht = new HelpTree(mgui); /*if (!Charset.isSupported("UTF-8")) { ErrorGUI.exit(ErrorGUI.ERROR_CHARSET); } chset1 = Charset.forName("UTF-8");*/ } public int getLanguageID() { return languageID; } public boolean isRegularTM() { if (tm == null) { return false; } return tm.isARegularTIFSpec(); } public List<SimulationTrace> getSimulationTraces() { return simulationTraces; } public void addSimulationTrace(SimulationTrace newTrace) { //TraceManager.addDev("Adding new simulation trace " + newTrace); if (newTrace.hasFile()) { // We have to remove identical traces LinkedList<SimulationTrace> ll = new LinkedList<>(); for (SimulationTrace trace : simulationTraces) { if (trace.hasFile()) { if (trace.getFullPath().compareTo(newTrace.getFullPath()) == 0) { ll.add(trace); } } } for (SimulationTrace trace : ll) { simulationTraces.remove(trace); } } simulationTraces.add(newTrace); } public void removeSimulationTrace(SimulationTrace oldTrace) { //TraceManager.addDev("Adding new graph " + newGraph); simulationTraces.remove(oldTrace); } public List<RG> getRGs() { return graphs; } public void addRG(RG newGraph) { //TraceManager.addDev("Adding new graph " + newGraph); graphs.add(newGraph); } public void removeRG(RG oldGraph) { //TraceManager.addDev("Adding new graph " + newGraph); graphs.remove(oldGraph); } public List<Invariant> getInvariants() { return invariants; } public void addInvariant(Invariant _inv) { invariants.add(_inv); TraceManager.addDev("Adding invariant: " + _inv.toString()); } public void clearInvariants() { invariants.clear(); } public String saveTIF() { if (tm == null) { TraceManager.addDev("NO TIF to save"); return null; } TIFExchange tif = new TIFExchange(); tif.setTURTLEModeling(tm); String ret = tif.saveInXMLTIF(); TraceManager.addDev("TIF=\n" + ret); return ret; } public boolean openTIF(String s) { TIFExchange tif = new TIFExchange(); boolean ret = false; try { ret = tif.loadFromXMLTIF(s); if (ret) { tm = tif.getTURTLEModeling(); tmState = 0; TraceManager.addDev("Got TIF"); generateDesign(); } } catch (Exception e) { TraceManager.addDev("Exception on TIF: " + e.getMessage()); } return ret; } public boolean openSD(String s) { SDExchange sde = new SDExchange(); boolean ret = false; try { ret = sde.loadFromXMLSD(s); if (ret) { //tm = tif.getTURTLEModeling(); //tmState = 0; TraceManager.addDev("Got SD"); generateIOD(sde.getHMSC(), sde.getMSC()); } } catch (Exception e) { TraceManager.addDev("Exception on SD: " + e.getMessage()); } return ret; } /*public void mergeChoices(boolean nonDeterministic) { if (tm != null) { tm.mergeChoices(nonDeterministic); } }*/ public NCStructure getNCS() { return ncs; } public void generateRTLOTOS(File f) { TURTLETranslator tt = new TURTLETranslator(tm); rtlotos = tt.generateRTLOTOS(); warnings = tt.getWarnings(); nbRTLOTOS++; if (f != null) { saveInFile(f, rtlotos); } languageID = RT_LOTOS; mgui.setMode(MainGUI.RTLOTOS_OK); } public void generateFullLOTOS(File f) { reinitSIM(); reinitDTA(); reinitRG(); reinitRGAUT(); reinitRGAUTPROJDOT(); //TraceManager.addDev("generate LOTOS"); generateLOTOS(f); } public void generateLOTOS(File f) { //tm.print(); TraceManager.addDev("Generating Lotos"); TURTLETranslator tt = new TURTLETranslator(tm); rtlotos = tt.generateLOTOS(true); warnings = tt.getWarnings(); TraceManager.addDev("Lotos generated"); nbRTLOTOS++; if (f != null) { saveInFile(f, rtlotos); } TraceManager.addDev("LOTOS to file done"); languageID = LOTOS; mgui.setMode(MainGUI.RTLOTOS_OK); } public void generateTPN(File f) { //tm.print(); TURTLE2TPN t2tpn = new TURTLE2TPN(tm); tpn = t2tpn.generateTPN().toString(); warnings = t2tpn.getWarnings(); // nbTPN ++; if (f != null) { TraceManager.addDev("Saving in file: " + f); saveInFile(f, tpn); } languageID = TPN; // For debug purpose //TraceManager.addDev(tpn); mgui.setMode(MainGUI.RTLOTOS_OK); } public List<String> generateAUT(String path) { TML2AUT tml2aut = new TML2AUT(tmlm); tml2aut.generateAutomatas(true); try { return tml2aut.saveInFiles(path); } catch (FileException fe) { return null; } } public boolean generateCCode(String directory, String compilationOptions) { //CheckingError ce; //int type; // TGComponent tgc; String applicationName; TMLModelCompiler CCode; if (tmap == null) { JOptionPane.showMessageDialog(mgui.frame, "C code is only generated from an architecture diagram with mapping information", "Control code generation failed", JOptionPane.INFORMATION_MESSAGE); return true; } // Get the file from DiplodocusPECPragma //List<TGComponent> components = mgui.getCurrentArchiPanel().tmlap.getComponentList(); // Parse the PEC file and the library of code snippets for each DIPLODOCUS unit applicationName = tmap.getMappedTasks().get(0).getName().split("__")[0]; // Remember that it works only for one application CCode = new TMLModelCompiler(directory, applicationName, mgui.frame, mgui.getAllTMLCP(), tmap); // Issue #98: Use the passed directory File dir = new File(directory /*ConfigurationTTool.CCodeDirectory*/ + File.separator); if (!dir.exists()) { dir.mkdirs(); } CCode.toTextFormat(); try { if (directory.equals("")) { JOptionPane.showMessageDialog(mgui.frame, "No directory for C code generation found in config.xml. The C code cannot be generated.", "Control code generation failed", JOptionPane.INFORMATION_MESSAGE); return true; } else { SpecConfigTTool.checkAndCreateCCodeDir(directory); CCode.saveFile(directory + File.separator, applicationName); } } catch (Exception e) { JOptionPane.showMessageDialog(mgui.frame, "The application C files could not be saved: " + e.getMessage(), "Control code generation failed", JOptionPane.INFORMATION_MESSAGE); return true; } return false; } public boolean generateTMLTxt(String _title) { //This branch is activated if doing the syntax check from the architecture panel. //It generates the text TML for the architecture and the application + mapping information if (tmap != null) { TMLMappingTextSpecification<TGComponent> spec = new TMLMappingTextSpecification<>(_title); spec.toTextFormat(tmap); //TMLMapping String XMLSpec = tmap.toXML(); try { //TraceManager.addDev( "*** " + ConfigurationTTool.TMLCodeDirectory + File.separator ); spec.saveFile(SpecConfigTTool.TMLCodeDirectory, "spec"); FileUtils.saveFile(SpecConfigTTool.TMLCodeDirectory + "spec.xml", XMLSpec); } catch (Exception e) { TraceManager.addError("Files could not be saved: " + e.getMessage()); return false; } } if (tmlcp != null) { //Use the data structure filled by translateToTML... and pass it to the appropriate toTextFormat() TraceManager.addError("About to generate the TMLText for CPs"); TMLCPTextSpecification specCP = new TMLCPTextSpecification(_title); //get the architecture panel and the nodes TMLArchiDiagramPanel tmlap = mgui.getTMLArchiDiagramPanels().get(0).tmlap; List<TGComponent> components = tmlap.getComponentList(); Iterator<TGComponent> iterator = components.listIterator(); TGComponent tgc; while (iterator.hasNext()) { tgc = iterator.next(); if (tgc instanceof TMLArchiCPNode) { TMLArchiCPNode node = (TMLArchiCPNode) tgc; TraceManager.addDev("Found CP node: " + node.getName()); TraceManager.addDev("with mapping info: " + node.getMappedUnits()); } } List<TMLCommunicationPatternPanel> tmlcpPanelsList = new ArrayList<TMLCommunicationPatternPanel>(); //get the TMLCommunicationPatternPanels :) for (int i = 0; i < mgui.tabs.size(); i++) { TURTLEPanel panel = mgui.tabs.get(i); if (panel instanceof TMLCommunicationPatternPanel) { tmlcpPanelsList.add((TMLCommunicationPatternPanel) panel); TraceManager.addDev("Found TMLCommunicationPatternPanel: " + panel.toString()); } } specCP.toTextFormat(tmlcp); // the data structure tmlcp is filled with the info concerning the CP panel // from which the button is pressed. If there are multiple CP panels this operation must be repeated for each panel. It // should be no difficult to implement. try { specCP.saveFile(SpecConfigTTool.TMLCodeDirectory, "spec.tmlcp"); } catch (Exception e) { TraceManager.addError("Writing TMLText for CPs, file could not be saved: " + e.getMessage()); return false; } } else if (tmap == null) { //This branch is activated if doing the syntax check from the application panel. //It only generates the application TML text if (tmap == null) { TMLTextSpecification<TGComponent> spec = new TMLTextSpecification<>(_title); spec.toTextFormat(tmlm); //TMLModeling try { String XMLSpecTML = tmlm.toXML(); FileUtils.saveFile(SpecConfigTTool.TMLCodeDirectory + "spec.xml", XMLSpecTML); spec.saveFile(SpecConfigTTool.TMLCodeDirectory, "spec.tml"); } catch (Exception e) { TraceManager.addError("File could not be saved: " + e.getMessage()); return false; } } } return true; //temporary, just to check functionality } public boolean generateUPPAALFromTIF(String path, boolean debug, int nb, boolean choices, boolean variables) { TURTLE2UPPAAL turtle2uppaal = new TURTLE2UPPAAL(tm); turtle2uppaal.setChoiceDeterministic(choices); turtle2uppaal.setVariablesAsActions(variables); uppaal = turtle2uppaal.generateUPPAAL(debug, nb); TraceManager.addDev("Building relation table"); uppaalTIFTable = turtle2uppaal.getRelationTIFUPPAAL(); TraceManager.addDev("Building relation table done"); uppaalTMLTable = null; languageID = UPPAAL; mgui.setMode(MainGUI.UPPAAL_OK); try { TraceManager.addDev("Saving specification in " + path + "\n"); // DB: Moved from TURTLE2UPPAAL (introduced for project management) SpecConfigTTool.checkAndCreateUPPAALDir(path); turtle2uppaal.saveInFile(path); TraceManager.addDev("UPPAAL specification has been generated in " + path + "\n"); return true; } catch (FileException fe) { TraceManager.addError("Exception: " + fe.getMessage()); return false; } } public boolean generateUPPAALFromTML(String _path, boolean _debug, int _size, boolean choices) { TraceManager.addDev("Generate UPPAAL from TML"); TML2UPPAAL tml2uppaal = new TML2UPPAAL(tmlm); //tml2uppaal.setChoiceDeterministic(choices); tml2uppaal.setSizeInfiniteFIFO(_size); uppaal = tml2uppaal.generateUPPAAL(_debug); uppaalTMLTable = tml2uppaal.getRelationTMLUPPAAL(); uppaalTIFTable = null; languageID = UPPAAL; mgui.setMode(MainGUI.UPPAAL_OK); //uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug); try { tml2uppaal.saveInFile(_path); return true; } catch (FileException fe) { TraceManager.addError("Exception: " + fe.getMessage()); return false; } } public boolean generateUPPAALFromAVATAR(String _path) { long timeBeg, timeEnd; timeBeg = System.currentTimeMillis(); if (avatarspec == null) { TraceManager.addDev("Null avatar spec"); return false; } avatar2uppaal = new AVATAR2UPPAAL(avatarspec); //tml2uppaal.setChoiceDeterministic(choices); //tml2uppaal.setSizeInfiniteFIFO(_size); uppaal = avatar2uppaal.generateUPPAAL(true, optimizeAvatar); warnings = avatar2uppaal.getWarnings(); uppaalTMLTable = null; uppaalTIFTable = null; languageID = UPPAAL; mgui.setMode(MainGUI.UPPAAL_OK); //uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug); try { avatar2uppaal.saveInFile(_path); timeEnd = System.currentTimeMillis(); TraceManager.addDev("Total time toUPPAAL: " + (timeEnd-timeBeg) + " ms"); return true; } catch (FileException fe) { TraceManager.addError("Exception: " + fe.getMessage()); return false; } } public AvatarSpecification getAvatarSpecification() { return avatarspec; } public AVATAR2UPPAAL getAvatar2Uppaal() { return avatar2uppaal; } public ProVerifOutputAnalyzer getProVerifOutputAnalyzer() { return this.avatar2proverif.getOutputAnalyzer(); } public boolean generateProVerifFromAVATAR(String _path, int _stateReachability, boolean _typed, boolean allowPrivateChannelDuplication) { return generateProVerifFromAVATAR(_path, _stateReachability, _typed, allowPrivateChannelDuplication, "1"); } public int calcSec() { int overhead = 0; //count # of insecure channels? return overhead; } public boolean channelAllowed(TMLMapping<TGComponent> map, TMLChannel chan) { TMLTask orig = chan.getOriginTask(); TMLTask dest = chan.getDestinationTask(); List<HwNode> path = getPath(map, orig, dest); for (HwNode node : path) { if (node instanceof HwBridge) { for (String rule : ((HwBridge) node).firewallRules) { String t1 = rule.split("->")[0]; String t2 = rule.split("->")[1]; if (t1.equals(orig.getName().replaceAll("__", "::")) || t1.equals("*")) { if (t2.equals(dest.getName().replaceAll("__", "::")) || t2.equals("*")) { return false; } } } } } return true; } public List<HwNode> getPath(TMLMapping<TGComponent> map, TMLTask t1, TMLTask t2) { HwNode node1 = map.getHwNodeOf(t1); HwNode node2 = map.getHwNodeOf(t2); List<HwNode> path = new ArrayList<HwNode>(); if (node1 == node2) { return path; } if (node1 != node2) { //Navigate architecture for node List<HwLink> links = map.getTMLArchitecture().getHwLinks(); // HwNode last = node1; List<HwNode> found = new ArrayList<HwNode>(); List<HwNode> done = new ArrayList<HwNode>(); Map<HwNode, List<HwNode>> pathMap = new HashMap<HwNode, List<HwNode>>(); for (HwLink link : links) { if (link.hwnode == node1) { found.add(link.bus); List<HwNode> tmp = new ArrayList<HwNode>(); tmp.add(link.bus); pathMap.put(link.bus, tmp); } } outerloop: while (found.size() > 0) { HwNode curr = found.remove(0); for (HwLink link : links) { if (curr == link.bus) { if (link.hwnode == node2) { path = pathMap.get(curr); break outerloop; } if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge) { found.add(link.hwnode); List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr)); tmp.add(link.hwnode); pathMap.put(link.hwnode, tmp); } } else if (curr == link.hwnode) { if (!done.contains(link.bus) && !found.contains(link.bus)) { found.add(link.bus); List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr)); tmp.add(link.bus); pathMap.put(link.bus, tmp); } } } done.add(curr); } } return path; } public boolean commPath(TMLMapping<TGComponent> map, HwBridge firewallNode, TMLTask t1) { //Check if a task has any write communications that pass through firewallNode for (TMLChannel chan : map.getTMLModeling().getChannels(t1)) { if (!chan.isBasicChannel()) { // } else { if (t1 == chan.getOriginTask()) { TMLTask originTask = chan.getOriginTask(); TMLTask destTask = chan.getDestinationTask(); if (pathExists(map, firewallNode, destTask) && pathExists(map, firewallNode, originTask) && pathIncludes(map, originTask, destTask, firewallNode)) { System.out.println("found channel " + t1.getName()); return true; } else { System.out.println("NO Channel " + chan.getName()); } } } } return false; } public boolean pathIncludes(TMLMapping<TGComponent> map, TMLTask t1, TMLTask t2, HwBridge firewallNode) { //Check if a path between two tasks uses firewallnode boolean secure = true; List<HwLink> links = map.getTMLArchitecture().getHwLinks(); HwExecutionNode node1 = map.getHwNodeOf(t1); HwExecutionNode node2 = map.getHwNodeOf(t2); List<HwNode> found = new ArrayList<HwNode>(); List<HwNode> done = new ArrayList<HwNode>(); List<HwNode> path = new ArrayList<HwNode>(); Map<HwNode, List<HwNode>> pathMap = new HashMap<HwNode, List<HwNode>>(); TraceManager.addDev("Links " + links); if (node1 == node2) { return false; } for (HwLink link : links) { if (link.hwnode == node1) { found.add(link.bus); List<HwNode> tmp = new ArrayList<HwNode>(); tmp.add(link.bus); pathMap.put(link.bus, tmp); } } outerloop: while (found.size() > 0) { HwNode curr = found.remove(0); for (HwLink link : links) { if (curr == link.bus) { if (link.hwnode == node2) { path = pathMap.get(curr); break outerloop; } if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge) { found.add(link.hwnode); List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr)); tmp.add(link.hwnode); pathMap.put(link.hwnode, tmp); } } else if (curr == link.hwnode) { if (!done.contains(link.bus) && !found.contains(link.bus)) { found.add(link.bus); List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr)); tmp.add(link.bus); pathMap.put(link.bus, tmp); } } } done.add(curr); } if (path.size() == 0) { return true; } else { HwBus bus; //Check if all buses and bridges are private for (HwNode n : path) { if (n == firewallNode) { return true; } } } return false; } public boolean pathExists(TMLMapping<TGComponent> map, HwBridge firewallNode, TMLTask t1) { //System.out.println("Checking path " + firewallNode.getName() + t1.getName()); List<HwLink> links = map.getTMLArchitecture().getHwLinks(); List<HwNode> found = new ArrayList<HwNode>(); List<HwNode> done = new ArrayList<HwNode>(); //List<HwNode> path = new ArrayList<HwNode>(); HwExecutionNode node1 = map.getHwNodeOf(t1); //Map<HwNode, List<HwNode>> pathMap = new HashMap<HwNode, List<HwNode>>(); for (HwLink link : links) { if (link.hwnode == node1) { found.add(link.bus); } } while (found.size() > 0) { HwNode curr = found.remove(0); for (HwLink link : links) { //System.out.println("LINK " + link.hwnode.getName() + " " + link.bus.getName()); if (curr == link.bus) { if (link.hwnode.getName().equals(firewallNode.getName())) { return true; } if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge) { found.add(link.hwnode); } } else if (curr == link.hwnode) { if (!done.contains(link.bus) && !found.contains(link.bus)) { found.add(link.bus); } } } done.add(curr); } return false; } public TMLMapping<TGComponent> drawFirewall(TMLMapping<TGComponent> map) { Map<String, Integer> channelIndexMap = new HashMap<String, Integer>(); // //Request Index indicates channel or update rules //index = 0 : update rules //index = 1-n: channel int index = 1; TGComponent comp = map.getTMLModeling().getTGComponent(); TMLComponentDesignPanel tmlcdp = (TMLComponentDesignPanel) comp.getTDiagramPanel().tp; // TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel(); TMLModeling<TGComponent> tmlm = map.getTMLModeling(); TMLArchitecture archi = map.getArch(); TURTLEPanel tmlap = map.getCorrespondanceList().getTG(archi.getFirstCPU()).getTDiagramPanel().tp; TMLActivityDiagramPanel firewallADP = null; TMLComponentDesignPanel tcp = tmlcdp; TMLArchiPanel newarch = null; TMLComponentTaskDiagramPanel tcdp = tmlcdp.tmlctdp; TMLComponentTaskDiagramPanel newtcdp = tcp.tmlctdp; if (TraceManager.devPolicy == TraceManager.TO_CONSOLE) { MainGUI gui = tmlcdp.getMainGUI(); int arch = mgui.tabs.indexOf(tmlap); gui.cloneRenameTab(arch, "firewallArch"); newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size() - 1); int ind = gui.tabs.indexOf(tmlcdp); String tabName = gui.getTitleAt(tmlcdp); gui.cloneRenameTab(ind, "firewallDesign"); tcp = (TMLComponentDesignPanel) gui.tabs.get(gui.tabs.size() - 1); newtcdp = tcp.tmlctdp; newarch.renameMapping(tabName, tabName + "_firewallDesign"); } else { return null; } for (HwBridge firewallNode : map.getTMLArchitecture().getFirewalls()) { List<String> chansToRemove = new ArrayList<String>(); TraceManager.addDev("Found firewall " + firewallNode.getName()); TMLCPrimitiveComponent firewallComp = null; TMLADStartState adStart = null; //TMLADForEverLoop adLoop = null; TMLADChoice adChoice = null; TMLADChoice adChoice2 = null; TMLADChoice adChoiceMain = null; TMLADReadChannel adRC = null; TMLADReadRequestArg req = null; TMLADExecI exec = null; TMLADWriteChannel adWC = null; TMLADStopState adStop = null; TMLADStopState adStop2 = null; //Add a single connection to update rules boolean updateRulesAdded = false; int links = map.getArch().getLinkByHwNode(firewallNode).size(); TraceManager.addDev("Links " + links); HwCPU cpu = new HwCPU(firewallNode.getName()); map.getTMLArchitecture().replaceFirewall(firewallNode, cpu); //Replace Firewall on new Architecture diagram TGComponent firewallArchComp = null; for (TGComponent tg : newarch.tmlap.getComponentList()) { if (tg.getName().equals(firewallNode.getName())) { firewallArchComp = tg; } } if (firewallArchComp != null) { String refTask = ""; for (TGComponent tg : newarch.tmlap.getComponentList()) { if (tg instanceof TMLArchiCPUNode) { TMLArchiCPUNode tmpcpu = (TMLArchiCPUNode) tg; if (tmpcpu.getArtifactList().size() != 0) { TMLArchiArtifact art = tmpcpu.getArtifactList().get(0); refTask = art.getReferenceTaskName(); break; } } } TMLArchiCPUNode newcpu = new TMLArchiCPUNode(firewallArchComp.getX() + 100, firewallArchComp.getY() + 100, newarch.tmlap.getMinX(), newarch.tmlap.getMaxX(), newarch.tmlap.getMinY(), newarch.tmlap.getMaxY(), true, null, newarch.tmlap); newcpu.setName("CPU" + firewallNode.getName()); newarch.tmlap.replaceArchComponent(firewallArchComp, newcpu); //Add artifact TMLArchiArtifact hsmArt = new TMLArchiArtifact(newcpu.getX(), newcpu.getY(), newarch.tmlap.getMinX(), newarch.tmlap.getMaxX(), newarch.tmlap.getMinY(), newarch.tmlap.getMaxY(), true, newcpu, newarch.tmlap); newarch.tmlap.addComponent(hsmArt, newcpu.getX(), newcpu.getY(), true, true); hsmArt.setFullName(firewallNode.getName(), refTask); } // for (int link = 0; link < links / 2; link++) { HashMap<TMLChannel, TMLChannel> inChans = new HashMap<TMLChannel, TMLChannel>(); HashMap<TMLChannel, TMLChannel> outChans = new HashMap<TMLChannel, TMLChannel>(); if (TraceManager.devPolicy == TraceManager.TO_CONSOLE) { firewallComp = new TMLCPrimitiveComponent(newtcdp.getMaxX() - 100, newtcdp.getMaxY() - 100, newtcdp.getMinX(), newtcdp.getMaxX(), newtcdp.getMinY(), newtcdp.getMaxY(), false, null, newtcdp); TAttribute reqIndex = new TAttribute(2, "index", "0", 0); firewallComp.getAttributeList().add(reqIndex); TAttribute chanIndex = new TAttribute(2, "channelIndex", "0", 0); firewallComp.getAttributeList().add(chanIndex); TAttribute rule = new TAttribute(2, "rule", "true", 4); firewallComp.getAttributeList().add(rule); newtcdp.addComponent(firewallComp, 0, 0, false, true); firewallComp.setValueWithChange(firewallNode.getName()); firewallADP = tcp.getTMLActivityDiagramPanel(firewallNode.getName()); } List<TMLChannel> channelsCopy = tmlm.getChannels(); List<TMLChannel> toAdd = new ArrayList<TMLChannel>(); TMLTask firewall = new TMLTask("TASK__" + firewallNode.getName(), firewallComp, firewallADP); // tmlm.addTask(firewall); // map.addTaskToHwExecutionNode(firewall, cpu); TMLActivity act = firewall.getActivityDiagram(); TraceManager.addDev("FirewallADP " + firewallADP); List<TMLTask> modifiedTasks = new ArrayList<TMLTask>(); //Build requests between every connected task and firewall task for (TMLTask task : map.getTMLModeling().getTasks()) { TMLCPrimitiveComponent taskcomp = null; for (TGComponent tg : tcdp.getComponentList()) { if (tg instanceof TMLCPrimitiveComponent) { if (tg.getValue().equals(task.getName().split("__")[1])) { taskcomp = ((TMLCPrimitiveComponent) tg); break; } } else if (tg instanceof TMLCCompositeComponent) { TMLCCompositeComponent cc = (TMLCCompositeComponent) tg; List<TMLCPrimitiveComponent> pcomps = cc.getAllPrimitiveComponents(); for (TMLCPrimitiveComponent pc : pcomps) { if (pc.getValue().equals(task.getName().split("__")[1])) { taskcomp = pc; break; } } } } if (taskcomp == null) { continue; } if (pathExists(map, firewallNode, task) && commPath(map, firewallNode, task)) { modifiedTasks.add(task); //Add Request Ports TMLCChannelOutPort destPort = new TMLCChannelOutPort(taskcomp.getX(), taskcomp.getY(), newtcdp.getMinX(), newtcdp.getMaxX(), newtcdp.getMinY(), newtcdp.getMaxX(), true, firewallComp, newtcdp); TMLCChannelOutPort originPort = new TMLCChannelOutPort(taskcomp.getX(), taskcomp.getY(), newtcdp.getMinX(), newtcdp.getMaxX(), newtcdp.getMinY(), newtcdp.getMaxX(), true, taskcomp, newtcdp); originPort.commName = "req" + firewallNode.getName(); originPort.isOrigin = true; destPort.isOrigin = false; destPort.commName = "req" + firewallNode.getName(); //Connect Request ports TMLCPortConnector conn = new TMLCPortConnector(0, 0, newtcdp.getMinX(), newtcdp.getMaxX(), newtcdp.getMinY(), newtcdp.getMaxX(), true, null, newtcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>()); newtcdp.addComponent(conn, 0, 0, false, true); originPort.typep = 2; destPort.typep = 2; originPort.setParam(0, new TType(1)); destPort.setParam(0, new TType(1)); newtcdp.addComponent(originPort, taskcomp.getX(), taskcomp.getY(), true, true); newtcdp.addComponent(destPort, firewallComp.getX(), firewallComp.getY(), true, true); //Add updateRules connection to first task if (!updateRulesAdded) { destPort = new TMLCChannelOutPort(taskcomp.getX(), taskcomp.getY(), newtcdp.getMinX(), newtcdp.getMaxX(), newtcdp.getMinY(), newtcdp.getMaxX(), true, firewallComp, newtcdp); originPort = new TMLCChannelOutPort(taskcomp.getX(), taskcomp.getY(), newtcdp.getMinX(), newtcdp.getMaxX(), newtcdp.getMinY(), newtcdp.getMaxX(), true, taskcomp, newtcdp); originPort.commName = "updateRules" + firewallNode.getName(); originPort.isOrigin = true; destPort.isOrigin = false; destPort.commName = "updateRules" + firewallNode.getName(); //Connect Evt ports conn = new TMLCPortConnector(0, 0, newtcdp.getMinX(), newtcdp.getMaxX(), newtcdp.getMinY(), newtcdp.getMaxX(), true, null, newtcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>()); newtcdp.addComponent(conn, 0, 0, false, true); originPort.typep = 1; destPort.typep = 1; originPort.setParam(0, new TType(1)); destPort.setParam(0, new TType(1)); originPort.setParam(1, new TType(2)); destPort.setParam(1, new TType(2)); newtcdp.addComponent(originPort, taskcomp.getX(), taskcomp.getY(), true, true); newtcdp.addComponent(destPort, firewallComp.getX(), firewallComp.getY(), true, true); updateRulesAdded = true; } } } List<String> firewallChans = new ArrayList<String>(); for (TMLChannel chan : channelsCopy) { TMLTask orig = chan.getOriginTask(); TMLTask dest = chan.getDestinationTask(); //If firewall does not filter these tasks, continue on if (!pathExists(map, firewallNode, orig) || !pathExists(map, firewallNode, dest) || !pathIncludes(map, orig, dest, firewallNode)) { //toAdd.add(chan); continue; } firewallChans.add(chan.getName().split("__")[chan.getName().split("__").length - 1]); System.out.println("REMOVING " + chan.getName()); chansToRemove.add(chan.getName().split("__")[1]); channelIndexMap.put(chan.getName().split("__")[1], index); index++; TMLPort origPort = chan.getOriginPort(); TMLPort destPort = chan.getDestinationPort(); TMLChannel wr = new TMLChannel(chan.getName().split("__")[1] + "_firewallIn", chan.getReferenceObject()); //Specify new channel attributes wr.setSize(chan.getSize()); wr.setMax(chan.getMax()); wr.setPorts(origPort, destPort); wr.setType(TMLChannel.BRBW); wr.setPriority(chan.getPriority()); wr.setTasks(orig, firewall); TMLChannel rd = new TMLChannel(chan.getName().split("__")[1] + "_firewallOut", chan.getReferenceObject()); rd.setTasks(firewall, dest); rd.setSize(chan.getSize()); rd.setMax(chan.getMax()); rd.setPorts(origPort, destPort); rd.setType(TMLChannel.BRBW); rd.setPriority(chan.getPriority()); inChans.put(chan, wr); outChans.put(chan, rd); toAdd.add(rd); toAdd.add(wr); map.getCorrespondanceList().addCor(rd, (TGComponent) rd.getReferenceObject()); map.getCorrespondanceList().addCor(wr, (TGComponent) wr.getReferenceObject()); } List<TGComponent> tmpRemove = new ArrayList<TGComponent>(); for (TGComponent tg : newtcdp.getComponentList()) { if (tg instanceof TMLCPrimitiveComponent) { TMLCPrimitiveComponent taskcomp = (TMLCPrimitiveComponent) tg; for (TMLCPrimitivePort port : taskcomp.getAllChannelsOriginPorts()) { //System.out.println("chantoremove " + chansToRemove + " " + port.getPortName()); if (chansToRemove.contains(port.getPortName())) { //System.out.println("Removing " + port); tmpRemove.add(port); } } for (TMLCPrimitivePort port : taskcomp.getAllChannelsDestinationPorts()) { if (chansToRemove.contains(port.getPortName())) { tmpRemove.add(port); } } } } for (TGComponent tg : tmpRemove) { newtcdp.removeComponent(tg); } //Build activity diagram //Get start state adStart = (TMLADStartState) firewallADP.getComponentList().get(0); if (inChans.keySet().size() == 0) { TMLADStopState stop = new TMLADStopState(100, 100, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(stop, 100, 100, false, true); //Connect stop and start TGConnector tmp = new TGConnectorTMLAD(100, 100, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, null, null, new Vector<Point>()); tmp.setP1(adStart.getTGConnectingPointAtIndex(0)); tmp.setP2(stop.getTGConnectingPointAtIndex(0)); firewallADP.addComponent(tmp, 100, 100, false, true); continue; } //Add request req = new TMLADReadRequestArg(300, 100, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(req, 300, 100, false, true); req.setParam(0, "index"); req.makeValue(); TGConnector tmp = new TGConnectorTMLAD(req.getX(), req.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adStart.getTGConnectingPointAtIndex(0), req.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, req.getX(), req.getY(), false, true); //add choice between update and channel filter adChoiceMain = new TMLADChoice(400, 300, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(adChoiceMain, 400, 300, false, true); adChoiceMain.setGuard("[index==0]", 0); adChoiceMain.setGuard("[else]", 1); tmp = new TGConnectorTMLAD(adChoiceMain.getX(), adChoiceMain.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, req.getTGConnectingPointAtIndex(1), adChoiceMain.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adChoiceMain.getX(), adChoiceMain.getY(), false, true); //Add guard //Add choice between channels adChoice = new TMLADChoice(800, 400, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(adChoice, 400, 300, false, true); tmp = new TGConnectorTMLAD(adChoice.getX(), adChoice.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adChoiceMain.getTGConnectingPointAtIndex(2), adChoice.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adChoice.getX(), adChoice.getY(), false, true); //Add waitEvent and updateRules activity TMLADWaitEvent evt = new TMLADWaitEvent(100, 300, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); evt.setEventName("updateRules" + firewallNode.getName()); evt.setParam("channelIndex", 0); evt.setParam("rule", 1); evt.makeValue(); firewallADP.addComponent(evt, 100, 300, false, true); //Connect choice and waitevent //Add updaterules choice TMLADChoice adChoiceRules = new TMLADChoice(100, 400, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(adChoiceRules, 100, 400, false, true); tmp = new TGConnectorTMLAD(adChoice.getX(), adChoice.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adChoiceMain.getTGConnectingPointAtIndex(1), evt.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adChoice.getX(), adChoice.getY(), false, true); adChoiceMain.setGuard("[index==0]", 0); adChoiceMain.setGuard("[else]", 1); //Add connector between evt and updaterules choice tmp = new TGConnectorTMLAD(adChoice.getX(), adChoice.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, evt.getTGConnectingPointAtIndex(1), adChoiceRules.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adChoice.getX(), adChoice.getY(), false, true); //for each channel, add the rule change and guard int i = 1; for (TMLChannel chan : inChans.keySet()) { if (i > 3) { break; } TMLADActionState action = new TMLADActionState(100 * i, 500, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(action, 100 * i, 500, false, true); action.setValue(chan.getName().split("__")[1] + "Allowed=rule"); //Connect choice and action TAttribute channelRule = new TAttribute(2, chan.getName().split("__")[1] + "Allowed", "true", 4); firewallComp.getAttributeList().add(channelRule); tmp = new TGConnectorTMLAD(action.getX(), action.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adChoiceRules.getTGConnectingPointAtIndex(i), action.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, action.getX(), action.getY(), false, true); adChoiceRules.setGuard("[channelIndex==" + channelIndexMap.get(chan.getName().split("__")[1]) + "]", i - 1); //add stop state adStop = new TMLADStopState(100 * i, 600, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(adStop, 100 * i, 600, false, true); //Connect action and stop state tmp = new TGConnectorTMLAD(action.getX(), action.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, action.getTGConnectingPointAtIndex(1), adStop.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, action.getX(), action.getY(), false, true); i++; } for (TMLChannel chan : inChans.keySet()) { TMLChannel newChan = inChans.get(chan); TMLCChannelOutPort originPort = new TMLCChannelOutPort(0, 0, tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, null, tcp.tmlctdp); TMLCChannelOutPort destPort = new TMLCChannelOutPort(0, 0, tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, null, tcp.tmlctdp); for (TGComponent tg : tcp.tmlctdp.getComponentList()) { if (tg instanceof TMLCPrimitiveComponent) { if (tg.getValue().equals(newChan.getOriginTask().getName().split("__")[1])) { originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, tg, tcp.tmlctdp); originPort.commName = newChan.getName(); tcp.tmlctdp.addComponent(originPort, tg.getX(), tg.getY(), true, true); } else if (tg.getValue().equals(firewallNode.getName())) { destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, tg, tcp.tmlctdp); destPort.isOrigin = false; destPort.commName = newChan.getName(); tcp.tmlctdp.addComponent(destPort, tg.getX(), tg.getY(), true, true); } } } TMLCPortConnector conn = new TMLCPortConnector(0, 0, tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, null, tcp.tmlctdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>()); tcp.tmlctdp.addComponent(conn, 0, 0, false, true); originPort = new TMLCChannelOutPort(0, 0, tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, null, tcp.tmlctdp); destPort = new TMLCChannelOutPort(0, 0, tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, null, tcp.tmlctdp); TMLChannel wrChan = outChans.get(chan); for (TGComponent tg : tcp.tmlctdp.getComponentList()) { if (tg instanceof TMLCPrimitiveComponent) { if (tg.getValue().equals(firewallNode.getName())) { originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, tg, tcp.tmlctdp); originPort.commName = wrChan.getName(); tcp.tmlctdp.addComponent(originPort, tg.getX(), tg.getY(), true, true); } else if (tg.getValue().equals(wrChan.getDestinationTask().getName().split("__")[1])) { destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, tg, tcp.tmlctdp); destPort.isOrigin = false; destPort.commName = wrChan.getName(); tcp.tmlctdp.addComponent(destPort, tg.getX(), tg.getY(), true, true); } } } conn = new TMLCPortConnector(0, 0, tcp.tmlctdp.getMinX(), tcp.tmlctdp.getMaxX(), tcp.tmlctdp.getMinY(), tcp.tmlctdp.getMaxX(), true, null, tcp.tmlctdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>()); tcp.tmlctdp.addComponent(conn, 0, 0, false, true); i++; } int xpos = 700; int ypos = 100; i = 1; for (TMLChannel chan : inChans.keySet()) { if (i > 3) { break; } adChoice.setGuard("[index==" + channelIndexMap.get(chan.getName().split("__")[1]) + "]", i - 1); TMLChannel newChan = inChans.get(chan); adRC = new TMLADReadChannel(xpos, 450, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); adRC.setChannelName(newChan.getName()); adRC.setSamples("1"); tmp = new TGConnectorTMLAD(adRC.getX(), adRC.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adChoice.getTGConnectingPointAtIndex(i), adRC.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adRC.getX(), adRC.getY(), false, true); firewallADP.addComponent(adRC, xpos, 450, false, true); //Execute for latency value exec = new TMLADExecI(xpos, 500, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); exec.setDelayValue(Integer.toString(firewallNode.latency)); firewallADP.addComponent(exec, xpos, 500, false, true); tmp = new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adRC.getTGConnectingPointAtIndex(1), exec.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, exec.getX(), exec.getY(), false, true); adChoice2 = new TMLADChoice(xpos, 550, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(adChoice2, 550, 300, false, true); tmp = new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, exec.getTGConnectingPointAtIndex(1), adChoice2.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, exec.getX(), exec.getY(), false, true); TMLChannel wrChan = outChans.get(chan); adWC = new TMLADWriteChannel(xpos - 50, 600, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); adWC.setChannelName(wrChan.getName()); adWC.setSamples("1"); firewallADP.addComponent(adWC, xpos - 50, 600, false, true); tmp = new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adChoice2.getTGConnectingPointAtIndex(1), adWC.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, exec.getX(), exec.getY(), false, true); adStop = new TMLADStopState(xpos - 50, 650, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(adStop, xpos - 50, 650, false, true); tmp = new TGConnectorTMLAD(adStop.getX(), adStop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adWC.getTGConnectingPointAtIndex(1), adStop.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adStop.getX(), adStop.getY(), false, true); // } else { adStop2 = new TMLADStopState(xpos + 50, 650, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); firewallADP.addComponent(adStop2, xpos + 50, 650, false, true); tmp = new TGConnectorTMLAD(adStop.getX(), adStop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adChoice2.getTGConnectingPointAtIndex(2), adStop2.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adStop.getX(), adStop.getY(), false, true); // } xpos += 200; i++; } TMLStartState start = new TMLStartState("start", adStart); act.setFirst(start); map.getCorrespondanceList().addCor(start, adStart); System.out.println("MODIFIED " + modifiedTasks); //Replace channel operator with new firewallIn and firewallOut operators System.out.println("firewallchans " + firewallChans); for (TMLTask task : map.getTMLModeling().getTasks()) { //Get activity diagram TMLActivityDiagramPanel tad = tcp.getTMLActivityDiagramPanel(task.getName()); TGConnector fromStart = new TGConnectorTMLAD(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); List<TMLADWriteChannel> wrChans = new ArrayList<TMLADWriteChannel>(); List<TMLADReadChannel> rdChans = new ArrayList<TMLADReadChannel>(); for (TGComponent tg : tad.getComponentList()) { if (tg instanceof TMLADWriteChannel) { TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg; if (fromStart != null) { wrChans.add(writeChannel); } } if (tg instanceof TMLADReadChannel) { TMLADReadChannel readChannel = (TMLADReadChannel) tg; if (fromStart != null) { rdChans.add(readChannel); } } /* former HEAD //Get activity diagram TMLActivityDiagramPanel tad = tcp.getTMLActivityDiagramPanel(task.getName()); TGConnector fromStart = new TGConnectorTMLAD(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); List<TMLADWriteChannel> wrChans = new ArrayList<TMLADWriteChannel>(); List<TMLADReadChannel> rdChans = new ArrayList<TMLADReadChannel>(); for (TGComponent tg : tad.getComponentList()) { if (tg instanceof TMLADWriteChannel) { TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg; if (fromStart != null) { wrChans.add(writeChannel); } } if (tg instanceof TMLADReadChannel) { TMLADReadChannel readChannel = (TMLADReadChannel) tg; if (fromStart != null) { rdChans.add(readChannel); } } } //For each writeChannel, add request operator, rename channel for (TMLADWriteChannel wr: wrChans){ String chanName = wr.getChannelName(); xpos = wr.getX(); ypos = wr.getY(); fromStart = tad.findTGConnectorEndingAt(wr.getTGConnectingPointAtIndex(0)); //TGConnectingPoint point = fromStart.getTGConnectingPointP2(); ======= */ } //For each writeChannel, add request operator, rename channel for (TMLADWriteChannel wr : wrChans) { //Check if it goes through the firewall String chanName = wr.getChannelName(); if (firewallChans.contains(chanName)) { xpos = wr.getX(); ypos = wr.getY(); fromStart = tad.findTGConnectorEndingAt(wr.getTGConnectingPointAtIndex(0)); TGConnectingPoint point = fromStart.getTGConnectingPointP2(); //>>>>>>> labsoc_sec int yShift = 50; TMLADSendRequest sendreq = new TMLADSendRequest(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); sendreq.setRequestName("req" + firewallNode.getName()); if (channelIndexMap.containsKey(chanName)) { sendreq.setParam(0, Integer.toString(channelIndexMap.get(chanName))); } sendreq.makeValue(); tad.addComponent(sendreq, xpos, ypos, false, true); //Re-route connector to sendreq fromStart.setP2(sendreq.getTGConnectingPointAtIndex(0)); //Add connector between sendreq and writechannel fromStart = new TGConnectorTMLAD(wr.getX(), wr.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, sendreq.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>()); tad.addComponent(fromStart, xpos, ypos, false, true); wr.setChannelName(chanName + "_firewallIn"); wr.makeValue(); //Shift everything below sendreq down for (TGComponent tg : tad.getComponentList()) { if (tg.getY() >= ypos && tg != sendreq) { tg.setCd(tg.getX(), tg.getY() + yShift); } } } } //for each readchannel, rename channel for (TMLADReadChannel rd : rdChans) { //check if it goes through the firewall String chanName = rd.getChannelName(); if (firewallChans.contains(chanName)) { rd.setChannelName(chanName + "_firewallOut"); rd.makeValue(); } } } //Remove old channel ports } //Redo syntax checking GTMLModeling gtm = new GTMLModeling(newarch, true); map = gtm.translateToTMLMapping(); return map; } @SuppressWarnings("unchecked") public void setTMLMapping(TMLMapping tmap) { this.tmap = tmap; } public HashMap<String, HashSet<String>> getCPUTaskMap() { HashMap<String, HashSet<String>> cpuTaskMap = new HashMap<String, HashSet<String>>(); if (tmap == null) { return cpuTaskMap; } for (HwNode node : tmap.getArch().getCPUs()) { if (tmap.getMappedTasks(node).size() > 0) { cpuTaskMap.put(node.getName(), tmap.getMappedTasks(node)); } } return cpuTaskMap; } public void addHSM(MainGUI gui, Map<String, List<String>> selectedCpuTasks) { HSMGeneration hsm = new HSMGeneration(gui, selectedCpuTasks, tmap); hsm.startThread(); } @SuppressWarnings("unchecked") public boolean generateGraphicalMapping(TMLMapping map) { TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp; int arch = mgui.tabs.indexOf(tmlap); mgui.cloneRenameTab(arch, "Z3"); TMLArchiPanel newArch = (TMLArchiPanel) mgui.tabs.get(mgui.tabs.size() - 1); TMLArchiDiagramPanel panel = newArch.tmlap; if (panel == null) { return false; } panel.removeAllArtifacts(); List<HwExecutionNode> nodes = map.getNodes(); HwExecutionNode node; List<TMLTask> tasks = map.getMappedTasks(); TMLTask task; for (int i = 0; i < nodes.size(); i++) { node = nodes.get(i); task = tasks.get(i); if ((node != null) && (task != null)) { if (!panel.addTaskToNode(node.getName(), task.getName())) { TraceManager.addDev("Could not add " + task.getName() + " to " + node.getName()); return false; } else { TraceManager.addDev("Task " + task.getName() + " was added to " + node.getName()); } } } return true; } public TMLMapping<TGComponent> autoSecure(MainGUI gui, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth) { //TODO add more options // if (tmap == null) { return null; } TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp; int arch = gui.tabs.indexOf(tmlap); gui.cloneRenameTab(arch, "enc"); TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size() - 1); return autoSecure(gui, "enc", tmap, newarch, autoConf, autoWeakAuth, autoStrongAuth); } public TMLMapping<TGComponent> autoSecure(MainGUI gui, String name, TMLMapping<TGComponent> map, TMLArchiPanel newarch) { return autoSecure(gui, name, map, newarch, "100", "0", "100", true, false, false, new HashMap<String, java.util.List<String>>()); } public TMLMapping<TGComponent> autoSecure(MainGUI gui, String name, TMLMapping<TGComponent> map, TMLArchiPanel newarch, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth) { return autoSecure(gui, name, map, newarch, "100", "0", "100", autoConf, autoWeakAuth, autoStrongAuth, new HashMap<String, java.util.List<String>>()); } public TMLMapping<TGComponent> autoSecure(MainGUI gui, String encComp, String overhead, String decComp) { if (tmap == null) { return null; } TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp; int arch = gui.tabs.indexOf(tmlap); gui.cloneRenameTab(arch, "enc"); TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size() - 1); return autoSecure(gui, "enc", tmap, newarch, encComp, overhead, decComp, true, false, false, new HashMap<String, java.util.List<String>>()); } public TMLMapping<TGComponent> autoSecure(MainGUI gui, String encComp, String overhead, String decComp, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth, Map<String, List<String>> selectedCpuTasks) { if (tmap == null) { return null; } TURTLEPanel tmlap = tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp; int arch = gui.tabs.indexOf(tmlap); gui.cloneRenameTab(arch, "enc"); TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size() - 1); return autoSecure(gui, "enc", tmap, newarch, encComp, overhead, decComp, autoConf, autoWeakAuth, autoStrongAuth, selectedCpuTasks); } public TMLMapping<TGComponent> autoSecure(MainGUI gui, String name, TMLMapping<TGComponent> map, TMLArchiPanel newarch, String encComp, String overhead, String decComp) { return autoSecure(gui, name, tmap, newarch, encComp, overhead, decComp, true, false, false, new HashMap<String, java.util.List<String>>()); } public TMLMapping<TGComponent> autoSecure(MainGUI gui, String name, TMLMapping<TGComponent> map, TMLArchiPanel newarch, String encComp, String overhead, String decComp, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth, Map<String, List<String>> selectedCpuTasks) { //move to another thread SecurityGeneration secgen = new SecurityGeneration(gui, name, map, newarch, encComp, overhead, decComp, autoConf, autoWeakAuth, autoStrongAuth, selectedCpuTasks); tmap = null; tmap = secgen.startThread(); GTMLModeling gtm = new GTMLModeling(newarch, true); tmap = gtm.translateToTMLMapping(); listE = gtm.getCorrespondanceTable(); if (tmap != null) { autoMapKeys(); } return tmap; } public boolean securePath(TMLMapping<TGComponent> map, TMLTask t1, TMLTask t2) { //Check if a path between two tasks is secure boolean secure = true; List<HwLink> links = map.getTMLArchitecture().getHwLinks(); HwExecutionNode node1 = map.getHwNodeOf(t1); HwExecutionNode node2 = map.getHwNodeOf(t2); List<HwNode> found = new ArrayList<HwNode>(); List<HwNode> done = new ArrayList<HwNode>(); List<HwNode> path = new ArrayList<HwNode>(); Map<HwNode, List<HwNode>> pathMap = new HashMap<HwNode, List<HwNode>>(); TraceManager.addDev("Links " + links); if (node1 == node2) { return true; } for (HwLink link : links) { if (link.hwnode == node1) { found.add(link.bus); List<HwNode> tmp = new ArrayList<HwNode>(); tmp.add(link.bus); pathMap.put(link.bus, tmp); } } outerloop: while (found.size() > 0) { HwNode curr = found.remove(0); for (HwLink link : links) { if (curr == link.bus) { if (link.hwnode == node2) { path = pathMap.get(curr); break outerloop; } if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge) { found.add(link.hwnode); List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr)); tmp.add(link.hwnode); pathMap.put(link.hwnode, tmp); } } else if (curr == link.hwnode) { if (!done.contains(link.bus) && !found.contains(link.bus)) { found.add(link.bus); List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr)); tmp.add(link.bus); pathMap.put(link.bus, tmp); } } } done.add(curr); } if (path.size() == 0) { return true; } else { HwBus bus; //Check if all buses and bridges are private for (HwNode n : path) { if (n instanceof HwBus) { bus = (HwBus) n; if (bus.privacy == 0) { return false; } } } } return secure; } public void autoMapKeys() { if (tmap == null) { return; } List<HwLink> links = tmap.getArch().getHwLinks(); //Find all Security Patterns, if they don't have an associated memory at encrypt and decrypt, map them TMLModeling<TGComponent> tmlm = tmap.getTMLModeling(); if (tmlm.securityTaskMap == null) { return; } // for (SecurityPattern sp : tmlm.securityTaskMap.keySet()) { if (sp.type.contains("Symmetric Encryption") || sp.type.equals("MAC")) { for (TMLTask t : tmlm.securityTaskMap.get(sp)) { ArrayList<HwMemory> mems = new ArrayList<HwMemory>(); boolean keyFound = false; HwExecutionNode node1 = tmap.getHwNodeOf(t); //Try to find memory using only private buses List<HwNode> toVisit = new ArrayList<HwNode>(); // List<HwNode> toMemory = new ArrayList<HwNode>(); List<HwNode> complete = new ArrayList<HwNode>(); for (HwLink link : links) { if (link.hwnode == node1) { if (link.bus.privacy == 1) { toVisit.add(link.bus); } } } memloop: while (toVisit.size() > 0) { HwNode curr = toVisit.remove(0); for (HwLink link : links) { if (curr == link.bus) { if (link.hwnode instanceof HwMemory) { mems.add((HwMemory) link.hwnode); TMLArchiMemoryNode memNode = (TMLArchiMemoryNode) listE.getTG(link.hwnode); List<TMLArchiKey> keys = memNode.getKeyList(); String patternString = ""; for (TMLArchiKey key : keys) { if (key.getValue().equals(sp.name)) { keyFound = true; break memloop; } patternString += key.getValue(); patternString += " "; } TraceManager.addDev("Memory " + link.hwnode.getName() + " has currently mapped: " + patternString); } if (!complete.contains(link.hwnode) && !toVisit.contains(link.hwnode) && link.hwnode instanceof HwBridge) { toVisit.add(link.hwnode); } } else if (curr == link.hwnode) { if (!complete.contains(link.bus) && !toVisit.contains(link.bus)) { toVisit.add(link.bus); } } } complete.add(curr); } if (!keyFound) { if (mems.size() > 0) { TMLArchiMemoryNode memNode = (TMLArchiMemoryNode) listE.getTG(mems.get(0)); TMLArchiKey key = new TMLArchiKey(memNode.x, memNode.y, memNode.tdp.getMinX(), memNode.tdp.getMaxX(), memNode.tdp.getMinY(), memNode.tdp.getMaxY(), false, memNode, memNode.tdp); key.setReferenceKey(sp.name); key.makeFullValue(); TraceManager.addDev("Adding " + sp.name + " key to " + memNode.getName()); TraceManager.addDev("Adding " + sp + " key to " + memNode.getName()); memNode.tdp.addComponent(key, memNode.x, memNode.y, true, true); memNode.tdp.repaint(); } else { // // mgui.issueError("Cannot map key in memory for " + sp.name + " on task " + t.getName(), "Key Mapping Error"); UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Cannot find secure memory to map key " + sp.name + " for task " + t.getName()); ce.setTDiagramPanel(tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel()); ce.setTGComponent(null); checkingErrors.add(ce); } } } } else if (sp.type.contains("Asymmetric Encryption")) { for (TMLTask t : tmlm.securityTaskMap.get(sp)) { ArrayList<HwMemory> mems = new ArrayList<HwMemory>(); boolean keyFound = false; HwExecutionNode node1 = tmap.getHwNodeOf(t); //Try to find memory using only private buses List<HwNode> toVisit = new ArrayList<HwNode>(); // List<HwNode> toMemory = new ArrayList<HwNode>(); List<HwNode> complete = new ArrayList<HwNode>(); for (HwLink link : links) { if (link.hwnode == node1) { if (link.bus.privacy == 1) { toVisit.add(link.bus); } } } memloop: while (toVisit.size() > 0) { HwNode curr = toVisit.remove(0); for (HwLink link : links) { if (curr == link.bus) { if (link.hwnode instanceof HwMemory) { mems.add((HwMemory) link.hwnode); TMLArchiMemoryNode memNode = (TMLArchiMemoryNode) listE.getTG(link.hwnode); List<TMLArchiKey> keys = memNode.getKeyList(); String patternString = ""; for (TMLArchiKey key : keys) { if (key.getValue().equals(sp.name)) { keyFound = true; break memloop; } patternString += key.getValue(); patternString += " "; } TraceManager.addDev("Memory " + link.hwnode.getName() + " has currently mapped: " + patternString); } if (!complete.contains(link.hwnode) && !toVisit.contains(link.hwnode) && link.hwnode instanceof HwBridge) { toVisit.add(link.hwnode); } } else if (curr == link.hwnode) { if (!complete.contains(link.bus) && !toVisit.contains(link.bus)) { toVisit.add(link.bus); } } } complete.add(curr); } if (!keyFound) { if (mems.size() > 0) { TMLArchiMemoryNode memNode = (TMLArchiMemoryNode) listE.getTG(mems.get(0)); TMLArchiKey key = new TMLArchiKey(memNode.x, memNode.y, memNode.tdp.getMinX(), memNode.tdp.getMaxX(), memNode.tdp.getMinY(), memNode.tdp.getMaxY(), false, memNode, memNode.tdp); key.setReferenceKey(sp.name); key.makeFullValue(); TraceManager.addDev("Adding " + sp.name + " key to " + memNode.getName()); TraceManager.addDev("Adding " + sp + " key to " + memNode.getName()); memNode.tdp.addComponent(key, memNode.x, memNode.y, true, true); memNode.tdp.repaint(); } else { UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Key " + sp.name + " on task " + t.getName() + " cannot be mapped since no memory can be accessed surely from this task."); ce.setTDiagramPanel(tmap.getCorrespondanceList().getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel()); ce.setTGComponent(null); checkingErrors.add(ce); } } } } } TraceManager.addDev("Mapping finished"); } public boolean generateFullAvatarFromTML() { /*if (tmlm != null && tmap == null) { tmap = tmlm.getDefaultMapping(); }*/ FullTML2Avatar t2a = new FullTML2Avatar(tmlm); TraceManager.addDev("Avatar spec generation"); avatarspec = t2a.generateAvatarSpec("1"); TraceManager.addDev("Avatar spec generated"); AvatarSyntaxChecker asc = new AvatarSyntaxChecker(); if (mgui.isExperimentalOn()) { //TraceManager.addDev("Avatar spec:" + avatarspec.toString()); //mgui.drawAvatarSpecification(avatarspec); //TraceManager.addDev("Avatar spec:" + avatarspec.toString()); //AvatarSpecification av2 = avatarspec.advancedClone(); //mgui.drawAvatarSpecification(av2); } return true; } public void generateAvatarFromTML(boolean mc, boolean security) { TraceManager.addDev("Generating Avatar from TML"); if (tmlm != null && tmap == null) { tmap = tmlm.getDefaultMapping(); } if (avatarspec != null) { return; } else if (tmap != null) { t2a = new TML2Avatar(tmap, mc, security); TraceManager.addDev("Avatar spec generation"); avatarspec = t2a.generateAvatarSpec("1"); TraceManager.addDev("Avatar spec generation: done"); if (mgui.isExperimentalOn()) { mgui.drawAvatarSpecification(avatarspec); } } } public boolean generateRandomMapping(String[] tasks, String architectureName, String mappingName) { TraceManager.addDev("Getting panel"); // Get the architecture panel TURTLEPanel tp = mgui.getTURTLEPanel(architectureName); if (tp == null) { return false; } // Clone this panel int indexArch = mgui.getIndexOfPanel(tp); if (indexArch < 0) { return false; } mgui.cloneRenameTab(indexArch, mappingName); TraceManager.addDev("Select last panel"); // Select the last Panel TURTLEPanel newTP = mgui.getTabs().get(mgui.getTabs().size() - 1); if (newTP == null) { TraceManager.addDev("Null selected panel"); } if (!(newTP instanceof TMLArchiPanel)) { return false; } TraceManager.addDev("add Tasks"); TMLArchiPanel mapping = (TMLArchiPanel) newTP; return mapping.addRandomTasks(tasks); } public boolean generateProVerifFromAVATAR(String _path, int _stateReachability, boolean _typed, boolean allowPrivateChannelDuplication, String loopLimit) { // if (avatarspec != null) { //use avspec } else if (tmap != null) { t2a = new TML2Avatar(tmap, false, true); avatarspec = t2a.generateAvatarSpec(loopLimit); if (mgui.isExperimentalOn()) { drawPanel(avatarspec, mgui.getFirstAvatarDesignPanelFound()); } } else if (tmlm != null) { //Generate default mapping tmap = tmlm.getDefaultMapping(); t2a = new TML2Avatar(tmap, false, true); avatarspec = t2a.generateAvatarSpec(loopLimit); if (mgui.isExperimentalOn()) { mgui.drawAvatarSpecification(avatarspec); /*DateFormat dateFormat = new SimpleDateFormat("_yyyyMMdd_HHmmss"); Date date = new Date(); String dateAndTime = dateFormat.format(date); String tabName = "GeneratedDesign_" + dateAndTime; mgui.addAvatarDesignPanel(tabName, -1); TURTLEPanel tp = mgui.getTURTLEPanel(tabName); if (tp instanceof AvatarDesignPanel) { AvatarDesignPanel adp = (AvatarDesignPanel)tp; if (adp != null) { drawPanel(avatarspec, adp); } }*/ } } else if (avatarspec == null) { return false; } avatar2proverif = new AVATAR2ProVerif(avatarspec); //tml2uppaal.setChoiceDeterministic(choices); //tml2uppaal.setSizeInfiniteFIFO(_size); proverif = avatar2proverif.generateProVerif(true, true, _stateReachability, _typed, allowPrivateChannelDuplication); // System.out.println(proverif.getStringSpec()); warnings = avatar2proverif.getWarnings(); languageID = PROVERIF; mgui.setMode(MainGUI.EDIT_PROVERIF_OK); //uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug); try { if (avatar2proverif.saveInFile(_path)) { TraceManager.addDev("Specification generated in " + _path); return true; } return false; } catch (FileException fe) { TraceManager.addError("Exception: " + fe.getMessage()); return false; } } public TPN generateTPNFromAvatar() { avatar2tpn = new AVATAR2TPN(avatarspec); //tml2uppaal.setChoiceDeterministic(choices); //tml2uppaal.setSizeInfiniteFIFO(_size); tpnFromAvatar = avatar2tpn.generateTPN(true, true); languageID = TPN; return tpnFromAvatar; } /*IntMatrix im = tpnFromAvatar.getIncidenceMatrix(); TraceManager.addDev("Farkas computing on " + im.toString()); im.Farkas(); TraceManager.addDev("Farkas done:" + im.toString()); languageID = TPN; //uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug); return true; /*try { avatar2tpn.saveInFile(_path); TraceManager.addDev("Specification generated in " + _path); return true; } catch (FileException fe) { TraceManager.addError("Exception: " + fe.getMessage()); return false; }*/ public ArrayList<TGComponentAndUPPAALQuery> getUPPAALQueries() { return getUPPAALQueries(mgui.getCurrentTURTLEPanel()); } public ArrayList<TGComponentAndUPPAALQuery> getUPPAALQueries(TURTLEPanel tp) { return getUPPAALQueries(tp, false); } public ArrayList<TGComponentAndUPPAALQuery> getUPPAALQueries(TURTLEPanel tp, boolean considerAll) { TraceManager.addDev("Searching for queries on " + mgui.getTabName(tp)); ArrayList<TGComponent> list = new ArrayList<TGComponent>(); ArrayList<TClass> tclasses; if (considerAll) { tp.getAllCheckableTGComponent(list); TraceManager.addDev("Nb of checkable elements:" + list.size()); } else { tp.getAllCheckedTGComponent(list); } TGComponentAndUPPAALQuery tmpQ; ArrayList<TGComponentAndUPPAALQuery> listQ = new ArrayList<TGComponentAndUPPAALQuery>(); if (tp instanceof DesignPanel) { ArrayList<ADComponent> listAD = listE.getADComponentCorrespondance(list); //TraceManager.addDev("List size:" + listAD.size()); if (listAD == null) { return null; } TClass t; String s; for (ADComponent adc : listAD) { if (adc != null) { t = tm.findTClass(adc); //TraceManager.addDev("Found class:" + t.getName()); if (t != null) { tclasses = new ArrayList<TClass>(); tclasses.add(t); // For handling tobjects tm.addAllTClassesEndingWith(tclasses, "_" + t.getName()); for (TClass tc : tclasses) { //TraceManager.addDev("Analyzing class:" + tc.getName()); s = uppaalTIFTable.getRQuery(tc, adc); if (s != null) { //TraceManager.addDev("Adding query:" + s); tmpQ = new TGComponentAndUPPAALQuery(null, s + "$" + adc); listQ.add(tmpQ); } } } } } } else if ((tp instanceof TMLComponentDesignPanel) || (tp instanceof TMLDesignPanel)) { //TraceManager.addDev("uppaalTMLTable"); ArrayList<TMLActivityElement> listAE = listE.getTMLActivityElementCorrespondance(list); if (listAE == null) { return null; } TMLTask task; String s; for (TMLActivityElement elt : listAE) { if (elt != null) { task = tmlm.findTMLTask(elt); if (task != null) { s = uppaalTMLTable.getRQuery(task, elt); if (s != null) { //TraceManager.addDev("Adding query:" + s); // Object ref; if (elt.getReferenceObject() instanceof TGComponent) { tmpQ = new TGComponentAndUPPAALQuery((TGComponent) (elt.getReferenceObject()), s + "$" + elt); } else { tmpQ = new TGComponentAndUPPAALQuery(null, s + "$" + elt); } listQ.add(tmpQ); } } } } } else if ((avatar2uppaal != null) && (tp instanceof AvatarDesignPanel)) { TraceManager.addDev("Making UPPAAL queries"); for (TGComponent tgc : list) { TraceManager.addDev("Making UPPAAL query for " + tgc); String s = avatar2uppaal.getUPPAALIdentification(tgc); TraceManager.addDev("Query: " + s); if ((s != null) && (s.length() > 0)) { AvatarBlock block = avatar2uppaal.getBlockFromReferenceObject(tgc); listQ.add(new TGComponentAndUPPAALQuery(tgc, s + "$" + block.getName() + "." + tgc)); } else { TraceManager.addDev("Could not make query for " + tgc); } } } else if ((avatar2uppaal != null) && (tp instanceof AttackTreePanel)) { TraceManager.addDev("Making UPPAAL queries"); for (TGComponent tgc : list) { TraceManager.addDev("Making UPPAAL query for " + tgc); String s = avatar2uppaal.getUPPAALIdentification(tgc); TraceManager.addDev("Query: " + s); if ((s != null) && (s.length() > 0)) { AvatarBlock block = avatar2uppaal.getBlockFromReferenceObject(tgc); listQ.add(new TGComponentAndUPPAALQuery(tgc, s + "$" + block.getName() + "." + tgc)); } else { TraceManager.addDev("Could not make query for " + tgc); } } } else if ((avatar2uppaal != null) && (tp instanceof FaultTreePanel)) { TraceManager.addDev("Making UPPAAL queries"); for (TGComponent tgc : list) { TraceManager.addDev("Making UPPAAL query for " + tgc); String s = avatar2uppaal.getUPPAALIdentification(tgc); TraceManager.addDev("Query: " + s); if ((s != null) && (s.length() > 0)) { AvatarBlock block = avatar2uppaal.getBlockFromReferenceObject(tgc); listQ.add(new TGComponentAndUPPAALQuery(tgc, s + "$" + block.getName() + "." + tgc)); } else { TraceManager.addDev("Could not make query for " + tgc); } } } return listQ; } public List<String> generateLOTOSAUT(String path) { TML2AUTviaLOTOS tml2aut = new TML2AUTviaLOTOS(tmlm, tm); tml2aut.generateLOTOS(true); return tml2aut.getSpecs(); /*try { return tml2aut.saveInFiles(path); } catch (FileException fe) { return null; }*/ } public void generateSystemC() { String path = ConfigurationTTool.SystemCCodeDirectory; String list = FileUtils.deleteFiles(path, ".cpp"); if (list.length() == 0) { TraceManager.addDev("No cpp files were deleted\n"); } else { TraceManager.addDev("Files deleted:\n" + list + "\n"); } list = FileUtils.deleteFiles(path, ".x"); if (list.length() == 0) { TraceManager.addDev("No x files were deleted\n"); } else { TraceManager.addDev("Files deleted:\n" + list + "\n"); } TML2SystemC tml2systc = new TML2SystemC(tmlm); tml2systc.generateSystemC(true); //tml2systc.print(); try { tml2systc.saveFile(path, "appmodel"); } catch (FileException fe) { TraceManager.addError("File could not be saved (SystemC)"); } } public void saveSIM(File f) { if ((sim != null) && (f != null)) { saveInFile(f, sim); } } public void saveDTA(File f) { if ((dta != null) && (f != null)) { saveInFile(f, dta); } } public void saveDTADOT(File f) { if ((dtadot != null) && (f != null)) { saveInFile(f, dtadot); } } public void saveRG(File f) { if ((rg != null) && (f != null)) { saveInFile(f, rg); } } public void saveTLSA(File f) { if ((rg != null) && (f != null)) { saveInFile(f, tlsa); } } public void saveRGAut(File f) { if ((rgaut != null) && (f != null)) { saveInFile(f, rgaut); } } public void saveRGDOT(File f) { if ((rgdot != null) && (f != null)) { saveInFile(f, rgdot); } } public void saveTLSADOT(File f) { if ((rgdot != null) && (f != null)) { saveInFile(f, tlsadot); } } public void saveRGAutDOT(File f) { if ((rgautdot != null) && (f != null)) { saveInFile(f, rgautdot); } } public void saveRGAutProj(File f) { if ((rgautproj != null) && (f != null)) { saveInFile(f, rgautproj); } } public void saveRGAutProjDOT(File f) { if ((rgautprojdot != null) && (f != null)) { saveInFile(f, rgautprojdot); } } public void modifyMinimizedGraph() { /*AUTMappingGraph graph = new AUTMappingGraph(); TraceManager.addDev("Building graph"); graph.buildGraph(rgautproj); TraceManager.addDev("Renaming transitions"); graph.renameTransitions(); TraceManager.addDev("Merging transitions 23/4=" + (23/4) + "23%4=" + (23%4)); graph.mergeWriteTransitions(); graph.mergeReadTransitions(); graph.removeInternalTransitions(); TraceManager.addDev("Printing graph:\n" + graph.toAUTStringFormat()); TraceManager.addDev("Splitting transitions"); graph.splitTransitions(); modifiedaut = graph.toAUTStringFormat(); TraceManager.addDev("Printing graph:\n" + modifiedaut); TraceManager.addDev("Translation in DOT format"); // AUT 2 dot String fileName = "graph"; try { RshClient rshc = new RshClient(getHostAldebaran()); int id = rshc.getId(); fileName = FileUtils.addBeforeFileExtension(fileName, "_" + id); String data = rgautproj; rshc.sendFileData(fileName + ".aut", data); String cmd1 = getPathBcgio() + " -aldebaran " + fileName + ".aut" + " -graphviz " + fileName + ".dot"; data = processCmd(rshc, cmd1); data = rshc.getFileData(fileName + ".dot"); modifiedautdot = data; TraceManager.addDev("All done"); } catch (LauncherException le) { TraceManager.addDev("Error: conversion failed"); }*/ } protected String processCmd(RshClient rshc, String cmd) throws LauncherException { rshc.setCmd(cmd); String s = null; rshc.sendExecuteCommandRequest(); s = rshc.getDataFromProcess(); return s; } public void showSIM(int type) { if (sim != null) { JFrameSimulationTrace jfst = new JFrameSimulationTrace("Last simulation trace", sim, type); jfst.setIconImage(IconManager.img8); // jfst.setSize(900, 600); GraphicLib.centerOnParent(jfst, 900, 600); jfst.setVisible(true); } } public String showDTA() { if (dta != null) { return runDOTTY(dtadot); } return null; } public String showRG() { if (rg != null) { return runDOTTY(rgdot); } return null; } public String showTLSA() { if (rg != null) { return runDOTTY(tlsadot); } return null; } public String showRGAut() { if (rgaut != null) { return runDOTTY(rgautdot); } return null; } public String showRGDiplodocus() { //TraceManager.addDev("Show diplodocus graph located in " + ConfigurationTTool.GGraphPath + "/tree.dot"); RemoteExecutionThread ret = new RemoteExecutionThread(ConfigurationTTool.DOTTYHost, null, null, ConfigurationTTool.DOTTYPath + " " + SpecConfigTTool.GGraphPath + "/tree.dot"); ret.start(); return null; } public String showRGAutProj() { if (rgaut != null) { return runDOTTY(rgautprojdot); } return null; } public static String showGGraph(String ggraph) { if (ggraph != null) { return runDOTTY(ggraph); } return null; } public static String runDOTTY(String data) { String fileName = "graph" + graphId + ".dot"; graphId++; RemoteExecutionThread ret = new RemoteExecutionThread(ConfigurationTTool.DOTTYHost, fileName, data, ConfigurationTTool.DOTTYPath + " " + fileName); ret.start(); return null; } public boolean useDynamicStructure(String data) { int index1 = data.indexOf("behaviour"); if (index1 == -1) { return false; } data = data.substring(index1, data.length()); return (data.indexOf("Queue_nat") != -1); } public void saveInFile(File file, String s) { TraceManager.addDev("Saving in file " + file.getAbsolutePath() + " size of file=" + s.length()); //TraceManager.addDev("Length of s=" + s.length()); int index1 = 0, index2; int step = 1048576; int length = s.length(); //String sub; try { FileOutputStream fos = new FileOutputStream(file); while (index1 < length) { index2 = Math.min(index1 + step, length); fos.write(s.substring(index1, index2).getBytes()); index1 += step; } fos.close(); } catch (Exception e) { JOptionPane.showMessageDialog(mgui.frame, "Specification could not be saved " + e.getMessage(), "Lotos File Error", JOptionPane.INFORMATION_MESSAGE); TraceManager.addError("Specification could not be saved " + e.getMessage()); } /*try { FileOutputStream fos = new FileOutputStream(file); fos.write(s.getBytes()); fos.close(); } catch(Exception e) { JOptionPane.showMessageDialog(mgui.frame, "Specification could not be saved " + e.getMessage(), "Lotos File Error", JOptionPane.INFORMATION_MESSAGE); TraceManager.addDev("Specification could not be saved " + e.getMessage()); }*/ } public String getLastRTLOTOSSpecification() { return rtlotos; } public String getLastTextualDTA() { return dta; } public String getLastGraphicalDTA() { return dtadot; } public String getLastTextualRG() { return rg; } public String getLastGraphicalRG() { return rgdot; } public String getLastTextualTLSA() { return tlsa; } public String getLastGraphicalTLSA() { return tlsadot; } public String getLastTextualRGAUT() { return rgaut; } public String getLastGraphicalRGAUT() { return rgautdot; } public String getLastTextualRGAUTProj() { return rgautproj; } public String getLastGraphicalRGAUTProj() { return rgautprojdot; } public String getLastProVerifSpecification() { if (proverif == null) { return ""; } return proverif.getStringSpec(); } public int getNbRTLOTOS() { return nbRTLOTOS; } public String getLastTextualDesign() { if (tm == null) { return ""; } else { return tm.printToStringBuffer().toString(); } } public int getNbSuggestedDesign() { return nbSuggestedDesign; } // formal validation public void reinitSIM() { sim = null; mgui.setMode(MainGUI.SIM_KO); } public void reinitDTA() { dta = null; dtadot = null; mgui.setMode(MainGUI.DTADOT_KO); } public void reinitRG() { rg = null; rgdot = null; mgui.setMode(MainGUI.RGDOT_KO); } public void reinitRGAUT() { rgaut = null; rgautdot = null; mgui.setMode(MainGUI.RGAUTDOT_KO); mgui.setMode(MainGUI.RGAUT_KO); } public void reinitRGAUTPROJDOT() { rgautprojdot = null; mgui.setMode(MainGUI.RGAUTPROJDOT_KO); } public void setSIM(String data) { sim = data; mgui.setMode(MainGUI.SIM_OK); } public void setDTA(String data) { dta = data; } public void setDTADOT(String data) { dtadot = data; mgui.setMode(MainGUI.DTADOT_OK); } public void setRG(String data) { rg = data; mgui.setMode(MainGUI.RGDOT_OK); } public void setTLSA(String data) { tlsa = data; //mgui.setMode(MainGUI.TLSADOT_OK); } public void setTLSADOT(String data) { tlsadot = data; mgui.setMode(MainGUI.TLSADOT_OK); } public void setRGAut(String data) { rgaut = data; mgui.setMode(MainGUI.RGAUT_OK); } public String getLastRGAUT() { return rgaut; } public void setRGDOT(String data) { rgdot = data; mgui.setMode(MainGUI.RGDOT_OK); } public void setRGAutDOT(String data) { rgautdot = data; mgui.setMode(MainGUI.RGAUTDOT_OK); } public void setRGAUTPROJ(String data) { rgautproj = data; } public void setRGAUTPROJDOT(String data) { rgautprojdot = data; mgui.setMode(MainGUI.RGAUTPROJDOT_OK); } // Configuration public String getPathRTL() { return ConfigurationTTool.RTLPath; } public String getPathCaesar() { return ConfigurationTTool.CaesarPath; } public String getPathCaesarOpen() { return ConfigurationTTool.CaesarOpenPath; } public String getPathDTA2DOT() { return ConfigurationTTool.DTA2DOTPath; } public String getPathRGSTRAP() { return ConfigurationTTool.RGSTRAPPath; } public String getPathRG2TLSA() { return ConfigurationTTool.RG2TLSAPath; } public String getHost() { return ConfigurationTTool.RTLHost; } public static String getCaesarHost() { return ConfigurationTTool.AldebaranHost; } public static String getHostAldebaran() { return ConfigurationTTool.AldebaranHost; } public static String getPathAldebaran() { return ConfigurationTTool.AldebaranPath; } public static String getPathBcgio() { return ConfigurationTTool.BcgioPath; } public static String getPathBisimulator() { return ConfigurationTTool.BisimulatorPath; } public String getPathBcgmerge() { return ConfigurationTTool.BcgmergePath; } public String getPathBcgmin() { return ConfigurationTTool.BcgminPath; } public String getPathVerifyta() { return ConfigurationTTool.UPPAALVerifierPath; } public String getPathUPPAALVerifier() { return ConfigurationTTool.UPPAALVerifierPath; } public String getPathUPPAALFile() { return SpecConfigTTool.UPPAALCodeDirectory; } public String getUPPAALVerifierHost() { return ConfigurationTTool.UPPAALVerifierHost; } public TURTLEModeling getTURTLEModeling() { return tm; } public int getTURTLEModelingState() { return tmState; } public TMLModeling<TGComponent> getTMLModeling() { return tmlm; } public TML2Avatar getTML2Avatar() { return t2a; } public TMLMapping<TGComponent> getArtificialTMLMapping() { return artificialtmap; } public TMLMapping<TGComponent> getTMLMapping() { return tmap; } public UPPAALSpec getLastUPPAALSpecification() { return uppaal; } // TREE MANAGEMENT public void expandToErrors() { if ((mcvdt != null) && (checkingErrors != null) && (checkingErrors.size() > 0)) { SyntaxAnalysisErrorTree saet = mcvdt.getSyntaxAnalysisErrorTree(); if (saet != null) { Object[] obj = new Object[3]; obj[0] = mgui.dtree.getModel().getRoot(); obj[1] = mcvdt; obj[2] = saet; TraceManager.addDev("Expanding Path because of errors"); mgui.dtree.expandMyPath(new TreePath(obj)); mgui.dtree.forceUpdate(); } } } public void expandToWarnings() { if ((mcvdt != null) && (warnings != null) && (warnings.size() > 0)) { SyntaxAnalysisWarningTree sawt = mcvdt.getSyntaxAnalysisWarningTree(); if (sawt != null) { Object[] obj = new Object[3]; obj[0] = mgui.dtree.getModel().getRoot(); obj[1] = mcvdt; obj[2] = sawt; TraceManager.addDev("Expanding Path because of warnings"); mgui.dtree.expandMyPath(new TreePath(obj)); mgui.dtree.forceUpdate(); } } } public void expandToGraphs() { if ((gt != null) && (graphs != null) && (graphs.size() > 0)) { Object[] obj = new Object[2]; obj[0] = mgui.dtree.getModel().getRoot(); obj[1] = gt; TraceManager.addDev("Expanding Path because of graphs"); mgui.dtree.expandMyPath(new TreePath(obj)); mgui.dtree.forceUpdate(); } else { TraceManager.addDev("Pb to expand Graph tree"); } } public void expandToSimulationTraces() { if ((stt != null) && (simulationTraces != null) && (simulationTraces.size() > 0)) { Object[] obj = new Object[2]; obj[0] = mgui.dtree.getModel().getRoot(); obj[1] = stt; TraceManager.addDev("Expanding Path because of simulation traces"); mgui.dtree.expandMyPath(new TreePath(obj)); mgui.dtree.forceUpdate(); } else { TraceManager.addDev("Pb to expand ST tree"); } } public String toString() { return mgui.getTitle(); } public int getChildCount() { return panels.size() + 6; } public Object getChild(int index) { if (index < panels.size()) { return panels.elementAt(index); } else if (index == panels.size()) { return mcvdt; } else if (index == (panels.size() + 1)) { return stt; } else if (index == (panels.size() + 2)) { return gt; } else if (index == (panels.size() + 3)) { return idt; } else if (index == (panels.size() + 4)) { return st; } else { return ht; } } public int getIndexOfChild(Object child) { int index = panels.indexOf(child); if (index > -1) { return index; } if (child == mcvdt) { return panels.size(); } if (child == stt) { return panels.size() + 1; } if (child == gt) { return panels.size() + 2; } if (child == idt) { return panels.size() + 3; } if (child == ht) { return panels.size() + 4; } return panels.size() + 5; } // Projection management public MasterGateManager getNewMasterGateManager() { return new MasterGateManager(tm); } // Assume the inputData is in AUT format: generated by RTL or CADP public String performProjection(String inputData, LinkedList<TClassAndGateDS> gates) { StringBuffer result = new StringBuffer(""); StringReader sr = new StringReader(inputData); BufferedReader br = new BufferedReader(sr); String s; String actionName, actionName1; int index, index1, index2; MasterGateManager mgm = new MasterGateManager(tm, 1); // Gate g; GroupOfGates gog; Hashtable<String, GroupOfGates> hashtable = new Hashtable<String, GroupOfGates>(); // int cpt = 0; //TraceManager.addDev("input data=" + inputData); // Fill Hashtable // int j; for (TClassAndGateDS tag : gates) { //TraceManager.addDev("TClass:" + tag.getTClassName() + " Gate:" + tag.getGateName()); //actionName = tag.getGateName(); //g = mgm.getGate(tag.getTClassName(), actionName); //TraceManager.addDev("actionName = " + actionName + " gateName = " + g.getName()); //if (g != null) { //gog = mgm.getGroupOfGatesByGate(g); gog = mgm.groupOf(tag.getTClassName(), tag.getGateName()); if (gog != null) { //TraceManager.addDev("Found a gog: >" + gog.getMasterGateName() + "<"); hashtable.put(gog.getMasterGateName().getName(), gog); /*for(j=0;j<gog.size();j++) { g = gog.getGateAt(j); TraceManager.addDev("Putting: " + g.getName()); hashtable.put(g.getName(), g); }*/ } //} } try { while ((s = br.readLine()) != null) { /*if (cpt % 10000 == 0) { TraceManager.addDev("cpt=" + cpt); }*/ // cpt ++; if (s.startsWith("des")) { result.append(s + "\n"); } else if (s.startsWith("(")) { index = s.indexOf("\"t\""); if (index > 0) { // temporal action // replace t with i s = s.replaceAll("\"t\"", "i"); result.append(s + "\n"); } else { //exit action? index = s.indexOf("\"exit\""); if (index > 0) { // exit action // replace t with i s = s.replaceAll("\"exit\"", "i"); result.append(s + "\n"); } else { // regular action // find the name of this action index1 = s.indexOf("i("); index2 = s.indexOf(")"); actionName = s.substring(index1 + 2, index2); index = actionName.indexOf("<"); if (index < 0) { actionName1 = actionName; } else { actionName1 = actionName.substring(0, index); } TraceManager.addDev("Action = >" + actionName1 + "<"); gog = hashtable.get(actionName1); if (gog == null) { TraceManager.addDev("Not in hash"); result.append(makeIAction(s) + "\n"); } else { TraceManager.addDev("In hash"); result.append(makeAction(s, actionName) + "\n"); } // action to ignored or to project ? /*g = mgm.getGate(actionName1); if (g == null) { //TraceManager.addDev("null1"); result.append(makeIAction(s) + "\n"); } else { gog = mgm.getGroupOfGatesByGate(g); if (gog == null) { //TraceManager.addDev("null2"); result.append(makeIAction(s) + "\n"); } else { if (!belongTo(gog, gates)) { // Check if directly a master Gate! // A completer ... //TraceManager.addDev("null3"); result.append(makeIAction(s) + "\n"); } else { //TraceManager.addDev("action added: " + actionName); result.append(makeAction(s, actionName) + "\n"); } } }*/ } } } } } catch (Exception e) { TraceManager.addError("Exception during projection" + e.getMessage()); return null; } return new String(result); } // Assume the inputData is in AUT format and has been generated by CADP // Note: might not work because of case sensitive problem... public String convertCADP_AUT_to_RTL_AUT(String inputData, int max) { StringBuffer result = new StringBuffer(""); StringReader sr = new StringReader(inputData); BufferedReader br = new BufferedReader(sr); String s, s1; String actionName; int index1, index2, index3, index4; Gate g; String g0, g1, g2; int cpt, transi = 0; MasterGateManager mgm = new MasterGateManager(tm, 1); Map<String, Gate> ht = mgm.getGatesUpperCaseHashTable(); warnings = new LinkedList<CheckingError>(); //TraceManager.addDev("input data=" + inputData); // int cpt1 = 0; try { while ((s = br.readLine()) != null) { // cpt1 ++; //if (cpt1 % 100000 == 0) { //TraceManager.addDev("=" + cpt1 + " / " + transi); //} if (s.charAt(0) == '(') { index1 = s.indexOf(","); if ((index1 > -1) && ((index1 + 1) < s.length())) { g1 = s.substring(0, index1 + 1); s = s.substring(index1 + 1, s.length()); //TraceManager.addDev("g1=" + g1 + " s=" + s); index2 = s.indexOf(","); if ((index2 > -1) && ((index2 + 1) < s.length())) { g2 = s.substring(index2, s.length()); s = s.substring(0, index2); s = s.trim(); //TraceManager.addDev("g2=" + g2 + " s=" + s); // Get action id // Most common case: no data index3 = s.indexOf('"'); if (index3 == -1) { // no data actionName = s; g0 = ""; } else { // Extract action name actionName = s.substring(index3 + 1, s.indexOf('!')).trim(); // Format data g0 = "<"; cpt = 0; while ((index4 = s.indexOf('!')) > -1) { s = s.substring(index4 + 1, s.length()); if (cpt > 0) { g0 += ","; } cpt++; index4 = s.indexOf('!'); if (index4 > -1) { g0 += s.substring(0, index4); } else { g0 += s.substring(0, s.indexOf('"')).trim(); } } g0 += ">"; } // Working on action name! //g = mgm.getGateLowerCase(actionName); g = ht.get(actionName); if (g != null) { //actionName1 = actionName; actionName = g.getName(); //TraceManager.addDev("actionName = " + g.getName()); /*if (mgm.nbOfPossibleGatesLowerCase(actionName1) > 1) { CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "Action " + actionName1 + " has several possible candidates ; " + actionName + " has been chosen"); warnings.add(ce); }*/ } else { TraceManager.addDev("actionName is not in hashtable: ->" + actionName + "<- length=" + actionName.length()); } // Store result result.append(g1 + "\"i(" + actionName + g0 + ")\"" + g2 + "\n"); } } } else if (s.startsWith("des")) { index1 = s.indexOf(","); s1 = s.substring(index1 + 1, s.length()); index1 = s1.indexOf(","); s1 = s1.substring(0, index1).trim(); //TraceManager.addDev("nb of transitions=" + s); transi = Integer.decode(s1).intValue(); if (transi > max) { return null; } result.append(s + "\n"); } } } catch (Exception e) { TraceManager.addError("Exception convert0" + e.getMessage()); return null; } return new String(result); } public boolean belongTo(GroupOfGates gog, Vector<TClassAndGateDS> gates) { int i, j; TClassAndGateDS tcg; String nameTClass, nameGate; for (i = 0; i < gog.size(); i++) { nameTClass = gog.getTClassAt(i).getName(); nameGate = gog.getGateAt(i).getName(); for (j = 0; j < gates.size(); j++) { tcg = gates.elementAt(j); if ((tcg.getTClassName().compareTo(nameTClass) == 0) && (tcg.getGateName().compareTo(nameGate) == 0)) { //TraceManager.addDev("Projected gate"); return true; } } } return false; } public String makeIAction(String s) { int index1, index2; index1 = s.indexOf("i("); index2 = s.indexOf(")"); return s.substring(0, index1 - 1) + "i" + s.substring(index2 + 2, s.length()); } public String makeAction(String s, String actionName) { int index1, index2; index1 = s.indexOf("i("); index2 = s.indexOf(")"); return s.substring(0, index1) + actionName + s.substring(index2 + 1, s.length()); } public void enableUndo(boolean b) { undoRunning = !b; } public boolean isUndoEnable() { return !undoRunning; } // UNDO MANAGEMENT // This function is not be performed when executing an undo // if variable undoRunnin has been set to true public void saveOperation(Point p) { if (undoRunning) { return; } //TraceManager.addDev("Save operation"); String s = makeXMLFromTurtleModeling(-1); if ((pointerOperation > -1) && (pointerOperation < savedOperations.size() - 1)) { // some save operations must be erased for (int i = pointerOperation + 1; i < savedOperations.size(); i++) { savedOperations.removeElementAt(i); savedPanels.removeElementAt(i); i--; } } // save actions on tab int size = savedPanels.size(); if (size > 0) { Point p1 = savedPanels.elementAt(size - 1); // panels are saved under the form of a point -> x = analysis/design, y = panel if (p == null) p = p1; /*if ((p1.x != p.x) || (p1.y != p.y)){ savedOperations.add(savedOperations.elementAt(size - 1)); savedPanels.add(p); if (savedOperations.size() > nbMaxSavedOperations) { savedOperations.removeElementAt(0); savedPanels.removeElementAt(0); } }*/ } savedOperations.add(s); savedPanels.add(p); if (savedOperations.size() > nbMaxSavedOperations) { savedOperations.removeElementAt(0); savedPanels.removeElementAt(0); } pointerOperation = savedOperations.size() - 1; //TraceManager.addDev("Setting pointer to " + pointerOperation); selectBackwardMode(); } public void backward() { undoRunning = true; TraceManager.addDev("Nb Of saved operations:" + savedOperations.size() + " pointer=" + pointerOperation); if ((pointerOperation < 1) || (savedOperations.size() < 2)) { TraceManager.addDev("Undo not possible"); undoRunning = false; return; } removeAllComponents(); mgui.reinitMainTabbedPane(); // Issue #42: the selected tabs should be memorized before decrementing the pointer final Point prevSelectedTabs = savedPanels.elementAt(pointerOperation); try { pointerOperation--; TraceManager.addDev("Decrementing pointer =" + pointerOperation); loadModelingFromXML(savedOperations.elementAt(pointerOperation)); } catch (Exception e) { TraceManager.addError("Exception in backward: " + e.getMessage()); } TraceManager.addDev("Selecting tab"); // Issue #42: //Point p = savedPanels.elementAt(pointerOperation); if (prevSelectedTabs != null) { TraceManager.addDev("Selecting tab panel=" + prevSelectedTabs.getX() + " diagram=" + prevSelectedTabs.getY()); TDiagramPanel tdp = mgui.selectTab(prevSelectedTabs); tdp.mode = TDiagramPanel.NORMAL; tdp.setDraw(true); tdp.repaint(); } TraceManager.addDev("Selecting backward mode"); selectBackwardMode(); undoRunning = false; } public void selectBackwardMode() { if (pointerOperation < 0) { mgui.setMode(MainGUI.NO_BACKWARD); mgui.setMode(MainGUI.NO_FORWARD); } else { // forward if (pointerOperation < savedOperations.size() - 1) { mgui.setMode(MainGUI.FORWARD); } else { mgui.setMode(MainGUI.NO_FORWARD); } // backward if (pointerOperation > 0) { mgui.setMode(MainGUI.BACKWARD); } else { mgui.setMode(MainGUI.NO_BACKWARD); } } } public void forward() { if ((pointerOperation < 0) || (pointerOperation > savedOperations.size() - 2)) { return; } undoRunning = true; removeAllComponents(); mgui.reinitMainTabbedPane(); // Issue #42: the selected tabs should be memorized before incrementing the pointer final Point prevSelectedTabs = savedPanels.elementAt(pointerOperation); try { pointerOperation++; loadModelingFromXML(savedOperations.elementAt(pointerOperation)); } catch (Exception e) { TraceManager.addError("Exception in forward: " + e.getMessage()); } //Point prevSelectedTabs = savedPanels.elementAt(pointerOperation); if (prevSelectedTabs != null) { TDiagramPanel tdp = mgui.selectTab(prevSelectedTabs); tdp.mode = TDiagramPanel.NORMAL; tdp.setDraw(true); tdp.repaint(); } selectBackwardMode(); undoRunning = false; } // BUILDING A TURTLE MODELING AND CHECKING IT public boolean checkTURTLEModeling(List<TClassInterface> tclasses, DesignPanel dp, boolean overideSyntaxChecking) { // Builds a TURTLE modeling from diagrams //warnings = new Vector(); //checkingErrors = null; mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); //tm = new TURTLEModeling(); //listE = new CorrespondanceTGElement(); mgui.reinitCountOfPanels(); DesignPanelTranslator dpt = new DesignPanelTranslator(dp); tm = dpt.generateTURTLEModeling(tclasses, ""); tmState = 0; listE = dpt.getCorrespondanceTGElement(); checkingErrors = dpt.getErrors(); warnings = dpt.getWarnings(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } // modeling is built // Now check it ! if (!overideSyntaxChecking) { TURTLEModelChecker tmc = new TURTLEModelChecker(tm, listE); /*<<<<<<< HEAD // BUILDING A TURTLE MODELING AND CHECKING IT public boolean checkTURTLEModeling(List<TClassInterface> tclasses, DesignPanel dp, boolean overideSyntaxChecking) { // Builds a TURTLE modeling from diagrams //warnings = new Vector(); //checkingErrors = null; mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); //tm = new TURTLEModeling(); //listE = new CorrespondanceTGElement(); mgui.reinitCountOfPanels(); DesignPanelTranslator dpt = new DesignPanelTranslator(dp); tm = dpt.generateTURTLEModeling(tclasses, ""); tmState = 0; =======*/ checkingErrors = tmc.syntaxAnalysisChecking(); warnings.addAll(tmc.getWarnings()); //>>>>>>> labsoc_sec if ((checkingErrors != null) && (checkingErrors.size() > 0)) { analyzeErrors(); return false; } else { return true; } } return true; } // BUILDING An AVATAR Design AND CHECKING IT public boolean checkAvatarDesign(List<AvatarBDStateMachineOwner> blocks, AvatarDesignPanel adp, boolean _optimize, boolean considerTimingOperators) { // Builds a TURTLE modeling from diagrams //warnings = new Vector(); //checkingErrors = null; mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); //tm = new TURTLEModeling(); //listE = new CorrespondanceTGElement(); mgui.reinitCountOfPanels(); //avatarspec = new AvatarSpecification("avatarspecification", adp); AvatarDesignPanelTranslator adpt = new AvatarDesignPanelTranslator(adp); avatarspec = adpt.generateAvatarSpecification(blocks); avatarspec.setInformationSource(adp); optimizeAvatar = _optimize; if (!considerTimingOperators) { avatarspec.removeAllDelays(); } //TraceManager.addDev("AvatarSpec:" + avatarspec.toString() + "\n\n"); tmState = 3; listE = adpt.getCorrespondanceTGElement(); checkingErrors = adpt.getErrors(); warnings = adpt.getWarnings(); return !((checkingErrors != null) && (checkingErrors.size() > 0)); // Modeling is built // Now check it ! /*if (!overideSyntaxChecking) { TURTLEModelChecker tmc = new TURTLEModelChecker(tm, listE); checkingErrors = tmc.syntaxAnalysisChecking(); warnings.addAll(tmc.getWarnings()); if ((checkingErrors != null) && (checkingErrors.size() > 0)){ analyzeErrors(); return false; } else { return true; } } return true;*/ } // Return values // -1: error // -2: no mutex // -3: invariant for mutex not found // else: invariant found! -> invariant index public int computeMutex() { if (avatarspec == null) { return -1; } AvatarDesignPanel adp = null; try { adp = (AvatarDesignPanel) (avatarspec.getInformationSource()); } catch (Exception e) { TraceManager.addDev("Exception gtm: " + e.getMessage()); return -1; } // Building the list of all states in the mutex List<TGComponent> compInMutex = adp.getListOfComponentsInMutex(); TraceManager.addDev("Nb of elements in mutex:" + compInMutex.size()); if (compInMutex.size() == 0) { return -2; } LinkedList<TGComponent> comps; boolean found; int nbOfFound; int cpt = 0; // Go thru invariants, and see whether one contains for (Invariant inv : invariants) { comps = inv.getComponents(); nbOfFound = 0; for (TGComponent tgc_mutex : compInMutex) { found = false; for (TGComponent tgc_inv : comps) { if (tgc_mutex == tgc_inv) { found = true; break; } } if (!found) { break; } nbOfFound++; } if (nbOfFound == compInMutex.size()) { TraceManager.addDev("Mutex found in inv:" + cpt); for (TGComponent tgc : compInMutex) { tgc.setMutexResult(TGComponent.MUTEX_OK); } return cpt; } cpt++; } for (TGComponent tgc : compInMutex) { tgc.setMutexResult(TGComponent.MUTEX_UNKNOWN); } return -3; } public void clearGraphicalInfoOnInvariants() { if (avatarspec == null) { return; } AvatarDesignPanel adp = null; try { adp = (AvatarDesignPanel) (avatarspec.getInformationSource()); } catch (Exception e) { TraceManager.addDev("Exception gtm: " + e.getMessage()); return; } if (adp == null) { return; } adp.removeAllMutualExclusionWithMasterMutex(); } // Returns the number of states found // Returns -1 in case of error public int computeMutexStatesWith(AvatarSMDState state) { Vector<TGComponent> list = new Vector<TGComponent>(); if (state == null) { // DB Issue 17 this will cause null pointer exception // state.setMutexWith(TGComponent.MUTEX_UNKNOWN); return -1; } for (Invariant inv : invariants) { if (inv.containsComponent(state)) { // All other states are in mutual exclusion for (TGComponent tgc : inv.getComponents()) { if ((tgc instanceof AvatarSMDState) && (tgc != state)) { if (tgc.getTDiagramPanel() != state.getTDiagramPanel()) { if (!(list.contains(tgc))) { tgc.setMutualExclusionWithMasterMutex(state.getTDiagramPanel().getName() + "/" + state.getStateName()); list.add(tgc); } } } } } } if (list.size() > 0) { state.setMutexWith(TGComponent.MUTEX_OK); } else { state.setMutexWith(TGComponent.MUTEX_UNKNOWN); } return list.size(); } public void computeAllMutualExclusions() { TURTLEPanel tp = mgui.getCurrentTURTLEPanel(); if (tp == null) { return; } if (!(tp instanceof AvatarDesignPanel)) { return; } AvatarDesignPanel adp = (AvatarDesignPanel) (tp); adp.reinitMutualExclusionStates(); // First step: build a list of all states being in invariants Vector<AvatarSMDState> v = new Vector<AvatarSMDState>(); for (Invariant inv : invariants) { for (TGComponent tgc : inv.getComponents()) { if (tgc instanceof AvatarSMDState) { if (!(v.contains(tgc))) { v.add((AvatarSMDState) tgc); } } } } // Then, add to all states its list of mutually exclusive states for (AvatarSMDState s : v) { Vector<AvatarSMDState> v0 = new Vector<AvatarSMDState>(); for (Invariant inv : invariants) { if (inv.containsComponent(s)) { for (TGComponent tgc : inv.getComponents()) { if ((tgc instanceof AvatarSMDState) && (tgc != s)) { if (tgc.getTDiagramPanel() != s.getTDiagramPanel()) { if (!(v0.contains(tgc))) { v0.add((AvatarSMDState) tgc); } } } } } } TraceManager.addDev("State " + s.getStateName() + " has " + v0.size() + " mutually eclusive states"); for (AvatarSMDState s0 : v0) { s.addMutexState(s0); } } } // From AVATAR to TURTLEModeling public boolean translateAvatarSpecificationToTIF() { AVATAR2TURTLE att = new AVATAR2TURTLE(avatarspec); tm = att.generateTURTLEModeling(); TURTLEModelChecker tmc = new TURTLEModelChecker(tm, listE); checkingErrors = tmc.syntaxAnalysisChecking(); warnings.addAll(tmc.getWarnings()); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { analyzeErrors(); return false; } else { return true; } } public List<CheckingError> getCheckingErrors() { return checkingErrors; } public List<CheckingError> getCheckingWarnings() { return warnings; } // SAVING AND LOADING IN XML public static String transformString(String s) { if (s != null) { s = Conversion.replaceAllChar(s, '&', "&"); s = Conversion.replaceAllChar(s, '<', "<"); s = Conversion.replaceAllChar(s, '>', ">"); s = Conversion.replaceAllChar(s, '"', """); s = Conversion.replaceAllChar(s, '\'', "'"); } return s; } public static String encodeString(String s) { return s; } public static String decodeString(String s) throws MalformedModelingException { if (s == null) return s; byte b[] = null; try { b = s.getBytes("UTF-8"); return new String(b); } catch (Exception e) { throw new MalformedModelingException(); } } public String mergeTURTLEGModeling(String modeling1, String modeling2) { int index1 = modeling1.indexOf("</TURTLEGMODELING"); int index2 = modeling2.indexOf("<TURTLEGMODELING"); if ((index1 == -1) || (index2 == -1)) { return null; } String modeling = modeling1.substring(0, index1); String tmp = modeling2.substring(index2, modeling2.length()); index2 = modeling2.indexOf('<'); if (index2 == -1) { return null; } tmp = tmp.substring(index2 + 1, tmp.length()); return modeling + tmp; } public String makeXMLFromComponentOfADiagram(TDiagramPanel tdp, TGComponent tgc, int copyMaxId, int _decX, int _decY) { StringBuffer sb = new StringBuffer(); //sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n"); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGSELECTEDCOMPONENTS "); sb.append("version=\"" + DefaultText.getVersion()); sb.append("\" copyMaxId=\"" + copyMaxId); sb.append("\" decX=\"" + _decX); sb.append("\" decY=\"" + _decY); sb.append("\" >\n\n"); StringBuffer s; String str; s = tdp.saveComponentInXML(tgc); if (tgc instanceof AvatarBDBlock) { AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), tgc.getValue()); s.append(asmdp.saveInXML()); List<AvatarBDBlock> list = ((AvatarBDBlock) tgc).getFullBlockList(); for (AvatarBDBlock b : list) { asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), b.getValue()); s.append(asmdp.saveInXML()); } } if (tgc instanceof AvatarBDLibraryFunction) { AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), ((AvatarBDLibraryFunction) tgc).getFunctionName()); s.append(asmdp.saveInXML()); } if (tgc instanceof TCDTClass) { TActivityDiagramPanel tadp = mgui.getActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue()); s.append(tadp.saveInXML()); } if (tgc instanceof TOSClass) { TURTLEOSActivityDiagramPanel tosadp = mgui.getTURTLEOSActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue()); s.append(tosadp.saveInXML()); } if (tgc instanceof TMLTaskOperator) { TMLActivityDiagramPanel tmladp1 = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue()); s.append(tmladp1.saveInXML()); } if (tgc instanceof TMLCPrimitiveComponent) { TMLActivityDiagramPanel tmladp2 = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue()); s.append(tmladp2.saveInXML()); } if (tgc instanceof TMLCCompositeComponent) { TMLActivityDiagramPanel tmladp3; List<TMLCPrimitiveComponent> list = ((TMLCCompositeComponent) tgc).getAllPrimitiveComponents(); for (TMLCPrimitiveComponent comp : list) { tmladp3 = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), comp.getValue()); s.append(tmladp3.saveInXML()); } } if (s == null) { return null; } sb.append(s); sb.append("\n\n"); sb.append("</TURTLEGSELECTEDCOMPONENTS>"); str = new String(sb); str = encodeString(str); return str; } public String makeXMLFromSelectedComponentOfADiagram(TDiagramPanel tdp, int copyMaxId, int _decX, int _decY, boolean cloneEvenIfNonNullFather) { StringBuffer sb = new StringBuffer(); //TraceManager.addDev("Making copy"); //sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n"); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGSELECTEDCOMPONENTS "); sb.append("version=\"" + DefaultText.getVersion()); sb.append("\" copyMaxId=\"" + copyMaxId); sb.append("\" decX=\"" + _decX); sb.append("\" decY=\"" + _decY); sb.append("\" >\n\n"); StringBuffer s; String str; s = tdp.saveSelectedInXML(cloneEvenIfNonNullFather); final Vector<TCDTClass> classes = tdp.selectedTclasses(); if ((classes != null) && (classes.size() > 0)) { TCDTClass t; TActivityDiagramPanel tadp; for (int i = 0; i < classes.size(); i++) { t = classes.elementAt(i); tadp = mgui.getActivityDiagramPanel(mgui.getCurrentSelectedIndex(), t.getValue()); s.append(tadp.saveInXML()); } } //Added by Solange //bug removed by Emil if (tdp instanceof ProactiveCSDPanel) { final Vector<ProCSDComponent> comp = ((ProactiveCSDPanel) tdp).selectedProCSDComponent(null); if ((comp != null) && (comp.size() > 0)) { ProCSDComponent t; ProactiveSMDPanel psmd; for (int i = 0; i < comp.size(); i++) { t = comp.elementAt(i); psmd = mgui.getSMDPanel(mgui.getCurrentSelectedIndex(), t.getValue()); if (psmd != null) s.append(psmd.saveInXML()); } } } //until here final Vector<TOSClass> toClasses = tdp.selectedTURTLEOSClasses(); if ((toClasses != null) && (toClasses.size() > 0)) { //TraceManager.addDev("Saving TURTLEOS activity diagram Panel..."); TOSClass t; TURTLEOSActivityDiagramPanel tosadp; for (int i = 0; i < toClasses.size(); i++) { t = toClasses.elementAt(i); tosadp = mgui.getTURTLEOSActivityDiagramPanel(mgui.getCurrentSelectedIndex(), t.getValue()); s.append(tosadp.saveInXML()); } } final Vector<TMLTaskOperator> operators = tdp.selectedTMLTasks(); if ((operators != null) && (operators.size() > 0)) { //TraceManager.addDev("Saving TML activity diagram Panel..."); TMLTaskOperator t; TMLActivityDiagramPanel tmladp; for (int i = 0; i < operators.size(); i++) { t = operators.elementAt(i); tmladp = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), t.getValue()); s.append(tmladp.saveInXML()); } } final Vector<AvatarBDBlock> blocks = tdp.selectedAvatarBDBlocks(); if ((blocks != null) && (blocks.size() > 0)) { //TraceManager.addDev("Saving TML activity diagram Panel..."); AvatarBDBlock abdb; AvatarSMDPanel asmdp; for (int i = 0; i < blocks.size(); i++) { abdb = blocks.elementAt(i); asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), abdb.getBlockName()); s.append(asmdp.saveInXML()); } } final Vector<TMLCPrimitiveComponent> primComps = tdp.selectedCPrimitiveComponent(); if ((primComps != null) && (primComps.size() > 0)) { //TraceManager.addDev("Saving TML activity diagram Panel..."); TMLCPrimitiveComponent ct; TMLActivityDiagramPanel tmladp; for (int i = 0; i < primComps.size(); i++) { ct = primComps.elementAt(i); tmladp = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), ct.getValue()); s.append(tmladp.saveInXML()); } } if (s == null) { return null; } sb.append(s); sb.append("\n\n"); sb.append("</TURTLEGSELECTEDCOMPONENTS>"); str = new String(sb); str = encodeString(str); TraceManager.addDev("Copy done"); //TraceManager.addDev(str); return str; } private String header() { String head = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING version=\"" + DefaultText.getVersion() + "\""; if (mgui.getCurrentJTabbedPane() != null) { ModelParameters.setValueForID("LAST_SELECTED_SUB_TAB", "" + mgui.getCurrentJTabbedPane().getSelectedIndex()); } head += ModelParameters.toXML(); head += ">\n\n"; return head; } public String makeOneDiagramXMLFromGraphicalModel(TURTLEPanel tp, int indexOfDiagram) { StringBuffer sb = new StringBuffer(); //sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n"); sb.append(header()); StringBuffer s; String str; s = tp.saveInXML(indexOfDiagram); sb.append(s); sb.append("\n\n"); sb.append("</TURTLEGMODELING>"); str = new String(sb); str = encodeString(str); return str; } public String makeXMLFromTurtleModeling(int index) { return makeXMLFromTurtleModeling(index, null); } public String makeXMLFromTurtleModeling(int index, String extensionToName) { StringBuffer sb = new StringBuffer(); //sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n"); sb.append(header()); StringBuffer s; String str; TURTLEPanel tp; int i; // search for diagram panels (Design) for (i = 0; i < panels.size(); i++) { if ((index == -1) || (i == index)) { tp = panels.elementAt(i); s = tp.saveInXML(extensionToName); if (s == null) { return null; } sb.append(s); sb.append("\n\n"); } } sb.append("</TURTLEGMODELING>"); str = new String(sb); str = encodeString(str); return str; } public void removeAllComponents() { TDiagramPanel tdp; int i, j; Vector<TDiagramPanel> panelss; // search for diagram panels for (i = 0; i < panels.size(); i++) { panelss = (panels.elementAt(i).panels); for (j = 0; j < panelss.size(); j++) { tdp = panelss.elementAt(j); tdp.removeAll(); } } } private void prepareErrors() { checkingErrors = new ArrayList<CheckingError>(); warnings = new ArrayList<CheckingError>(); } public void copyModelingFromXML(TDiagramPanel tdp, String s, int X, int Y) throws MalformedModelingException { //TraceManager.addDev("copyModelingFromXML: " + s); //TraceManager.addDev("tdp: " + tdp); //TraceManager.addDev(s); //TraceManager.addDev("copyModelingFromXML:"); //LinkedList ComponentsList=tdp.getComponentList(); prepareErrors(); int beginIndex = tdp.getComponentList().size(); //Added by Solange int cuenta = 1; s = decodeString(s); //TraceManager.addDev("copy=" + s); ByteArrayInputStream bais = new ByteArrayInputStream(s.getBytes()); if ((dbf == null) || (db == null)) { throw new MalformedModelingException(); } int i; //int copyMaxId; int _decX = 0, _decY = 0; try { // building nodes from xml String Document doc = db.parse(bais); NodeList nl; decId = tdp.getMaxId() + 1; TGComponent.setGeneralId(TGComponent.getGeneralId() + decId + 2); nl = doc.getElementsByTagName("TURTLEGSELECTEDCOMPONENTS"); if (nl == null) { TraceManager.addDev("No node in " + s); return; } Node adn; Element elt; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; _decX = X - Integer.decode(elt.getAttribute("decX")).intValue(); _decY = Y - Integer.decode(elt.getAttribute("decY")).intValue(); //copyMaxId = Integer.decode(elt.getAttribute("copyMaxId")).intValue(); } } // Managing diagrams if (tdp instanceof TClassDiagramPanel) { TraceManager.addDev("TClassDiagramPanel copy"); nl = doc.getElementsByTagName("TClassDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } TClassDiagramPanel tcdp = (TClassDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tcdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; tcdp.loadExtraParameters(elt); //TraceManager.addDev("Class diagram : " + tcdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tcdp); makePostProcessing(tcdp); //TraceManager.addDev("Class diagram : " + tcdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tcdp); //TraceManager.addDev("Class diagram : " + tcdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tcdp); //TraceManager.addDev("Class diagram : " + tcdp.getName() + " real points"); connectConnectorsToRealPoints(tcdp); tcdp.structureChanged(); //TraceManager.addDev("Class diagram : " + tcdp.getName() + " post loading " + beginIndex); makePostLoading(tcdp, beginIndex); //TraceManager.addDev("Class diagram : " + tcdp.getName() + " post loading done"); } } docCopy = null; } else if (tdp instanceof TActivityDiagramPanel) { TraceManager.addDev("TActivityDiagramPanel copy"); nl = doc.getElementsByTagName("TActivityDiagramPanelCopy"); if (nl == null) { return; } TActivityDiagramPanel tadp = (TActivityDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tadp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; tadp.loadExtraParameters(elt); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points"); connectConnectorsToRealPoints(tadp); tadp.structureChanged(); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading"); makePostLoading(tadp, beginIndex); } } } else if (tdp instanceof InteractionOverviewDiagramPanel) { nl = doc.getElementsByTagName("InteractionOverviewDiagramPanelCopy"); if (nl == null) { return; } InteractionOverviewDiagramPanel iodp = (InteractionOverviewDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (iodp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //TraceManager.addDev("Activity diagram : " + iodp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), iodp); //TraceManager.addDev("Activity diagram : " + iodp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), iodp); //TraceManager.addDev("Activity diagram : " + iodp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), iodp); //TraceManager.addDev("Activity diagram : " + iodp.getName() + " real points"); connectConnectorsToRealPoints(iodp); iodp.structureChanged(); //TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading"); makePostLoading(iodp, beginIndex); } } } else if (tdp instanceof ui.sd.SequenceDiagramPanel) { //TraceManager.addDev("Sequence diagram!"); nl = doc.getElementsByTagName("SequenceDiagramPanelCopy"); if (nl == null) { return; } ui.sd.SequenceDiagramPanel sdp = (ui.sd.SequenceDiagramPanel) tdp; //TraceManager.addDev("Sequence diagram!"); for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (sdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), sdp); //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), sdp); //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), sdp); //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " real points"); connectConnectorsToRealPoints(sdp); sdp.structureChanged(); //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " post loading"); makePostLoading(sdp, beginIndex); } } } else if (tdp instanceof ui.sd2.SequenceDiagramPanel) { //TraceManager.addDev("Sequence diagram!"); nl = doc.getElementsByTagName("SequenceDiagramPanelZVCopy"); if (nl == null) { return; } ui.sd2.SequenceDiagramPanel sdp = (ui.sd2.SequenceDiagramPanel) tdp; //TraceManager.addDev("Sequence diagram!"); for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (sdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), sdp); //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), sdp); //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), sdp); //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " real points"); connectConnectorsToRealPoints(sdp); sdp.structureChanged(); //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " post loading"); makePostLoading(sdp, beginIndex); } } } else if (tdp instanceof UseCaseDiagramPanel) { nl = doc.getElementsByTagName("UseCaseDiagramPanelCopy"); if (nl == null) { return; } UseCaseDiagramPanel ucdp = (UseCaseDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (ucdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //TraceManager.addDev("Activity diagram : " + sdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ucdp); //TraceManager.addDev("Activity diagram : " + sdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ucdp); //TraceManager.addDev("Activity diagram : " + sdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ucdp); //TraceManager.addDev("Activity diagram : " + sdp.getName() + " real points"); connectConnectorsToRealPoints(ucdp); ucdp.structureChanged(); //TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading"); makePostLoading(ucdp, beginIndex); } } } else if (tdp instanceof TDeploymentDiagramPanel) { nl = doc.getElementsByTagName("TDeploymentDiagramPanelCopy"); if (nl == null) { return; } TDeploymentDiagramPanel tddp = (TDeploymentDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tddp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //TraceManager.addDev("Activity diagram : " + sdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tddp); //TraceManager.addDev("Activity diagram : " + sdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tddp); //TraceManager.addDev("Activity diagram : " + sdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tddp); //TraceManager.addDev("Activity diagram : " + sdp.getName() + " real points"); connectConnectorsToRealPoints(tddp); tddp.structureChanged(); //TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading"); makePostLoading(tddp, beginIndex); } } } else if (tdp instanceof NCDiagramPanel) { nl = doc.getElementsByTagName("NCDiagramPanelCopy"); if (nl == null) { return; } NCDiagramPanel ncdp = (NCDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (ncdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //TraceManager.addDev("Activity diagram : " + sdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ncdp); //TraceManager.addDev("Activity diagram : " + sdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ncdp); //TraceManager.addDev("Activity diagram : " + sdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ncdp); //TraceManager.addDev("Activity diagram : " + sdp.getName() + " real points"); connectConnectorsToRealPoints(ncdp); ncdp.structureChanged(); //TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading"); makePostLoading(ncdp, beginIndex); } } } else if (tdp instanceof RequirementDiagramPanel) { nl = doc.getElementsByTagName("TRequirementDiagramPanelCopy"); if (nl == null) { return; } RequirementDiagramPanel rdp = (RequirementDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (rdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), rdp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), rdp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), rdp); connectConnectorsToRealPoints(rdp); rdp.structureChanged(); makePostLoading(rdp, beginIndex); } } } else if (tdp instanceof EBRDDPanel) { nl = doc.getElementsByTagName("EBRDDPanelCopy"); if (nl == null) { return; } EBRDDPanel ebrddp = (EBRDDPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (ebrddp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ebrddp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ebrddp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ebrddp); connectConnectorsToRealPoints(ebrddp); ebrddp.structureChanged(); makePostLoading(ebrddp, beginIndex); } } } else if (tdp instanceof AttackTreeDiagramPanel) { nl = doc.getElementsByTagName("AttackTreeDiagramPanelCopy"); if (nl == null) { return; } AttackTreeDiagramPanel atdp = (AttackTreeDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (atdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), atdp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), atdp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), atdp); connectConnectorsToRealPoints(atdp); atdp.structureChanged(); makePostLoading(atdp, beginIndex); } } } else if (tdp instanceof FaultTreeDiagramPanel) { nl = doc.getElementsByTagName("FaultTreeDiagramPanelCopy"); if (nl == null) { return; } FaultTreeDiagramPanel ftdp = (FaultTreeDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (ftdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ftdp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ftdp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ftdp); connectConnectorsToRealPoints(ftdp); ftdp.structureChanged(); makePostLoading(ftdp, beginIndex); } } } else if (tdp instanceof TMLTaskDiagramPanel) { nl = doc.getElementsByTagName("TMLTaskDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); TMLTaskDiagramPanel tmltdp = (TMLTaskDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tmltdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; tmltdp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmltdp); //TraceManager.addDev("Toto 3"); makePostProcessing(tmltdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmltdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmltdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(tmltdp); tmltdp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(tmltdp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } } else if (tdp instanceof DiplodocusMethodologyDiagramPanel) { nl = doc.getElementsByTagName("DiplodocusMethodologyDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); DiplodocusMethodologyDiagramPanel tmltdp = (DiplodocusMethodologyDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tmltdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; tmltdp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmltdp); //TraceManager.addDev("Toto 3"); makePostProcessing(tmltdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmltdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmltdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(tmltdp); tmltdp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(tmltdp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } } else if (tdp instanceof AvatarMethodologyDiagramPanel) { nl = doc.getElementsByTagName("AvatarMethodologyDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); AvatarMethodologyDiagramPanel amdp = (AvatarMethodologyDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (amdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; amdp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), amdp); //TraceManager.addDev("Toto 3"); makePostProcessing(amdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), amdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), amdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(amdp); amdp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(amdp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } } else if (tdp instanceof SysmlsecMethodologyDiagramPanel) { nl = doc.getElementsByTagName("SysmlsecMethodologyDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); SysmlsecMethodologyDiagramPanel amdp = (SysmlsecMethodologyDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (amdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; amdp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), amdp); //TraceManager.addDev("Toto 3"); makePostProcessing(amdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), amdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), amdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(amdp); amdp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(amdp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } } else if (tdp instanceof TMLComponentTaskDiagramPanel) { nl = doc.getElementsByTagName("TMLComponentTaskDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); TMLComponentTaskDiagramPanel tmlctdp = (TMLComponentTaskDiagramPanel) tdp; //tmlctdp.updateReferences(); for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tmlctdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; tmlctdp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmlctdp); //TraceManager.addDev("Toto 3"); makePostProcessing(tmlctdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmlctdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmlctdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(tmlctdp); tmlctdp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(tmlctdp, beginIndex); tmlctdp.hideConnectors(); tmlctdp.updatePorts(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } tmlctdp.updatePorts(); } else if (tdp instanceof TMLActivityDiagramPanel) { nl = doc.getElementsByTagName("TMLActivityDiagramPanelCopy"); if (nl == null) { return; } TMLActivityDiagramPanel tmladp = (TMLActivityDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tmladp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //tmladp.loadExtraParameters(elt); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmladp); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmladp); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmladp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points"); connectConnectorsToRealPoints(tmladp); tmladp.structureChanged(); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading"); makePostLoading(tmladp, beginIndex); } } } else if (tdp instanceof TMLCPPanel) { nl = doc.getElementsByTagName("CommunicationPatternDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); TMLCPPanel tmlcpp = (TMLCPPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tmlcpp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //tmlcpp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmlcpp); //TraceManager.addDev("Toto 3"); makePostProcessing(tmlcpp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmlcpp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmlcpp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(tmlcpp); tmlcpp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(tmlcpp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } } else if (tdp instanceof TMLSDPanel) { nl = doc.getElementsByTagName("TMLSDPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); TMLSDPanel tmlsdp = (TMLSDPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tmlsdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //tmlcpp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmlsdp); //TraceManager.addDev("Toto 3"); makePostProcessing(tmlsdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmlsdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmlsdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(tmlsdp); tmlsdp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(tmlsdp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } } else if (tdp instanceof TMLArchiDiagramPanel) { nl = doc.getElementsByTagName("TMLArchiDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); TMLArchiDiagramPanel tmadp = (TMLArchiDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tmadp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; tmadp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmadp); //TraceManager.addDev("Toto 3"); makePostProcessing(tmadp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmadp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmadp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(tmadp); tmadp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(tmadp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } } else if (tdp instanceof TURTLEOSClassDiagramPanel) { nl = doc.getElementsByTagName("TURTLEOSClassDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } TURTLEOSClassDiagramPanel toscdp = (TURTLEOSClassDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (toscdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //toscdp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), toscdp); //TraceManager.addDev("Toto 3"); makePostProcessing(toscdp); //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), toscdp); //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), toscdp); //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " real points"); connectConnectorsToRealPoints(toscdp); toscdp.structureChanged(); //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " post loading " + beginIndex); makePostLoading(toscdp, beginIndex); //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " post loading done"); } } } else if (tdp instanceof TURTLEOSActivityDiagramPanel) { nl = doc.getElementsByTagName("TURTLEOSActivityDiagramPanelCopy"); if (nl == null) { return; } TURTLEOSActivityDiagramPanel tosadp = (TURTLEOSActivityDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (tosadp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //tmladp.loadExtraParameters(elt); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tosadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tosadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tosadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points"); connectConnectorsToRealPoints(tosadp); tosadp.structureChanged(); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading"); makePostLoading(tosadp, beginIndex); } } } else if (tdp instanceof ProactiveCSDPanel) { //cuenta=beginIndex+1; cuenta = mgui.tabs.size() - 1; nl = doc.getElementsByTagName("ProactiveCSDPanelCopy"); if (nl.getLength() == 0) { nl = doc.getElementsByTagName("ProactiveCSDPanel"); } docCopy = doc; if (nl == null) { return; } ProactiveCSDPanel pcsdp = (ProactiveCSDPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (pcsdp == null) { throw new MalformedModelingException(); } // int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //pcsdp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), pcsdp); //TraceManager.addDev("Toto 3"); makePostProcessing(pcsdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), pcsdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), pcsdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(pcsdp); pcsdp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(pcsdp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } // Added by Solange nl = doc.getElementsByTagName("ProactiveSMDPanel"); if (nl == null) { return; } String name = ""; ProactiveSMDPanel psmdp; for (i = 0; i < nl.getLength(); i++) //Erased cuenta++ by Solange at the end condition of the for { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; name = elt.getAttribute("name"); //Added by Solange name at the beginning and cuenta name = mgui.createProActiveSMD(cuenta, name); psmdp = mgui.getSMDPanel(cuenta, name); if (psmdp == null) { throw new MalformedModelingException(); } // int xSel = Integer.decode(elt.getAttribute("minX")).intValue(); //int ySel = Integer.decode(elt.getAttribute("maxX")).intValue(); // - mgui.getCurrentTDiagramPanel().currentX; // int widthSel = Integer.decode(elt.getAttribute("minY")).intValue(); // - mgui.getCurrentTDiagramPanel().currentY;; // int heightSel = Integer.decode(elt.getAttribute("maxY")).intValue(); // - mgui.getCurrentTDiagramPanel().currentY;; decX = _decX; decY = _decY; //tmladp.loadExtraParameters(elt); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), psmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), psmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), psmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points"); connectConnectorsToRealPoints(psmdp); psmdp.structureChanged(); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading"); makePostLoading(psmdp, beginIndex); //until here } } } else if (tdp instanceof ProactiveSMDPanel) { //Changed by Solange, before it was like the first line //nl = doc.getElementsByTagName("ProactiveSMDPanelCopy"); nl = doc.getElementsByTagName("ProactiveSMDPanelCopy"); if (nl == null) { return; } ProactiveSMDPanel psmdp = (ProactiveSMDPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (psmdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //tmladp.loadExtraParameters(elt); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), psmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), psmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), psmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points"); connectConnectorsToRealPoints(psmdp); psmdp.structureChanged(); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading"); makePostLoading(psmdp, beginIndex); } } // AVATAR } else if (tdp instanceof AvatarBDPanel) { nl = doc.getElementsByTagName("AVATARBlockDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); AvatarBDPanel abdp = (AvatarBDPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (abdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; abdp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), abdp); //TraceManager.addDev("Toto 3"); makePostProcessing(abdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), abdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), abdp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(abdp); abdp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(abdp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } } else if (tdp instanceof ADDDiagramPanel) { nl = doc.getElementsByTagName("ADDDiagramPanelCopy"); docCopy = doc; if (nl == null) { return; } //TraceManager.addDev("Toto 1"); ADDDiagramPanel addp = (ADDDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (addp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; addp.loadExtraParameters(elt); //TraceManager.addDev("Toto 2"); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), addp); //TraceManager.addDev("Toto 3"); makePostProcessing(addp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), addp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), addp); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points"); connectConnectorsToRealPoints(addp); addp.structureChanged(); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex); makePostLoading(addp, beginIndex); //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done"); } } } else if (tdp instanceof AvatarSMDPanel) { nl = doc.getElementsByTagName("AVATARStateMachineDiagramPanelCopy"); if (nl == null) { return; } AvatarSMDPanel asmdp = (AvatarSMDPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (asmdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; //tmladp.loadExtraParameters(elt); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), asmdp); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), asmdp); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), asmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points"); connectConnectorsToRealPoints(asmdp); asmdp.structureChanged(); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading"); makePostLoading(asmdp, beginIndex); } } } else if (tdp instanceof ELNDiagramPanel) { nl = doc.getElementsByTagName("ELNDiagramPanelCopy"); if (nl == null) { return; } ELNDiagramPanel elndp = (ELNDiagramPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (elndp == null) { throw new MalformedModelingException(); } decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), elndp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), elndp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), elndp); connectConnectorsToRealPoints(elndp); elndp.structureChanged(); makePostLoading(elndp, beginIndex); } } } else if (tdp instanceof AvatarADPanel) { nl = doc.getElementsByTagName("AvatarADPanelCopy"); if (nl == null) { return; } AvatarADPanel aadp = (AvatarADPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (aadp == null) { throw new MalformedModelingException(); } decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), aadp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), aadp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), aadp); connectConnectorsToRealPoints(aadp); aadp.structureChanged(); makePostLoading(aadp, beginIndex); } } } else if (tdp instanceof AvatarRDPanel) { nl = doc.getElementsByTagName("AvatarRDPanelCopy"); if (nl == null) { return; } AvatarRDPanel ardp = (AvatarRDPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (ardp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ardp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ardp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ardp); connectConnectorsToRealPoints(ardp); ardp.structureChanged(); makePostLoading(ardp, beginIndex); } } } else if (tdp instanceof AvatarMADPanel) { nl = doc.getElementsByTagName("AvatarMADPanelCopy"); if (nl == null) { return; } AvatarMADPanel amadp = (AvatarMADPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (amadp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), amadp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), amadp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), amadp); connectConnectorsToRealPoints(amadp); amadp.structureChanged(); makePostLoading(amadp, beginIndex); } } } else if (tdp instanceof AvatarPDPanel) { nl = doc.getElementsByTagName("AvatarPDPanelCopy"); if (nl == null) { return; } AvatarPDPanel apdp = (AvatarPDPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (apdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), apdp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), apdp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), apdp); connectConnectorsToRealPoints(apdp); apdp.structureChanged(); makePostLoading(apdp, beginIndex); } } } else if (tdp instanceof AvatarCDPanel) { nl = doc.getElementsByTagName("AvatarCDPanelCopy"); if (nl == null) { return; } AvatarCDPanel acdp = (AvatarCDPanel) tdp; for (i = 0; i < nl.getLength(); i++) { adn = nl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; if (acdp == null) { throw new MalformedModelingException(); } //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue(); //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue(); //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue(); //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue(); decX = _decX; decY = _decY; makeXMLComponents(elt.getElementsByTagName("COMPONENT"), acdp); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), acdp); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), acdp); connectConnectorsToRealPoints(acdp); acdp.structureChanged(); makePostLoading(acdp, beginIndex); } } } } catch ( NumberFormatException nfe) { TraceManager.addError("Loading 400 " + nfe.getMessage()); throw new MalformedModelingException(); } catch ( IOException e) { TraceManager.addError("Loading 600 " + e.getMessage()); throw new MalformedModelingException(); } catch ( SAXException saxe) { TraceManager.addError("Loading 601 " + saxe.getMessage()); throw new MalformedModelingException(); } //TraceManager.addDev("making IDs"); makeLastLoad(); makeLovelyIds(); //TraceManager.addDev("IDs done"); } public void loadModeling(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String type = elt.getAttribute("type"); // AVATAR if (type.compareTo("ADD") == 0) { loadAvatarDeployment(node); } else if (type.compareTo("AVATAR Design") == 0) { loadAvatarDesign(node); } else if (type.compareTo("Avatar Requirement") == 0) { loadAvatarRequirement(node); } else if (type.compareTo("Avatar MAD") == 0) { loadAvatarMADs(node); } else if (type.compareTo("Avatar Analysis") == 0) { loadAvatarAnalysis(node); // TURTLE } else if (type.compareTo("Design") == 0) { loadDesign(node); } else if (type.compareTo("Analysis") == 0) { loadAnalysis(node); } else if (type.compareTo("Deployment") == 0) { loadDeployment(node); } else if (type.compareTo("NC diagram") == 0) { loadNC(node); } else if (type.compareTo("Requirement") == 0) { loadRequirement(node); } else if (type.compareTo("AttackTree") == 0) { loadAttackTree(node); } else if (type.compareTo("FaultTree") == 0) { loadFaultTree(node); } else if (type.compareTo("Diplodocus Methodology") == 0) { loadDiplodocusMethodology(node); } else if (type.compareTo("Avatar Methodology") == 0) { loadAvatarMethodology(node); } else if (type.compareTo("Sysmlsec Methodology") == 0) { loadSysmlsecMethodology(node); } else if (type.compareTo("SystemC-AMS") == 0) { loadSysCAMS(node); } else if (type.compareTo("ELN") == 0) { loadELN(node); } else if (type.compareTo("TML Design") == 0) { loadTMLDesign(node); } else if (type.compareTo("TML Component Design") == 0) { loadTMLComponentDesign(node); } else if (type.compareTo("TML CP") == 0) { loadTMLCP(node); } else if (type.compareTo("TML Architecture") == 0) { loadTMLArchitecture(node); } else if (type.compareTo("TURTLE-OS Design") == 0) { loadTURTLEOSDesign(node); } else if (type.compareTo("ProActive Design") == 0) { loadProActiveDesign(node); } else { throw new MalformedModelingException(); } //Select first tab of current tab if it exists if (mgui != null) { if (mgui.getCurrentJTabbedPane() != null) { if (mgui.getCurrentJTabbedPane().getTabCount() > 0) mgui.getCurrentJTabbedPane().setSelectedIndex(0); } } } // Returns null if s is not a saved TURTLE modeling of an older format public String upgradeSaved(String s) { int index1, index2, index3; StringBuffer sb = new StringBuffer(""); //String tmp; index1 = s.indexOf("<TClassDiagramPanel"); index2 = s.indexOf("<InteractionOverviewDiagramPanel "); index3 = s.indexOf("</TURTLEGMODELING>"); if ((index1 < 0) || (index3 < 0)) { return null; } sb.append(header()); if (index2 > -1) { sb.append("<Modeling type=\"Analysis\" nameTab=\"Analysis\" >\n"); sb.append(s.substring(index2, index3)); sb.append("</Modeling>\n\n"); } if (index2 < 0) { index2 = index3; } sb.append("<Modeling type=\"Design\" nameTab=\"Design\" >\n"); sb.append(s.substring(index1, index2)); sb.append("</Modeling>\n\n"); sb.append(s.substring(index3, s.length())); //TraceManager.addDev("Got:" + sb); return sb.toString(); } public void loadModelingFromXML(String s) throws MalformedModelingException, UnsupportedEncodingException { if (s == null) { return; } //TraceManager.addDev("Modeling in loadModelingFromXML:" + s); s = decodeString(s); decX = 0; decY = 0; decId = 0; TGComponent.setGeneralId(100000); //TraceManager.addDev("Modeling in loadModelingFromXML:" + s); ByteArrayInputStream bais = new ByteArrayInputStream(s.getBytes("UTF-8")); if ((dbf == null) || (db == null)) { throw new MalformedModelingException(); } prepareErrors(); int selectedTab = -1; int selectedSubTab = -1; try { // building nodes from xml String Document doc = db.parse(bais); NodeList panelNl; //NodeList designPanelNl; //NodeList analysisNl; int i; //Element elt; Node node; // Managing design panels panelNl = doc.getElementsByTagName("Modeling"); if (panelNl.getLength() == 0) { // Modeling saved in old format? s = upgradeSaved(s); if (s != null) { JOptionPane.showMessageDialog(mgui.frame, "The modeling has been converted to this new version of TTool", "Loading information", JOptionPane.INFORMATION_MESSAGE); } loadModelingFromXML(s); return; } // Loading header try { //TraceManager.addDev("Loading model parameters"); ModelParameters.loadValuesFromXML(doc.getElementsByTagName("TURTLEGMODELING").item(0)); } catch (Exception e) { TraceManager.addDev("Exception when loading model parameters:" + e.getMessage()); } selectedTab = ModelParameters.getIntegerValueFromID("LAST_SELECTED_MAIN_TAB"); selectedSubTab = ModelParameters.getIntegerValueFromID("LAST_SELECTED_SUB_TAB"); //TraceManager.addDev("End loading values"); //designPanelNl = doc.getElementsByTagName("Design"); //analysisNl = doc.getElementsByTagName("Analysis"); pendingConnectors = new ArrayList<TGConnectorInfo>(); boolean error = false; for (i = 0; i < panelNl.getLength(); i++) { node = panelNl.item(i); //TraceManager.addDev("Node = " + node); if (node.getNodeType() == Node.ELEMENT_NODE) { // create design, and get an index for it try { //TraceManager.addDev("Loading Node"); loadModeling(node); //TraceManager.addDev("Node loaded = "); } catch (MalformedModelingException mme) { TraceManager.addError("Error when loading diagram"); Element elt = (Element) node; String type = elt.getAttribute("type"); TraceManager.addError("Error when loading diagram: " + elt + " " + type, mme); error = true; } } } if (error == true) { //TraceManager.addDev("ERROR FOUND"); throw new MalformedModelingException(); } } catch (NumberFormatException nfe) { TraceManager.addError("Loading 400 " + nfe.getMessage()); throw new MalformedModelingException(); } catch (IOException e) { TraceManager.addError("Loading 600 " + e.getMessage()); throw new MalformedModelingException(); } catch (SAXException saxe) { TraceManager.addError("Loading 601 " + saxe.getMessage()); throw new MalformedModelingException(); } //TraceManager.addDev("making IDs"); makeLastLoad(); makeLovelyIds(); TraceManager.addDev("IDs done"); // Selecting last tab //TraceManager.addDev("Selecting tab:" + selectedTab); mgui.selectTab(new Point(selectedTab, selectedSubTab)); //TraceManager.addDev("Tabs selected"); } /*public void loadModeling(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String type = elt.getAttribute("type"); // AVATAR if (type.compareTo("ADD") == 0) { loadAvatarDeployment(node); } else if (type.compareTo("AVATAR Design") == 0) { loadAvatarDesign(node); } else if (type.compareTo("Avatar Requirement") == 0) { loadAvatarRequirement(node); } else if (type.compareTo("Avatar MAD") == 0) { loadAvatarMADs(node); } else if (type.compareTo("Avatar Analysis") == 0) { loadAvatarAnalysis(node); // TURTLE } else if (type.compareTo("Design") == 0) { loadDesign(node); } else if (type.compareTo("Analysis") == 0) { loadAnalysis(node); } else if (type.compareTo("Deployment") == 0) { loadDeployment(node); } else if (type.compareTo("NC diagram") == 0) { loadNC(node); } else if (type.compareTo("Requirement") == 0) { loadRequirement(node); } else if (type.compareTo("AttackTree") == 0) { loadAttackTree(node); } else if (type.compareTo("FaultTree") == 0) { loadFaultTree(node); } else if (type.compareTo("Diplodocus Methodology") == 0) { loadDiplodocusMethodology(node); } else if (type.compareTo("Avatar Methodology") == 0) { loadAvatarMethodology(node); } else if (type.compareTo("Sysmlsec Methodology") == 0) { loadSysmlsecMethodology(node); } else if (type.compareTo("SystemC-AMS") == 0) { loadSysCAMS(node); } else if (type.compareTo("TML Design") == 0) { loadTMLDesign(node); } else if (type.compareTo("TML Component Design") == 0) { loadTMLComponentDesign(node); } else if (type.compareTo("TML CP") == 0) { loadTMLCP(node); } else if (type.compareTo("TML Architecture") == 0) { loadTMLArchitecture(node); } else if (type.compareTo("TURTLE-OS Design") == 0) { loadTURTLEOSDesign(node); } else if (type.compareTo("ProActive Design") == 0) { loadProActiveDesign(node); } else { throw new MalformedModelingException(); } }*/ public void loadAvatarDesign(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); String tabs = elt.getAttribute("tabs"); indexDesign = mgui.createAvatarDesign(nameTab); diagramNl = node.getChildNodes(); /* First load all Block diagrams, then all state machines * This is done this way so that state machines can rely on * informations provided by blocks. For instance we can check * that an attribute used in a state machine really exists. */ for (int j = 0; j < diagramNl.getLength(); j++) { node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("AVATARBlockDiagramPanel") == 0) // Class diagram loadAvatarBD(elt, indexDesign); } } for (int j = 0; j < diagramNl.getLength(); j++) { node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("AVATARStateMachineDiagramPanel") == 0) // Managing activity diagrams loadAvatarSMD(elt, indexDesign); } } // Order tabs in the right order TURTLEPanel tp = mgui.getTURTLEPanel(indexDesign); if (tp != null) { tp.reorderTabs(tabs, 1); } } public void loadAvatarDeployment(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexReq; int cpt_req = 0; TraceManager.addDev("Loading ADD 0"); nameTab = elt.getAttribute("nameTab"); indexReq = mgui.createADD(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Deployment nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("ADDDiagramPanel") == 0) { TraceManager.addDev("Loading ADD 1"); loadADDDiagram(elt, indexReq, cpt_req); cpt_req++; } } } } public void loadAvatarRequirement(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexReq; int cpt_req = 0; nameTab = elt.getAttribute("nameTab"); indexReq = mgui.createAvatarRequirement(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Deployment nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("AvatarRDPanel") == 0) { loadAvatarRD(elt, indexReq, cpt_req); cpt_req++; } else if (elt.getTagName().compareTo("AvatarPDPanel") == 0) { loadAvatarPD(elt, indexReq, cpt_req); cpt_req++; } } } } public void loadAttackTree(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexTree; int cpttdp = 0; nameTab = elt.getAttribute("nameTab"); indexTree = mgui.createAttackTree(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Deployment nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("AttackTreeDiagramPanel") == 0) { loadAttackTreeDiagram(elt, indexTree, cpttdp); cpttdp++; } } } } public void loadFaultTree(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexTree; int cpttdp = 0; nameTab = elt.getAttribute("nameTab"); indexTree = mgui.createFaultTree(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Deployment nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("FaultTreeDiagramPanel") == 0) { loadFaultTreeDiagram(elt, indexTree, cpttdp); cpttdp++; } } } } public void loadAvatarMADs(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexReq; int cpt_req = 0; nameTab = elt.getAttribute("nameTab"); TraceManager.addDev("Creating MAD panel "); indexReq = mgui.createAvatarMADs(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { TraceManager.addDev("MADs nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("AvatarMADPanel") == 0) { loadAvatarMAD(elt, indexReq, cpt_req); cpt_req++; } } } } public void loadDesign(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); indexDesign = mgui.createDesign(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("TClassDiagramPanel") == 0) { // Class diagram loadTClassDiagram(elt, indexDesign); } else { // Managing activity diagrams if (elt.getTagName().compareTo("TActivityDiagramPanel") == 0) { // Managing activity diagrams loadTActivityDiagram(elt, indexDesign); } } } } } public void loadAnalysis(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexAnalysis; int cpt = 0; nameTab = elt.getAttribute("nameTab"); indexAnalysis = mgui.createAnalysis(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("InteractionOverviewDiagramPanel") == 0) { // IOD loadIODiagram(elt, indexAnalysis); cpt++; } else { // Managing sequence diagrams if (elt.getTagName().compareTo("SequenceDiagramPanel") == 0) { loadSequenceDiagram(elt, indexAnalysis); cpt++; } else if (elt.getTagName().compareTo("SequenceDiagramPanelZV") == 0) { loadSequenceDiagramZV(elt, indexAnalysis); cpt++; } else if (elt.getTagName().compareTo("UseCaseDiagramPanel") == 0) { // Managing use case diagrams loadUseCaseDiagram(elt, indexAnalysis, cpt); cpt++; } /*else if (elt.getTagName().compareTo("AvatarCDPanel") == 0) { // Managing use case diagrams loadAvatarCD(elt, indexAnalysis, cpt); cpt ++; } else if (elt.getTagName().compareTo("AvatarADPanel") == 0) { // Managing use case diagrams loadAvatarAD(elt, indexAnalysis, cpt); cpt ++; }*/ } } } } public void loadTMLCP(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexTMLCP; // int cpt = 0; nameTab = elt.getAttribute("nameTab"); indexTMLCP = mgui.createTMLCP(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("CommunicationPatternDiagramPanel") == 0) { // CP loadTMLCPDiagram(elt, indexTMLCP); // cpt ++; } else { // Managing sequence diagrams if (elt.getTagName().compareTo("TMLSDPanel") == 0) { loadTMLSDDiagram(elt, indexTMLCP); // cpt ++; } } } } } public void loadAvatarAnalysis(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexAnalysis; int cpt = 0; //TraceManager.addDev("Loading Avatar analysis"); nameTab = elt.getAttribute("nameTab"); indexAnalysis = mgui.createAvatarAnalysis(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("SequenceDiagramPanel") == 0) { //TraceManager.addDev("Loading seq diag"); loadSequenceDiagram(elt, indexAnalysis); //TraceManager.addDev("Loading seq diag done"); cpt++; } else if (elt.getTagName().compareTo("SequenceDiagramPanelZV") == 0) { //TraceManager.addDev("Loading seq diag"); loadSequenceDiagramZV(elt, indexAnalysis); //TraceManager.addDev("Loading seq diag done"); cpt++; } else if (elt.getTagName().compareTo("UseCaseDiagramPanel") == 0) { // Managing use case diagrams //TraceManager.addDev("Loading ucd diag"); loadUseCaseDiagram(elt, indexAnalysis, cpt); //TraceManager.addDev("Loading ucd diag done"); cpt++; } else if (elt.getTagName().compareTo("AvatarCDPanel") == 0) { // Managing use case diagrams //TraceManager.addDev("Loading cd diag"); loadAvatarCD(elt, indexAnalysis, cpt); //TraceManager.addDev("Loading cd diag done"); cpt++; } else if (elt.getTagName().compareTo("AvatarADPanel") == 0) { // Managing use case diagrams //TraceManager.addDev("Loading ad diag"); loadAvatarAD(elt, indexAnalysis, cpt); //TraceManager.addDev("Loading ad diag done"); cpt++; } } } } public void loadDeployment(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexAnalysis; nameTab = elt.getAttribute("nameTab"); indexAnalysis = mgui.createDeployment(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Deployment nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("TDeploymentDiagramPanel") == 0) { // IOD loadTDeploymentDiagram(elt, indexAnalysis); } } } } public void loadNC(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexAnalysis; nameTab = elt.getAttribute("nameTab"); indexAnalysis = mgui.createNC(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Deployment nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("NCDiagramPanel") == 0) { // IOD loadNCDiagram(elt, indexAnalysis); } } } } public void loadRequirement(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexReq; int cpt_req = 0; nameTab = elt.getAttribute("nameTab"); indexReq = mgui.createRequirement(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Deployment nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("TRequirementDiagramPanel") == 0) { loadRequirementDiagram(elt, indexReq, cpt_req); cpt_req++; } else if (elt.getTagName().compareTo("EBRDDPanel") == 0) { loadEBRDD(elt, indexReq, cpt_req); cpt_req++; } } } } public void loadDiplodocusMethodology(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); indexDesign = mgui.createDiplodocusMethodology(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("DiplodocusMethodologyDiagramPanel") == 0) { // Class diagram //TraceManager.addDev("Loading TML CD"); loadDiplodocusMethodologyDiagram(elt, indexDesign); //TraceManager.addDev("End loading TML CD"); } } } } public void loadAvatarMethodology(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); indexDesign = mgui.createAvatarMethodology(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("AvatarMethodologyDiagramPanel") == 0) { // Class diagram TraceManager.addDev("Loading Avatar methodo"); loadAvatarMethodologyDiagram(elt, indexDesign); TraceManager.addDev("End Loading avatar methodo"); } } } } public void loadSysmlsecMethodology(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); indexDesign = mgui.createSysmlsecMethodology(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("SysmlsecMethodologyDiagramPanel") == 0) { // Class diagram TraceManager.addDev("Loading SysMLSec methodo"); loadSysmlsecMethodologyDiagram(elt, indexDesign); TraceManager.addDev("End loading SysMLSec methodo"); } } } } public void loadSysCAMS(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; int indexTab = 0; nameTab = elt.getAttribute("nameTab"); //indexDesign = mgui.createSysmlsecMethodology(nameTab); indexDesign = mgui.createSysCAMSComponentDesign(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { // TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("SysCAMSComponentTaskDiagramPanel") == 0) { // Class diagram TraceManager.addDev("Loading SystemC-AMS"); loadSysCAMSDiagram(elt, indexDesign, indexTab); indexTab++; TraceManager.addDev("End loading SystemC-AMS"); } } } } public void loadELN(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; int indexTab = 0; nameTab = elt.getAttribute("nameTab"); indexDesign = mgui.createELN(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { // TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("ELNDiagramPanel") == 0) { // Class diagram TraceManager.addDev("Loading ELN"); loadELNDiagram(elt, indexDesign, indexTab); indexTab++; TraceManager.addDev("End loading ELN"); } } } } public void loadTMLDesign(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); indexDesign = mgui.createTMLDesign(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("TMLTaskDiagramPanel") == 0) { // Class diagram //TraceManager.addDev("Loading TML CD"); loadTMLTaskDiagram(elt, indexDesign); //TraceManager.addDev("End loading TML CD"); } else { // Managing activity diagrams if (elt.getTagName().compareTo("TMLActivityDiagramPanel") == 0) { // Managing activity diagrams //TraceManager.addDev("Loading TML AD"); loadTMLActivityDiagram(elt, indexDesign); } } } } } public void loadTMLComponentDesign(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); String tabs = elt.getAttribute("tabs"); indexDesign = mgui.createTMLComponentDesign(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("TMLComponentTaskDiagramPanel") == 0) { // Component diagram //TraceManager.addDev("Loading TML Component diagram"); loadTMLComponentTaskDiagram(elt, indexDesign); //TraceManager.addDev("End loading TML CD"); } else { // Managing activity diagrams if (elt.getTagName().compareTo("TMLActivityDiagramPanel") == 0) { // Managing activity diagrams //TraceManager.addDev("Loading TML AD"); loadTMLActivityDiagram(elt, indexDesign); } } } } // Order tabs in the right order TURTLEPanel tp = mgui.getTURTLEPanel(indexDesign); if (tp != null) { tp.reorderTabs(tabs, 1); } } public void loadTMLArchitecture(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); indexDesign = mgui.createTMLArchitecture(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("TML Architecture nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("TMLArchiDiagramPanel") == 0) { //TraceManager.addDev("Loading TML DD" + elt.getTagName() ); loadTMLArchitectureDiagram(elt, indexDesign); //TraceManager.addDev("End loading TML DD"); } } } } public void loadTURTLEOSDesign(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); indexDesign = mgui.createTURTLEOSDesign(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("TURTLEOSClassDiagramPanel") == 0) { // Class diagram //TraceManager.addDev("Loading TURTLEOS CD"); loadTURTLEOSClassDiagram(elt, indexDesign); //TraceManager.addDev("End loading TML CD"); } else { // Managing activity diagrams if (elt.getTagName().compareTo("TURTLEOSActivityDiagramPanel") == 0) { // Managing activity diagrams //TraceManager.addDev("Loading TURTLEOS AD"); loadTURTLEOSActivityDiagram(elt, indexDesign); } } } } } public void loadProActiveDesign(Node node) throws MalformedModelingException, SAXException { Element elt = (Element) node; String nameTab; NodeList diagramNl; int indexDesign; nameTab = elt.getAttribute("nameTab"); indexDesign = mgui.createProActiveDesign(nameTab); diagramNl = node.getChildNodes(); for (int j = 0; j < diagramNl.getLength(); j++) { //TraceManager.addDev("Design nodes: " + j); node = diagramNl.item(j); if (node.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) node; if (elt.getTagName().compareTo("ProactiveCSDPanel") == 0) { // Class diagram //TraceManager.addDev("Loading TML CD"); loadProactiveCSD(elt, indexDesign); //TraceManager.addDev("End loading TML CD"); } else { // Managing activity diagrams if (elt.getTagName().compareTo("ProactiveSMDPanel") == 0) { // Managing activity diagrams //TraceManager.addDev("Loading TML AD"); loadProactiveSMD(elt, indexDesign); } } } } } public void loadDiagram(Element elt, TDiagramPanel tdp) throws MalformedModelingException, SAXException { int x, y; double zoom = 0; try { x = Integer.decode(elt.getAttribute("minX")).intValue(); tdp.setMinX(x); x = Integer.decode(elt.getAttribute("maxX")).intValue(); tdp.setMaxX(x); y = Integer.decode(elt.getAttribute("minY")).intValue(); tdp.setMinY(y); y = Integer.decode(elt.getAttribute("maxY")).intValue(); tdp.setMaxY(y); tdp.updateSize(); zoom = Double.parseDouble(elt.getAttribute("zoom")); if (zoom != 0) { tdp.forceZoom(zoom); mgui.updateZoomInfo(); } } catch (Exception e) { // Model was saved in an older version of TTool } // for TClassdiagram Panel if (tdp instanceof TClassDiagramPanel) { ((TClassDiagramPanel) tdp).loadExtraParameters(elt); } if (tdp instanceof TActivityDiagramPanel) { ((TActivityDiagramPanel) tdp).loadExtraParameters(elt); } if (tdp instanceof TMLTaskDiagramPanel) { ((TMLTaskDiagramPanel) tdp).loadExtraParameters(elt); } if (tdp instanceof TMLComponentTaskDiagramPanel) { ((TMLComponentTaskDiagramPanel) tdp).loadExtraParameters(elt); } if (tdp instanceof TMLArchiDiagramPanel) { ((TMLArchiDiagramPanel) tdp).loadExtraParameters(elt); } //name = elt.getAttribute("name"); //TraceManager.addDev("Loading SMD of:" + name); //AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(indexDesign, name); if (tdp instanceof AvatarBDPanel) { ((AvatarBDPanel) tdp).loadExtraParameters(elt); } //TraceManager.addDev("Element" + elt.toString()); // Loads components of the class diagram //TraceManager.addDev("Components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tdp); //TraceManager.addDev("Post processing"); makePostProcessing(tdp); //TraceManager.addDev("Connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tdp); //TraceManager.addDev("Subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tdp); //TraceManager.addDev("RealPoints"); connectConnectorsToRealPoints(tdp); //TraceManager.addDev("Structure changed"); tdp.structureChanged(); //TraceManager.addDev("Post loading"); makePostLoading(tdp, 0); //TraceManager.addDev("Test connectors"); if (tdp instanceof TMLComponentTaskDiagramPanel) { //TraceManager.addDev("Connectors..."); ((TMLComponentTaskDiagramPanel) tdp).setConnectorsToFront(); } if (tdp instanceof EBRDDPanel) { //TraceManager.addDev("Connectors..."); ((EBRDDPanel) tdp).setConnectorsToFront(); } if (tdp instanceof AttackTreeDiagramPanel) { //TraceManager.addDev("Connectors..."); ((AttackTreeDiagramPanel) tdp).setConnectorsToFront(); } if (tdp instanceof FaultTreeDiagramPanel) { //TraceManager.addDev("Connectors..."); ((FaultTreeDiagramPanel) tdp).setConnectorsToFront(); } if (tdp instanceof AvatarBDPanel) { //TraceManager.addDev("Connectors..."); ((AvatarBDPanel) tdp).setConnectorsToFront(); } if (tdp instanceof AvatarSMDPanel) { //TraceManager.addDev("Connectors..."); ((AvatarSMDPanel) tdp).setConnectorsToFront(); } if (tdp instanceof AvatarPDPanel) { //TraceManager.addDev("Connectors..."); ((AvatarPDPanel) tdp).setConnectorsToFront(); } if (tdp instanceof AvatarCDPanel) { //TraceManager.addDev("Connectors..."); ((AvatarCDPanel) tdp).setConnectorsToFront(); } if (tdp instanceof SysCAMSComponentTaskDiagramPanel) { //TraceManager.addDev("Connectors..."); ((SysCAMSComponentTaskDiagramPanel) tdp).setConnectorsToFront(); } if (tdp instanceof ELNDiagramPanel) { // TraceManager.addDev("Connectors..."); ((ELNDiagramPanel) tdp).setConnectorsToFront(); } if (tdp instanceof AvatarADPanel) { //TraceManager.addDev("Connectors..."); ((AvatarADPanel) tdp).setConnectorsToFront(); } /*if(tdp instanceof SysCAMSComponentTaskDiagramPanel) { //TraceManager.addDev("Connectors..."); ((SysCAMSComponentTaskDiagramPanel) tdp).setConnectorsToFront(); }*/ } // AVATAR public void loadAvatarBD(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // class diagram name name = elt.getAttribute("name"); mgui.setAvatarBDName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); loadDiagram(elt, tdp); } public void loadAvatarSMD(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); //TraceManager.addDev("Loading SMD of:" + name); AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(indexDesign, name); if (asmdp == null) { throw new MalformedModelingException(); } asmdp.removeAll(); mgui.selectDummyTab(indexDesign); loadDiagram(elt, asmdp); mgui.forgetDummyTab(); } public void loadAvatarRD(Element elt, int indexAnalysis, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.createAvatarRD(indexAnalysis, name); TDiagramPanel tdp = mgui.getAvatarRDPanel(indexAnalysis, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadAvatarMAD(Element elt, int indexAnalysis, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.createAvatarMAD(indexAnalysis, name); TDiagramPanel tdp = mgui.getAvatarMADPanel(indexAnalysis, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadADDDiagram(Element elt, int indexAnalysis, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); TraceManager.addDev("ADD 2"); mgui.createAvatarPD(indexAnalysis, name); TraceManager.addDev("ADD 3"); TDiagramPanel tdp = mgui.getAvatarADDPanel(indexAnalysis, indexTab, name); TraceManager.addDev("ADD 3.1"); if (tdp == null) { // Try to get the first diagram of the panel tdp = mgui.getAvatarADDPanelByIndex(indexAnalysis, indexTab); if (tdp == null) { TraceManager.addDev("ADD 3.2"); throw new MalformedModelingException(); } } tdp.removeAll(); TraceManager.addDev("ADD 4"); loadDiagram(elt, tdp); TraceManager.addDev("ADD 5"); } public void loadAvatarPD(Element elt, int indexAnalysis, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.createAvatarPD(indexAnalysis, name); TDiagramPanel tdp = mgui.getAvatarPDPanel(indexAnalysis, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadAvatarCD(Element elt, int indexAnalysis, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.createAvatarCD(indexAnalysis, name); TDiagramPanel tdp = mgui.getAvatarCDPanel(indexAnalysis, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadAvatarAD(Element elt, int indexAnalysis, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.createAvatarAD(indexAnalysis, name); TDiagramPanel tdp = mgui.getAvatarADPanel(indexAnalysis, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } // TURTLE Design public void loadTClassDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // class diagram name name = elt.getAttribute("name"); mgui.setClassDiagramName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); loadDiagram(elt, tdp); } public void loadTActivityDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); TActivityDiagramPanel tadp = mgui.getActivityDiagramPanel(indexDesign, name); if (tadp == null) { throw new MalformedModelingException(); } tadp.removeAll(); loadDiagram(elt, tadp); } public void loadDiplodocusMethodologyDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // Diagram name name = elt.getAttribute("name"); mgui.setDiplodocusMethodologyDiagramName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); tdp.setName(name); //TraceManager.addDev("tdp=" + tdp.getName()); loadDiagram(elt, tdp); } public void loadAvatarMethodologyDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // class diagram name name = elt.getAttribute("name"); mgui.setAvatarMethodologyDiagramName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); tdp.setName(name); //TraceManager.addDev("tdp=" + tdp.getName()); loadDiagram(elt, tdp); } public void loadSysmlsecMethodologyDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // class diagram name name = elt.getAttribute("name"); mgui.setSysmlsecMethodologyDiagramName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); tdp.setName(name); //TraceManager.addDev("tdp=" + tdp.getName()); loadDiagram(elt, tdp); } public void loadSysCAMSDiagram(Element elt, int indexDesign, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.createSysCAMS(indexDesign, name); TDiagramPanel tdp = mgui.getSysCAMSPanel(indexDesign, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadELNDiagram(Element elt, int indexDesign, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.createELN(indexDesign, name); TDiagramPanel tdp = mgui.getELNPanel(indexDesign, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadSysCAMSDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // class diagram name name = elt.getAttribute("name"); mgui.setSysCAMSComponentTaskDiagramName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); tdp.setName(name); loadDiagram(elt, tdp); } public void loadTMLTaskDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // class diagram name name = elt.getAttribute("name"); mgui.setTMLTaskDiagramName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); //TraceManager.addDev("tdp=" + tdp.getName()); loadDiagram(elt, tdp); } public void loadTMLComponentTaskDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // Diagram name name = elt.getAttribute("name"); mgui.setTMLComponentTaskDiagramName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); //TraceManager.addDev("tdp=" + tdp.getName()); loadDiagram(elt, tdp); ((TMLComponentTaskDiagramPanel) tdp).hideConnectors(); ((TMLComponentTaskDiagramPanel) tdp).updatePorts(); } public void loadTMLArchitectureDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // Diagram name name = elt.getAttribute("name"); mgui.setTMLArchitectureDiagramName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); //TraceManager.addDev("tdp=" + tdp.getName()); loadDiagram(elt, tdp); } public void loadTMLActivityDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); //TraceManager.addDev("getting tmladp: " + name); TMLActivityDiagramPanel tmladp = mgui.getTMLActivityDiagramPanel(indexDesign, name); //TraceManager.addDev("Got tmladp"); if (tmladp == null) { //TraceManager.addDev("null tmladp"); throw new MalformedModelingException(); } tmladp.removeAll(); //TraceManager.addDev("Loading diagram of " + name + " in " + tmladp.getName() +"\n"); loadDiagram(elt, tmladp); } public void loadTURTLEOSClassDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // class diagram name name = elt.getAttribute("name"); mgui.setTMLTaskDiagramName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); loadDiagram(elt, tdp); } public void loadTURTLEOSActivityDiagram(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); TURTLEOSActivityDiagramPanel tosadp = mgui.getTURTLEOSActivityDiagramPanel(indexDesign, name); if (tosadp == null) { throw new MalformedModelingException(); } tosadp.removeAll(); loadDiagram(elt, tosadp); } public void loadProactiveCSD(Element elt, int indexDesign) throws MalformedModelingException, SAXException { String name; TDiagramPanel tdp; // class diagram name name = elt.getAttribute("name"); // mgui.setProacticeCSDName(indexDesign, name); tdp = mgui.getMainTDiagramPanel(indexDesign); //ProactiveDesignPanel pdp=(ProactiveDesignPanel) mgui.getCurrentTURTLEPanel(); ProactiveDesignPanel pdp = (ProactiveDesignPanel) tdp.tp; if (!tdp.getName().equals(name)) { //tdp=pdp.addCompositeStructureDiagram(name); tdp = pdp.addProActiveCompSpecificationPanel(name); } //TraceManager.addDev("tdp=" + tdp.getName()); loadDiagram(elt, tdp); } public void loadProactiveSMD(Element elt, int indexAnalysis) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); if (!(mgui.isProActiveSMDCreated(indexAnalysis, name))) { mgui.createProActiveSMD(indexAnalysis, name); } ProactiveSMDPanel smd = mgui.getSMDPanel(indexAnalysis, name); if (smd == null) { throw new MalformedModelingException(); } smd.removeAll(); loadDiagram(elt, smd); } public void loadIODiagram(Element elt, int indexAnalysis) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); //mgui.setIODName(indexAnalysis, name); if (!(mgui.isIODCreated(indexAnalysis, name))) { mgui.createIODiagram(indexAnalysis, name); } TDiagramPanel tdp = mgui.getIODiagramPanel(indexAnalysis, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadTMLCPDiagram(Element elt, int indexAnalysis) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); if (!(mgui.isTMLCPCreated(indexAnalysis, name))) { mgui.createTMLCPDiagram(indexAnalysis, name); } TDiagramPanel tdp = mgui.getTMLCPDiagramPanel(indexAnalysis, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadTMLSDDiagram(Element elt, int indexAnalysis) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); if (!(mgui.isTMLCPSDCreated(indexAnalysis, name))) { mgui.createTMLCPSequenceDiagram(indexAnalysis, name); } TDiagramPanel tdp = mgui.getTMLCPSDDiagramPanel(indexAnalysis, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadRequirementDiagram(Element elt, int indexAnalysis, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.createRequirementDiagram(indexAnalysis, name); TDiagramPanel tdp = mgui.getRequirementDiagramPanel(indexAnalysis, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadEBRDD(Element elt, int indexAnalysis, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.createEBRDD(indexAnalysis, name); TDiagramPanel tdp = mgui.getEBRDDPanel(indexAnalysis, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadAttackTreeDiagram(Element elt, int indexDiag, int indexTab) throws MalformedModelingException, SAXException { String name; //TraceManager.addDev("indexDiag=" + indexDiag); name = elt.getAttribute("name"); mgui.createAttackTreeDiagram(indexDiag, name); TDiagramPanel tdp = mgui.getAttackTreeDiagramPanel(indexDiag, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadFaultTreeDiagram(Element elt, int indexDiag, int indexTab) throws MalformedModelingException, SAXException { String name; //TraceManager.addDev("indexDiag=" + indexDiag); name = elt.getAttribute("name"); mgui.createFaultTreeDiagram(indexDiag, name); TDiagramPanel tdp = mgui.getFaultTreeDiagramPanel(indexDiag, indexTab, name); if (tdp == null) { throw new MalformedModelingException(); } tdp.removeAll(); loadDiagram(elt, tdp); } public void loadSequenceDiagram(Element elt, int indexAnalysis) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); if (!(mgui.isSDCreated(indexAnalysis, name))) { mgui.createSequenceDiagram(indexAnalysis, name); } //TraceManager.addDev("Loading seq diag1"); ui.sd.SequenceDiagramPanel sdp = mgui.getSequenceDiagramPanel(indexAnalysis, name); //TraceManager.addDev("Loading seq diag2"); ui.sd2.SequenceDiagramPanel sdp2 = mgui.getSequenceDiagramPanelZV(indexAnalysis, name); if (sdp != null) { sdp.removeAll(); //TraceManager.addDev("Loading seq diag4"); loadDiagram(elt, sdp); //TraceManager.addDev("Loading seq diag5"); } else if (sdp2 != null) { sdp2.removeAll(); loadDiagram(elt, sdp2); } else throw new MalformedModelingException(); //TraceManager.addDev("Loading seq diag3"); } public void loadSequenceDiagramZV(Element elt, int indexAnalysis) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); if (!(mgui.isSDZVCreated(indexAnalysis, name))) { mgui.createSequenceDiagramZV(indexAnalysis, name); } //TraceManager.addDev("Loading seq diag1"); ui.sd2.SequenceDiagramPanel sdp = mgui.getSequenceDiagramPanelZV(indexAnalysis, name); //TraceManager.addDev("Loading seq diag2"); if (sdp == null) { throw new MalformedModelingException(); } //TraceManager.addDev("Loading seq diag3"); sdp.removeAll(); //TraceManager.addDev("Loading seq diag4"); loadDiagram(elt, sdp); //TraceManager.addDev("Loading seq diag5"); } public void loadUseCaseDiagram(Element elt, int indexAnalysis, int indexTab) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); /*if (!(mgui.isUCDCreated(indexAnalysis, name))) {*/ mgui.createUseCaseDiagram(indexAnalysis, name); //} UseCaseDiagramPanel ucdp = mgui.getUseCaseDiagramPanel(indexAnalysis, indexTab, name); if (ucdp == null) { throw new MalformedModelingException(); } ucdp.removeAll(); loadDiagram(elt, ucdp); } public void loadTDeploymentDiagram(Element elt, int indexDeployment) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.setDeploymentName(indexDeployment, name); TDiagramPanel tdp = mgui.getMainTDiagramPanel(indexDeployment); loadDiagram(elt, tdp); } public void loadNCDiagram(Element elt, int indexNC) throws MalformedModelingException, SAXException { String name; name = elt.getAttribute("name"); mgui.setNCName(indexNC, name); TDiagramPanel tdp = mgui.getMainTDiagramPanel(indexNC); loadDiagram(elt, tdp); } // reinit the id of all components public void makeLovelyIds() { TDiagramPanel tdp; int id = 1; int i, j; TURTLEPanel tp; // search for diagram panels for (i = 0; i < panels.size(); i++) { tp = panels.elementAt(i); for (j = 0; j < tp.panels.size(); j++) { tdp = tp.panels.elementAt(j); id = tdp.makeLovelyIds(id); //TraceManager.addDev("Lovely id =" + id); } } TGComponent.setGeneralId(id + 1); } public void loadDiagramInformation(Element elt, TDiagramPanel tdp) throws MalformedModelingException { int x, y; double zoom = 0; try { x = Integer.decode(elt.getAttribute("minX")).intValue(); tdp.setMinX(x); x = Integer.decode(elt.getAttribute("maxX")).intValue(); tdp.setMaxX(x); y = Integer.decode(elt.getAttribute("minY")).intValue(); tdp.setMinY(y); y = Integer.decode(elt.getAttribute("maxY")).intValue(); tdp.setMaxY(y); tdp.updateSize(); zoom = Double.parseDouble(elt.getAttribute("zoom")); if (zoom != 0) { tdp.forceZoom(zoom); mgui.updateZoomInfo(); } } catch (Exception e) { // Model was saved in an older version of TTool } if (tdp instanceof TActivityDiagramPanel) { ((TActivityDiagramPanel) tdp).loadExtraParameters(elt); } } public void loadActivityDiagram(TDiagramPanel tdp, String oldValue, String newValue) throws MalformedModelingException { //TraceManager.addDev("---> Load activity diagram"); try { NodeList activityDiagramNl = docCopy.getElementsByTagName("TActivityDiagramPanel"); TraceManager.addDev("Loading activity diagram of " + newValue + "Before : " + oldValue); TraceManager.addDev("" + docCopy); if (activityDiagramNl == null) { throw new MalformedModelingException(); } Node adn; Element elt; TActivityDiagramPanel tadp; String name; int decXTmp = decX; int decYTmp = decY; int decIdTmp = decId; for (int i = 0; i < activityDiagramNl.getLength(); i++) { adn = activityDiagramNl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; // class diagram name name = elt.getAttribute("name"); //TraceManager.addDev("Name of activity diagram=" + name); if (name.equals(oldValue)) { int indexDesign = mgui.getMajorIndexOf(tdp); if (indexDesign < 0) { throw new MalformedModelingException(); } tadp = mgui.getActivityDiagramPanel(indexDesign, newValue); //TraceManager.addDev("Searching panel"); if (tadp == null) { throw new MalformedModelingException(); } //TraceManager.addDev("Panel ok"); decX = 0; decY = 0; decId = 0; tadp.removeAll(); loadDiagramInformation(elt, tadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tadp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points"); connectConnectorsToRealPoints(tadp); tadp.structureChanged(); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading"); makePostLoading(tadp, 0); } } } decX = decXTmp; decY = decYTmp; decId = decIdTmp; } catch (SAXException saxe) { TraceManager.addError("Loading 701 " + saxe.getMessage()); throw new MalformedModelingException(); } } public void loadAvatarSMD(TDiagramPanel tdp, String oldValue, String newValue) throws MalformedModelingException { TraceManager.addDev("---> Load activity diagram of old=" + oldValue + " new=" + newValue); try { NodeList smdNl = docCopy.getElementsByTagName("AVATARStateMachineDiagramPanel"); //TraceManager.addDev("Loading state machine diagram of " + newValue + " Before : " + oldValue); //TraceManager.addDev("smdNL: " + smdNl); if (smdNl == null) { TraceManager.addDev("AVATAR: null doc"); throw new MalformedModelingException(); } Node adn; Element elt; AvatarSMDPanel asmdp; String name; int decXTmp = decX; int decYTmp = decY; int decIdTmp = decId; for (int i = 0; i < smdNl.getLength(); i++) { adn = smdNl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; // class diagram name name = elt.getAttribute("name"); TraceManager.addDev("Name of activity diagram=" + name); if (name.equals(oldValue)) { int indexDesign = mgui.getMajorIndexOf(tdp); if (indexDesign < 0) { throw new MalformedModelingException(); } asmdp = mgui.getAvatarSMDPanel(indexDesign, newValue); TraceManager.addDev("Searching panel: " + newValue); if (asmdp == null) { throw new MalformedModelingException(); } TraceManager.addDev("Panel ok"); decX = 0; decY = 0; decId = 0; asmdp.removeAll(); loadDiagramInformation(elt, asmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), asmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), asmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), asmdp); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points"); connectConnectorsToRealPoints(asmdp); asmdp.structureChanged(); //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading"); makePostLoading(asmdp, 0); } } } decX = decXTmp; decY = decYTmp; decId = decIdTmp; } catch (SAXException saxe) { TraceManager.addError("Loading 801 " + saxe.getMessage()); throw new MalformedModelingException(); } } public void loadTMLActivityDiagram(TDiagramPanel tdp, String oldValue, String newValue) throws MalformedModelingException { //TraceManager.addDev("---> Load TML activity diagram"); try { if (docCopy == null) { TraceManager.addDev("Null doc copy"); } NodeList activityDiagramNl = docCopy.getElementsByTagName("TMLActivityDiagramPanel"); //TraceManager.addDev("Loading activity diagram of " + newValue + "Before : " + oldValue); if (activityDiagramNl == null) { //TraceManager.addDev("Null"); throw new MalformedModelingException(); } Node adn; Element elt; TMLActivityDiagramPanel tmladp; String name; int decXTmp = decX; int decYTmp = decY; int decIdTmp = decId; for (int i = 0; i < activityDiagramNl.getLength(); i++) { adn = activityDiagramNl.item(i); if (adn.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) adn; // class diagram name name = elt.getAttribute("name"); //TraceManager.addDev("Name of activity diagram=" + name); if (name.equals(oldValue)) { int indexDesign = mgui.getMajorIndexOf(tdp); if (indexDesign < 0) { throw new MalformedModelingException(); } tmladp = mgui.getTMLActivityDiagramPanel(indexDesign, newValue); //TraceManager.addDev("Searching panel"); if (tmladp == null) { throw new MalformedModelingException(); } //TraceManager.addDev("Panel ok"); decX = 0; decY = 0; decId = 0; tmladp.removeAll(); loadDiagramInformation(elt, tmladp); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " components"); makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmladp); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " connectors"); makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmladp); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " subcomponents"); makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmladp); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " real points"); connectConnectorsToRealPoints(tmladp); tmladp.structureChanged(); //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " post loading"); makePostLoading(tmladp, 0); } } } decX = decXTmp; decY = decYTmp; decId = decIdTmp; } catch (SAXException saxe) { TraceManager.addError("Loading 901 " + saxe.getMessage()); throw new MalformedModelingException(); } } public void makePostLoading(TDiagramPanel tdp, int beginIndex) throws MalformedModelingException { TGComponent tgc; //TraceManager.addDev("Post loading of diagram " + tdp.toString()); List<TGComponent> list = tdp.getComponentList(); for (int i = 0; i < list.size() - beginIndex; i++) { tgc = list.get(i); //TraceManager.addDev(tgc.getName()); //TraceManager.addDev(tgc.getValue()); tgc.makePostLoading(decId); } /*SwingUtilities.invokeAndWait(new Runnable() { public void run() { mgui.repaintAll(); } });*/ //TraceManager.addDev("Post loading of diagram " + tdp.toString() + " achieved"); } public void makeXMLComponents(NodeList nl, TDiagramPanel tdp) throws SAXException, MalformedModelingException { Node n; //Element elt; TGComponent tgc; if (tdp == null) { throw new MalformedModelingException(); } //boolean error = false; tdp.drawable = false; try { for (int i = 0; i < nl.getLength(); i++) { n = nl.item(i); if (n == null) { TraceManager.addDev("Null component"); } if (n.getNodeType() == Node.ELEMENT_NODE) { try { tgc = makeXMLComponent(n, tdp); //TraceManager.addDev("About to add component= " + tgc); if ((tgc != null) && (tgc.getFather() == null)) { //TraceManager.addDev("Component added to diagram tgc=" + tgc); tdp.addBuiltComponent(tgc); } else if (tgc == null) { TraceManager.addDev("Component not added to diagram:" + tgc); } } catch (MalformedModelingException mme) { int type = getTypeOfComponentNode(n); String t = "unknown"; if (type > 0) { t = "" + type; } TraceManager.addDev("A badly formed component could not be created in the diagram:" + " diagram: " + tdp + " component:" + n); mme.printStackTrace(); UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, "A component could not be correctly loaded - type=" + t); ce.setTDiagramPanel(tdp); checkingErrors.add(ce); //error = true; } } } } catch (SAXException se) { tdp.drawable = true; throw se; } catch (Exception e) { tdp.drawable = true; throw e; } tdp.drawable = true; /*if (error) { throw new MalformedModelingException(); }*/ } public int getTypeOfComponentNode(Node n) { try { //NodeList nl = n.getChildNodes(); Element elt = (Element) n; return Integer.decode(elt.getAttribute("type")).intValue(); } catch (Exception e) { } return -1; } public TGComponent makeXMLComponent(Node n, TDiagramPanel tdp) throws SAXException, MalformedModelingException { Element elt; Element elt1; TGComponent tgc = null; TGComponent father; // TGComponent reference; // try { NodeList nl = n.getChildNodes(); elt = (Element) n; elt1 = elt; //TraceManager.addDev("elt=" + elt); int myType = Integer.decode(elt.getAttribute("type")).intValue(); int myId = Integer.decode(elt.getAttribute("id")).intValue() + decId; int myX = -1, myY = -1, myWidth = -1, myHeight = -1; int myMinWidth = -1, myMinHeight = -1, myMinDesiredWidth = -1, myMinDesiredHeight = -1; int myMinX = -1, myMaxX = -1, myMinY = -1, myMaxY = -1; String myName = null, myValue = null; String customData = null; Vector<Point> tgcpList = new Vector<Point>(); Point p; int i, x, y; int fatherId = -1, fatherNum = -1; int referenceId = -1; String pre = "", post = ""; String internalComment = ""; boolean accessibility = false; boolean latencyCheck = false; boolean invariant = false; boolean breakpoint = false; boolean hidden = false; boolean masterMutex = false; boolean enable = true; for (i = 0; i < nl.getLength(); i++) { n = nl.item(i); if (n.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) n; if (elt.getTagName().equals("cdparam")) { myX = Integer.decode(elt.getAttribute("x")).intValue() + decX; myY = Integer.decode(elt.getAttribute("y")).intValue() + decY; } else if (elt.getTagName().equals("sizeparam")) { myWidth = Integer.decode(elt.getAttribute("width")).intValue(); myHeight = Integer.decode(elt.getAttribute("height")).intValue(); myMinWidth = Integer.decode(elt.getAttribute("minWidth")).intValue(); if (myMinWidth < 1) { myMinWidth = 1; } if (myWidth < myMinWidth) { myWidth = myMinWidth; } myMinHeight = Integer.decode(elt.getAttribute("minHeight")).intValue(); if (myMinHeight < 1) { myMinHeight = 1; } if (myHeight < myMinHeight) { myHeight = myMinHeight; } myMinDesiredWidth = Integer.decode(elt.getAttribute("minDesiredWidth")).intValue(); myMinDesiredHeight = Integer.decode(elt.getAttribute("minDesiredHeight")).intValue(); } else if (elt.getTagName().equals("cdrectangleparam")) { myMinX = Integer.decode(elt.getAttribute("minX")).intValue(); myMaxX = Integer.decode(elt.getAttribute("maxX")).intValue(); myMinY = Integer.decode(elt.getAttribute("minY")).intValue(); myMaxY = Integer.decode(elt.getAttribute("maxY")).intValue(); } else if (elt.getTagName().equals("infoparam")) { myName = elt.getAttribute("name"); myValue = elt.getAttribute("value"); } else if (elt.getTagName().equals("custom")) { customData = elt.getAttribute("data"); } else if (elt.getTagName().equals("hidden")) { hidden = elt.getAttribute("value").equals("true"); } else if (elt.getTagName().equals("enabled")) { enable = elt.getAttribute("value").equals("true"); } else if (elt.getTagName().equals("TGConnectingPoint")) { x = Integer.decode(elt.getAttribute("num")).intValue(); y = Integer.decode(elt.getAttribute("id")).intValue() + decId; tgcpList.add(new Point(x, y)); } else if (elt.getTagName().equals("father")) { fatherId = Integer.decode(elt.getAttribute("id")).intValue(); fatherNum = Integer.decode(elt.getAttribute("num")).intValue(); } else if (elt.getTagName().equals("reference")) { referenceId = Integer.decode(elt.getAttribute("id")).intValue(); } else if (elt.getTagName().equals("prejavacode")) { pre += elt.getAttribute("value") + "\n"; } else if (elt.getTagName().equals("postjavacode")) { post += elt.getAttribute("value") + "\n"; } else if (elt.getTagName().equals("InternalComment")) { internalComment += elt.getAttribute("value") + "\n"; } else if (elt.getTagName().equals("accessibility")) { accessibility = true; } else if (elt.getTagName().equals("latencyCheck")) { latencyCheck = true; } else if (elt.getTagName().equals("invariant")) { invariant = true; } else if (elt.getTagName().equals("mastermutex")) { masterMutex = true; } else if (elt.getTagName().equals("breakpoint")) { breakpoint = true; } } } if ((myId == -1) || (myX == -1) || (myY == -1) || (myWidth == -1) || (myHeight == -1)) { TraceManager.addDev("Malformed id"); throw new MalformedModelingException(); } //TraceManager.addDev("Making TGComponent of type " + myType + " and of name " + myName); //TGComponent is ready to be built if (fatherId != -1) { fatherId += decId; // internal component //TraceManager.addDev("I am " + myName); //TraceManager.addDev("Searching for component with id " + fatherId); father = tdp.findComponentWithId(fatherId); if (father == null) { TraceManager.addDev("Malformed father"); throw new MalformedModelingException(); } //TraceManager.addDev("Done"); //TraceManager.addDev("Father My value is " + father.getValue()); //TraceManager.addDev("My class is " + father.getClass()); //TraceManager.addDev("Searching for component " + fatherNum + " at " + tgc.getName()); tgc = father.getInternalTGComponent(fatherNum); if (tgc == null) { // To be added to its father -> swallow component if (father instanceof SwallowTGComponent) { //TraceManager.addDev("1 Must add the component to its father:"); tgc = TGComponentManager.addComponent(myX, myY, myType, tdp); //TraceManager.addDev("2 Must add the component to its father:" + tgc); if (tgc instanceof SwallowedTGComponent) { //TraceManager.addDev("3 Must add the component to its father:"); ((SwallowTGComponent) father).addSwallowedTGComponent(tgc, myX, myY); //TraceManager.addDev("Swallowed to father = " + father.getValue() + ". My name=" + myName + " decId=" + decId); } else { TraceManager.addDev("Malformed swallow 1"); throw new MalformedModelingException(); } } else { TraceManager.addDev("Malformed swallow 2"); throw new MalformedModelingException(); } } if (tgc != null) { tgc.setCdRectangle(myMinX, myMaxX, myMinY, myMaxY); tgc.setCd(myX, myY); //TraceManager.addDev("set cd of " + tgc.getName()); } } else { tgc = TGComponentManager.addComponent(myX, myY, myType, tdp); } // TraceManager.addDev("TGComponent (" + tgc + ") built " + myType); if (tgc == null) { TraceManager.addDev("Malformed null"); throw new MalformedModelingException(); } if (myName != null) { tgc.setName(myName); } if (customData != null) { tgc.setCustomData(customData); } if (referenceId != -1) { referenceId += decId; for (TURTLEPanel turtlepanel : panels) { for (TDiagramPanel tdpanel : turtlepanel.panels) { if (tdpanel.findComponentWithId(referenceId) != null) { tgc.reference = tdpanel.findComponentWithId(referenceId); break; } } } } tgc.setEnabled(enable); /*if (tgc instanceof TCDTObject) { TraceManager.addDev("Loading " + myValue); }*/ String oldClassName = myValue; //TraceManager.addDev("Old class name=" + oldClassName); //Added by Solange if ((myValue != null) && (!myValue.equals(null))) { if (tgc instanceof ProCSDComponent) { //Added by Solange //And removed by emil //myValue=generateNameIfInUse(myValue); // tgc.setValueWithChange(myValue); //TraceManager.addDev("myValue=" + myValue); } //until here if ((tgc instanceof TCDTClass) && (decId > 0)) { if (tdp.isAlreadyATClassName(myValue)) { myValue = tdp.findTClassName(myValue + "_"); } } if ((tgc instanceof TMLTaskOperator) && (decId > 0)) { if (tdp.isAlreadyATMLTaskName(myValue)) { myValue = tdp.findTMLTaskName(myValue + "_"); } } if ((tgc instanceof AvatarBDBlock) && (decId > 0)) { if (tdp.isAlreadyAnAvatarBDBlockName(myValue)) { myValue = tdp.findAvatarBDBlockName(myValue + "_"); } } if ((tgc instanceof TMLCPrimitiveComponent) && (decId > 0)) { if (tdp.isAlreadyATMLPrimitiveComponentName(myValue)) { myValue = tdp.findTMLPrimitiveComponentName(myValue + "_"); } //TraceManager.addDev("MyValue=" + myValue); } if ((tgc instanceof TOSClass) && (decId > 0)) { if (tdp.isAlreadyATOSClassName(myValue)) { myValue = tdp.findTOSClassName(myValue + "_"); } } //TraceManager.addDev("myValue=" + myValue); tgc.setValueWithChange(myValue); //TraceManager.addDev("value done"); if ((tgc instanceof TCDTClass) && (decId > 0)) { loadActivityDiagram(tdp, oldClassName, myValue); } if ((tgc instanceof AvatarBDBlock) && (decId > 0)) { //TraceManager.addDev("Going to load ad of task " + oldClassName + " myValue=" + myValue); loadAvatarSMD(tdp, oldClassName, myValue); } if ((tgc instanceof TMLTaskOperator) && (decId > 0)) { //TraceManager.addDev("Going to load ad of task " + oldClassName + " myValue=" + myValue); loadTMLActivityDiagram(tdp, oldClassName, myValue); } if ((tgc instanceof TMLCPrimitiveComponent) && (decId > 0)) { //TraceManager.addDev("Going to load ad of component " + oldClassName + " myValue=" + myValue); loadTMLActivityDiagram(tdp, oldClassName, myValue); } } tgc.forceId(myId); tgc.setLoaded(true); tgc.setInternalLoaded(false); tgc.setMinSize(myMinWidth, myMinHeight); tgc.setMinDesiredSize(myMinDesiredWidth, myMinDesiredHeight); // To handle old models if (!(tgc instanceof TGCPointOfConnector)) { tgc.resize(myWidth, myHeight); tgc.hasBeenResized(); } //TraceManager.addDev("Options set"); if (pre.compareTo("") != 0) { tgc.setPreJavaCode(pre); } if (post.compareTo("") != 0) { tgc.setPostJavaCode(post); } if (internalComment.compareTo("") != 0) { tgc.setInternalComment(internalComment); } if (accessibility) { tgc.setCheckableAccessibility(accessibility); } if (latencyCheck) { tgc.setCheckLatency(latencyCheck); } if (invariant) { tgc.setCheckableInvariant(invariant); } if (masterMutex) { tgc.setMasterMutex(true); } if (breakpoint) { tgc.setBreakpoint(breakpoint); } //extra param // TraceManager.addDev("Extra params" + tgc.getClass()); //TraceManager.addDev("My value = " + tgc.getValue()); tgc.loadExtraParam(elt1.getElementsByTagName("extraparam"), decX, decY, decId); //TraceManager.addDev("Extra param ok"); //#issue 82 if ((myValue != null) && (!myValue.equals(null))) { if ((tgc instanceof TMLCPrimitivePort) && (decId > 0)) { if (tdp.isAlreadyATMLPrimitivePortName(myValue)) { myValue = tdp.findTMLCPrimitivePortName(myValue + "_"); //TraceManager.addDev("MyValue=" + myValue); ((TMLCPrimitivePort) tgc).setPortName(((TMLCPrimitivePort) tgc).getPortNameFromValue(myValue)); ((TMLCPrimitivePort) tgc).commName = ((TMLCPrimitivePort) tgc).getPortNameFromValue(myValue); // ((TMLCPrimitivePort) tgc).loadExtraParam(elt1.getElementsByTagName("extraparam"), decX, decY, decId); // TraceManager.addDev("getPortType = " + ((TMLCPrimitivePort) tgc).getPortTypeName() + "" + // "\ngetPortName = " + ((TMLCPrimitivePort) tgc).getPortName()); tgc.setValue(myValue); } } } if ((tgc instanceof TCDTObject) && (decId > 0)) { TCDTObject to = (TCDTObject) tgc; //TraceManager.addDev("Setting TObject name to: " + to.getObjectName()); //TraceManager.addDev("Setting TObject name to: " + tdp.findTObjectName(to.getObjectName())); to.setObjectName(tdp.findTObjectName(to.getObjectName())); } //TraceManager.addDev(tgc.toString()); //TraceManager.addDev("Making connecting points " + tgcpList.size()); for (i = 0; i < tgcpList.size(); i++) { p = tgcpList.elementAt(i); if (!tgc.setIdTGConnectingPoint(p.x, p.y)) { //TraceManager.addDev("Warning: a connecting point has been removed"); //throw new MalformedModelingException(); } } //TraceManager.addDev("Not yet except!"); if (decId > 0) { tdp.bringToFront(tgc); } //TraceManager.addDev("Connecting points done " + myType); /*if (tgc instanceof TCDTObject) { TraceManager.addDev("getValue " + tgc.getValue()); }*/ } catch (Exception e) { TraceManager.addError("Exception XML Component " + e.getMessage() + "trace=" + e.getStackTrace()); throw new MalformedModelingException(e); } return tgc; } //method added by Solange public String generateNameIfInUse(String myName) { if (!(mgui.getCurrentTURTLEPanel().nameInUse(myName))) { return myName; } String other; for (int w = 0; w < 100000; w++) { other = myName + "_" + w; if (!(mgui.getCurrentTURTLEPanel().nameInUse(other))) { return other; } } return null; } //until here public void makePostProcessing(TDiagramPanel tdp) throws MalformedModelingException { //TraceManager.addDev("Make post processing!"); if (tdp instanceof TClassDiagramPanel) { ((TClassDiagramPanel) tdp).makePostLoadingProcessing(); } //TraceManager.addDev("Post processing is over"); } public void makeXMLConnectors(NodeList nl, TDiagramPanel tdp) throws SAXException, MalformedModelingException { Node n; //Element elt; TGConnector tgco = null; int i; if (tdp == null) { throw new MalformedModelingException(); } for (i = 0; i < nl.getLength(); i++) { n = nl.item(i); if (n.getNodeType() == Node.ELEMENT_NODE) { tgco = makeXMLConnector(n, tdp); if (tgco != null) { tdp.addBuiltConnector(tgco); } else { TraceManager.addDev("Connector error"); throw new MalformedModelingException(); } } } } public void connectConnectorsToRealPoints(TDiagramPanel tdp) throws MalformedModelingException { List<TGComponent> list = tdp.getComponentList(); TGConnectingPoint p1, p2, p3, p4; //TGConnectingPointTmp p; int i; TGComponent tgc; //TGComponent tgctmp; TGConnector tgco = null; //boolean error = false; TGConnectorInfo tgcoinfo; //connect connectors to their real connecting point //TraceManager.addDev("Valid connectors ?"); for (i = 0; i < list.size(); i++) { tgc = list.get(i); if (tgc instanceof TGConnector) { tgco = (TGConnector) tgc; p1 = tgco.getTGConnectingPointP1(); p2 = tgco.getTGConnectingPointP2(); if ((p1 instanceof TGConnectingPointTmp) && (p2 instanceof TGConnectingPointTmp)) { //TraceManager.addDev("Searching for id " + p1.getId()); p3 = tdp.findConnectingPoint(p1.getId()); //TraceManager.addDev("Searching for id " + p2.getId()); p4 = tdp.findConnectingPoint(p2.getId()); if (((p3 == null) || (p4 == null)) && (decId != 0)) { if (list.remove(tgc)) { i--; } else { throw new MalformedModelingException(); } } else { if ((p3 == null) || (p4 == null)) { //warning = true; if (p3 == null) { //TraceManager.addDev("Error on first id"); } if (p4 == null) { //TraceManager.addDev("Error on second id"); } tgcoinfo = new TGConnectorInfo(); tgcoinfo.connector = tgco; pendingConnectors.add(tgcoinfo); TraceManager.addDev("One connector added to pending list"); } else { tgco.setP1(p3); p3.setFree(false); tgco.setP2(p4); p4.setFree(false); } } } } } /*for(TGConnector con: connectorsToRemove) { list.remove(con); }*/ /*if (error) { TraceManager.addDev("Connecting error: " + connectorsToRemove.size() + " connectors have been removed"); throw new MalformedModelingException(); }*/ } public void makeLastLoad() { // Update references on all diagrams //TraceManager.addDev("Updating ports"); //mgui.updateAllPorts(); // Update ports on all diagrams //TraceManager.addDev("Updating references / ports"); mgui.updateAllReferences(); mgui.updateAllPorts(); //TraceManager.addDev("Pending connectors"); // Make use of pending connectors TGConnectingPoint p1, p2, p3, p4; TDiagramPanel tdp; TGConnector tgco; if (pendingConnectors != null) { for (TGConnectorInfo info : pendingConnectors) { tgco = info.connector; if (tgco != null) { tdp = tgco.getTDiagramPanel(); if (tdp != null) { p1 = tgco.getTGConnectingPointP1(); p2 = tgco.getTGConnectingPointP2(); if ((p1 instanceof TGConnectingPointTmp) && (p2 instanceof TGConnectingPointTmp)) { TraceManager.addDev("Searching for id " + p1.getId()); p3 = tdp.findConnectingPoint(p1.getId()); TraceManager.addDev("Searching for id " + p2.getId()); p4 = tdp.findConnectingPoint(p2.getId()); if ((p3 == null) || (p4 == null)) { //warning = true; if (p3 == null) { TraceManager.addDev("Error on first id"); } if (p4 == null) { TraceManager.addDev("Error on second id"); } TraceManager.addDev("One connector ignored"); } else { tgco.setP1(p3); p3.setFree(false); tgco.setP2(p4); p4.setFree(false); } } } } } pendingConnectors.clear(); } //TraceManager.addDev("Last load done"); } public TGConnector makeXMLConnector(Node n, TDiagramPanel tdp) throws SAXException, MalformedModelingException { Element elt, elt1; TGConnector tgco = null; //TGComponent tgc = null; //TraceManager.addDev(n.toString()); try { NodeList nl = n.getChildNodes(); elt = (Element) n; elt1 = elt; int myType = Integer.decode(elt.getAttribute("type")).intValue(); int myId = Integer.decode(elt.getAttribute("id")).intValue() + decId; int myX = -1, myY = -1, myWidth = -1, myHeight = -1; int myMinWidth = -1, myMinHeight = -1, myMinDesiredWidth = -1, myMinDesiredHeight = -1; int myMaxWidth = -1, myMaxHeight = -1; String myName = null, myValue = null; int tmpx, tmpy, tmpid; TGConnectingPoint p1 = null, p2 = null; Vector<Point> pointList = new Vector<Point>(); Vector<Point> tgcpList = new Vector<Point>(); Point p; int i, x, y; //int fatherId = -1, fatherNum = -1; boolean automaticDrawing = true; for (i = 0; i < nl.getLength(); i++) { n = nl.item(i); if (n.getNodeType() == Node.ELEMENT_NODE) { elt = (Element) n; if (elt.getTagName().equals("cdparam")) { myX = Integer.decode(elt.getAttribute("x")).intValue() + decX; myY = Integer.decode(elt.getAttribute("y")).intValue() + decY; } else if (elt.getTagName().equals("sizeparam")) { myWidth = Integer.decode(elt.getAttribute("width")).intValue(); myHeight = Integer.decode(elt.getAttribute("height")).intValue(); myMinWidth = Integer.decode(elt.getAttribute("minWidth")).intValue(); myMinHeight = Integer.decode(elt.getAttribute("minHeight")).intValue(); if ((elt.getAttribute("maxWidth") != null) && (elt.getAttribute("maxWidth").length() > 0)) { // Test is made for compatibility with old versions //TraceManager.addDev("maxWidth = " + elt.getAttribute("maxWidth")); myMaxWidth = Integer.decode(elt.getAttribute("maxWidth")).intValue(); myMaxHeight = Integer.decode(elt.getAttribute("maxHeight")).intValue(); } myMinDesiredWidth = Integer.decode(elt.getAttribute("minDesiredWidth")).intValue(); myMinDesiredHeight = Integer.decode(elt.getAttribute("minDesiredHeight")).intValue(); } else if (elt.getTagName().equals("infoparam")) { myName = elt.getAttribute("name"); myValue = elt.getAttribute("value"); } else if (elt.getTagName().equals("P1")) { tmpx = Integer.decode(elt.getAttribute("x")).intValue() + decX; tmpy = Integer.decode(elt.getAttribute("y")).intValue() + decY; tmpid = Integer.decode(elt.getAttribute("id")).intValue() + decId; TGComponent tgc1 = TGComponentManager.addComponent(tmpx, tmpy, TGComponentManager.TAD_START_STATE, tdp); p1 = new TGConnectingPointTmp(tgc1, tmpx, tmpy, tmpid); //TraceManager.addDev("P1id = " + tmpid); } else if (elt.getTagName().equals("P2")) { tmpx = Integer.decode(elt.getAttribute("x")).intValue() + decX; tmpy = Integer.decode(elt.getAttribute("y")).intValue() + decY; tmpid = Integer.decode(elt.getAttribute("id")).intValue() + decId; TGComponent tgc2 = TGComponentManager.addComponent(tmpx, tmpy, TGComponentManager.TAD_START_STATE, tdp); p2 = new TGConnectingPointTmp(tgc2, tmpx, tmpy, tmpid); //TraceManager.addDev("P2id = " + tmpid); } else if (elt.getTagName().equals("Point")) { tmpx = Integer.decode(elt.getAttribute("x")).intValue() + decX; tmpy = Integer.decode(elt.getAttribute("y")).intValue() + decY; pointList.add(new Point(tmpx, tmpy)); } else if (elt.getTagName().equals("TGConnectingPoint")) { x = Integer.decode(elt.getAttribute("num")).intValue(); y = Integer.decode(elt.getAttribute("id")).intValue() + decId; tgcpList.add(new Point(x, y)); //TraceManager.addDev(" adding Connecting point !"); } else if (elt.getTagName().equals("AutomaticDrawing")) { //TraceManager.addDev("AutomaticDrawing=" + elt.getAttribute("data")); //TraceManager.addDev("set to true"); automaticDrawing = elt.getAttribute("data").compareTo("true") == 0; //automaticDrawing = Boolean.getBoolean(elt.getAttribute("data")); } } } if ((myType == -1) || (myId == -1) || (myX == -1) || (myY == -1) || (myWidth == -1) || (myHeight == -1) || (p1 == null) || (p2 == null)) { throw new MalformedModelingException(); } //TGConnector is ready to be built //TraceManager.addDev("Making TGConnector of type " + myType); tgco = TGComponentManager.addConnector(myX, myY, myType, tdp, p1, p2, pointList); //TraceManager.addDev("TGConnector built " + myType); if (tgco == null) { TraceManager.addDev("TGCO is null myType: " + myType); throw new MalformedModelingException(); } tgco.setAutomaticDrawing(automaticDrawing); if (myName != null) { tgco.setName(myName); } if ((myValue != null) && (!myValue.equals(null))) { tgco.setValueWithChange(myValue); } tgco.forceId(myId); tgco.setLoaded(true); tgco.setInternalLoaded(false); tgco.setMinSize(myMinWidth, myMinHeight); tgco.setMaxSize(myMaxWidth, myMaxHeight); tgco.setMinDesiredSize(myMinDesiredWidth, myMinDesiredHeight); tgco.resize(myWidth, myHeight); tgco.loadExtraParam(elt1.getElementsByTagName("extraparam"), decX, decY, decId); //TraceManager.addDev("Making connecting points " + myType); for (i = 0; i < tgcpList.size(); i++) { p = tgcpList.elementAt(i); if (!tgco.setIdTGConnectingPoint(p.x, p.y)) { throw new MalformedModelingException(); } } if (decId > 0) { tdp.bringToFront(tgco); } //TraceManager.addDev("Connecting points done " + myType); } catch (Exception e) { TraceManager.addError("Exception on connectors: HERE I AM"); throw new MalformedModelingException(); } return tgco; } public boolean buildTURTLEModelingFromAnalysis(AnalysisPanel ap) throws AnalysisSyntaxException { HMSC h; //listE = new CorrespondanceTGElement(); checkingErrors = new LinkedList<CheckingError>(); AnalysisPanelTranslator apt = new AnalysisPanelTranslator(ap, mgui); try { h = apt.translateHMSC(); listE = apt.getCorrespondanceTGElement(); checkingErrors = apt.getErrors(); apt.translateMSCs(h); listE = apt.getCorrespondanceTGElement(); checkingErrors = apt.getErrors(); } catch (AnalysisSyntaxException ase) { CheckingError ce = new CheckingError(CheckingError.STRUCTURE_ERROR, ase.getMessage()); checkingErrors.add(ce); throw ase; } SDTranslator sd = new SDTranslator(h); checkingErrors = null; warnings = new LinkedList<CheckingError>(); //TraceManager.addDev("Step 02"); mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); //TraceManager.addDev("Step 1"); try { tm = sd.toTURTLEModeling(); tmState = 0; } catch (SDTranslationException e) { checkingErrors = new LinkedList<CheckingError>(); CheckingError error = new CheckingError(CheckingError.STRUCTURE_ERROR, e.getMessage()); checkingErrors.add(error); throw new AnalysisSyntaxException("Problem during translation to a design TURTLE modeling"); } //TraceManager.addDev("Step 2"); if (checkingErrors != null) { return false; } // modeling is built // Now check it ! //TraceManager.addDev("Step 3"); TURTLEModelChecker tmc = new TURTLEModelChecker(tm); checkingErrors = tmc.syntaxAnalysisChecking(); //TraceManager.addDev("Step 4"); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); return false; } else { mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_OK); return true; } } public void generateDesign() { generateDesign(tm); } public void generateDesign(TURTLEModeling tm) { //TURTLEPanel tp = mgui.getCurrentTURTLEPanel(); nbSuggestedDesign++; TURTLEModelingDrawer tmd = new TURTLEModelingDrawer(mgui); tmd.setTURTLEModeling(tm); tmd.draw(nbSuggestedDesign); mgui.changeMade(null, -1); } public void generateIOD(HMSC _hmsc, MSC _msc) { MSCDrawer mscd = new MSCDrawer(mgui); mscd.setHMSC(_hmsc); mscd.setMSC(_msc); mscd.drawFromMSC(nbSuggestedDesign); nbSuggestedDesign++; mgui.changeMade(null, -1); } public boolean translateDeployment(DeploymentPanel dp) { // Builds a TURTLE modeling from a deployment diagram TraceManager.addDev("deployement"); checkingErrors = new LinkedList<CheckingError>(); warnings = new LinkedList<CheckingError>(); mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); tm = new TURTLEModeling(); tmState = 0; listE = new CorrespondanceTGElement(); mgui.reinitCountOfPanels(); List<TDDNode> ll; Iterator<TDDNode> iterator;//, iterator2; // First step: adding all necessary classes + their ad ll = dp.tddp.getListOfNodes(); iterator = ll.listIterator(); TDDNode node; Vector<TDDArtifact> artifacts; TDDArtifact art; int i; DesignPanel dp2; TGComponent tgc; //TCDTClass tc; String name; TClass t; DesignPanelTranslator dpt; // Loop on nodes while (iterator.hasNext()) { node = iterator.next(); // Loop on artifact artifacts = node.getArtifactList(); for (i = 0; i < artifacts.size(); i++) { art = artifacts.elementAt(i); dp2 = art.getDesignPanel(); final Iterator<TGComponent> iterator2 = dp2.tcdp.getComponentList().listIterator(); LinkedList<TClassInterface> tclasses = new LinkedList<TClassInterface>(); while (iterator2.hasNext()) { tgc = iterator2.next(); if (tgc instanceof TClassInterface) { TraceManager.addDev("Found tclass: " + tgc.getValue()); tclasses.add((TClassInterface) tgc); } } if (tclasses.size() > 0) { name = node.getNodeName() + "__" + art.getValue() + "__"; dpt = new DesignPanelTranslator(dp2); dpt.addTClasses(dp2, tclasses, name, tm); dpt.addRelations(dp2, name, tm); listE.merge(dpt.getCorrespondanceTGElement()); checkingErrors.addAll(dpt.getErrors()); // Set package name of tclasses for (int j = 0; j < tclasses.size(); j++) { tgc = (TGComponent) tclasses.get(j); t = listE.getTClass(tgc); if (t != null) { TraceManager.addDev("Setting package name of " + t.getName() + " to " + node.getNodeName()); t.setPackageName(node.getNodeName() + "_" + art.getValue()); } } } } } // Second step : dealing with links! DDTranslator ddt = new DDTranslator(dp, tm, listE); try { TraceManager.addDev("Dealing with links!"); ddt.translateLinks(); } catch (DDSyntaxException e) { //throw new AnalysisSyntaxException("Problem during translation to a design TURTLE modeling"); TraceManager.addDev("Error during translation: " + e.getMessage()); return false; } mgui.setMode(MainGUI.GEN_DESIGN_OK); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } // modeling is built // Now check it ! TURTLEModelChecker tmc = new TURTLEModelChecker(tm); checkingErrors = tmc.syntaxAnalysisChecking(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } else { mgui.setMode(MainGUI.GEN_DESIGN_OK); return true; } } public boolean translateAttackTreePanel(AttackTreePanel atp) { AttackTreePanelTranslator att = new AttackTreePanelTranslator(atp); /*attackTree =*/ att.translateToAttackTreeDataStructure(); checkingErrors = att.getCheckingErrors(); warnings = att.getWarnings(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } avatarspec = att.generateAvatarSpec(); //TraceManager.addDev("Avatar spec:" + avatarspec); return true; } public boolean translateFaultTreePanel(FaultTreePanel atp) { FaultTreePanelTranslator att = new FaultTreePanelTranslator(atp); /*attackTree =*/ att.translateToFaultTreeDataStructure(); checkingErrors = att.getCheckingErrors(); warnings = att.getWarnings(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } avatarspec = att.generateAvatarSpec(); //TraceManager.addDev("Avatar spec:" + avatarspec); return true; } public boolean translateNC(NCPanel ncp) { TraceManager.addDev("Translating NC"); checkingErrors = new LinkedList<CheckingError>(); warnings = new LinkedList<CheckingError>(); mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); GNCModeling gncm = new GNCModeling(ncp); ncs = gncm.translateToNCStructure(); listE = gncm.getCorrespondanceTable(); checkingErrors = gncm.getCheckingErrors(); warnings = gncm.getCheckingWarnings(); TraceManager.addDev("errors:" + checkingErrors.size() + " warnings:" + warnings.size()); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } else { // Generate XML file try { if (SpecConfigTTool.NCDirectory != null) { File dir = new File(SpecConfigTTool.NCDirectory); if (!dir.exists()) dir.mkdirs(); } String fileName = "network.xml"; if (SpecConfigTTool.NCDirectory != null) { fileName = SpecConfigTTool.NCDirectory + fileName; } TraceManager.addDev("Saving in network structure in file: " + fileName); FileUtils.saveFile(fileName, ncs.toISAENetworkXML()); fileName = "traffics.xml"; if (SpecConfigTTool.NCDirectory != null) { fileName = SpecConfigTTool.NCDirectory + fileName; } TraceManager.addDev("Saving in traffics in file: " + fileName); FileUtils.saveFile(fileName, ncs.toISAETrafficsXML()); TraceManager.addDev("Save done"); } catch (FileException fe) { TraceManager.addError("Could not save NC in file:" + fe.getMessage()); } mgui.setMode(MainGUI.NC_OK); return true; } } private void nullifyTMLModeling() { tmlm = null; artificialtmap = null; tmap = null; tmlcp = null; } public boolean translateTMLDesign(Vector<? extends TGComponent> tasksToTakeIntoAccount, TMLDesignPanel tmldp, boolean optimize) { nullifyTMLModeling(); // List<TMLError> warningsOptimize = new ArrayList<TMLError>(); warnings = new LinkedList<CheckingError>(); mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); GTMLModeling gtmlm = new GTMLModeling(tmldp, true); gtmlm.setTasks(tasksToTakeIntoAccount); tmlm = gtmlm.translateToTMLModeling(true); //tmlm.removeAllRandomSequences(); //TraceManager.addDev("New TML Modeling:" + tmlm.toString()); //mgui.generateTMLTxt(); artificialtmap = tmlm.getDefaultMapping(); tmap = null; listE = gtmlm.getCorrespondanceTable(); //TraceManager.addDev("TML Modeling translated"); //TraceManager.addDev("----- TML Modeling -----"); //TraceManager.addDev(tmlm.toString()); //TraceManager.addDev("------------------------"); checkingErrors = gtmlm.getCheckingErrors(); warnings = gtmlm.getCheckingWarnings(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { analyzeErrors(); return false; } else { // if (optimize) { // warningsOptimize = tmlm.optimize(); // } tmState = 2; mgui.resetAllDIPLOIDs(); listE.useDIPLOIDs(); return true; //TraceManager.addDev("tm generated:"); //tm.print(); } } public Vector<CheckingError> convertToCheckingErrorTMLErrors(List<TMLError> warningsOptimize, TDiagramPanel _tdp) { Vector<CheckingError> v = new Vector<CheckingError>(); UICheckingError warning; for (TMLError error : warningsOptimize) { warning = new UICheckingError(CheckingError.BEHAVIOR_ERROR, error.message); warning.setTDiagramPanel(_tdp); v.add(warning); } return v; } public boolean translateTMLComponentDesign(Vector<? extends TGComponent> componentsToTakeIntoAccount, TMLComponentDesignPanel tmlcdp, boolean optimize) { nullifyTMLModeling(); // ArrayList<TMLError> warningsOptimize = new ArrayList<TMLError>(); warnings = new LinkedList<CheckingError>(); mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); GTMLModeling gctmlm = new GTMLModeling(tmlcdp, true); gctmlm.putPrefixName(true); gctmlm.setComponents(componentsToTakeIntoAccount); tmlm = gctmlm.translateToTMLModeling(true); //mgui.generateTMLTxt(); artificialtmap = tmlm.getDefaultMapping(); tmap = null; listE = gctmlm.getCorrespondanceTable(); //TraceManager.addDev("TML Modeling translated"); //TraceManager.addDev("----- TML Modeling -----"); //TraceManager.addDev(tmlm.toString()); //TraceManager.addDev("------------------------"); //mgui.generateTMLTxt(); checkingErrors = gctmlm.getCheckingErrors(); warnings = gctmlm.getCheckingWarnings(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { analyzeErrors(); return false; } else { // if (optimize) { // //TraceManager.addDev("OPTIMIZE"); // warningsOptimize = tmlm.optimize(); // } tmState = 2; //TraceManager.addDev("tm generated:"); mgui.resetAllDIPLOIDs(); listE.useDIPLOIDs(); return true; //tm.print(); } } public boolean translateTMLModeling() { TML2TURTLE tt = new TML2TURTLE(tmlm); tm = tt.generateTURTLEModeling(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { TraceManager.addDev("Error in TURTLE generation"); analyzeErrors(); return false; } else { // Optimize TraceManager.addDev("Optimize"); tm.optimize(); TraceManager.addDev("Optimize done"); TURTLEModelChecker tmc = new TURTLEModelChecker(tm); checkingErrors = tmc.syntaxAnalysisChecking(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { analyzeErrors(); return false; } else { mgui.setMode(MainGUI.GEN_DESIGN_OK); return true; } } } /*public boolean checkSyntaxSystemCAMS(Vector<TGComponent> blocksToTakeIntoAccount, SystemCAMSPanel scp, boolean optimize) { //ajout CD 04/07 FIXME // List<TMLError> warningsOptimize = new ArrayList<TMLError>(); // warnings = new LinkedList<CheckingError> (); // mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); // GTMLModeling gtmlm = new GTMLModeling(scp, true); // // gtmlm.setBlocks(blocksToTakeIntoAccount); //simply transforms the parameter from a Vector to LinkedList // nullifyTMLModeling(); // tmlm = null; // tm = null; // tmState = 1; // // scp = gtmlm.translateToSystemCAMS(); // listE = gtmlm.getCorrespondanceTable(); // checkingErrors = gtmlm.getCheckingErrors(); // avatarspec = gtmlm.avspec; // if ((checkingErrors != null) && (checkingErrors.size() > 0)){ // analyzeErrors(); // warnings = gtmlm.getCheckingWarnings(); // return false; // } else { // if (optimize) { // warningsOptimize = tmap.optimize(); // } // // warnings.addAll(convertToCheckingErrorTMLErrors(warningsOptimize, scp.scp)); // mgui.resetAllDIPLOIDs(); // listE.useDIPLOIDs(); // mgui.setMode(MainGUI.GEN_DESIGN_OK); return true; // } }*/ public boolean checkSyntaxTMLMapping(Vector<TGComponent> nodesToTakeIntoAccount, TMLArchiPanel tmlap, boolean optimize) { List<TMLError> warningsOptimize = new ArrayList<TMLError>(); warnings = new LinkedList<CheckingError>(); mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); //TraceManager.addDev("New TML Mapping"); GTMLModeling gtmlm = new GTMLModeling(tmlap, true); gtmlm.setNodes(nodesToTakeIntoAccount); //simply transforms the parameter from a Vector to LinkedList nullifyTMLModeling(); tmlm = null; tm = null; tmState = 1; tmap = gtmlm.translateToTMLMapping(); listE = gtmlm.getCorrespondanceTable(); checkingErrors = gtmlm.getCheckingErrors(); warnings = gtmlm.getCheckingWarnings(); avatarspec = gtmlm.avspec; if ((checkingErrors != null) && (checkingErrors.size() > 0)) { analyzeErrors(); return false; } else { //tmap.removeAllRandomSequences(); if (optimize) { warningsOptimize = tmap.optimize(); } warnings.addAll(convertToCheckingErrorTMLErrors(warningsOptimize, tmlap.tmlap)); mgui.resetAllDIPLOIDs(); listE.useDIPLOIDs(); mgui.setMode(MainGUI.GEN_DESIGN_OK); return true; } } //Newly introduced to perform Syntax check of CP diagrams. Actually the mapping of CPs onto the architecture is done via SDs, //onto the application is done onto blocks in the architecture. It would be better to have all the mapping information in one //diagram. Up to now, not taking the mapping information into account public boolean checkSyntaxTMLCP(Vector<TGComponent> nodesToTakeIntoAccount, TMLCommunicationPatternPanel tmlcpp, boolean optimize) { //nodesToTakeIntoAccount is the list of SDs and ADs corresponding that compose the CP selected for syntax checking // List<TMLError> warningsOptimize = new ArrayList<TMLError>(); warnings = new LinkedList<CheckingError>(); mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); GTMLModeling gtmlm = new GTMLModeling(tmlcpp, true); TraceManager.addDev("NodesToTakeIntoAccount :" + nodesToTakeIntoAccount.toString()); //Useless because nodesToTakeIntoAccount does not include the mainCP! //gtmlm.setDiagramPanels( nodesToTakeIntoAccount ); //passes the list of nodes (SDs and ADs) to gtml as a LinkedList tmlm = null; tm = null; tmState = 1; nullifyTMLModeling(); //tmlcp is the data structure for a CP corresponding to the graphical description with diagrams tmlcp = gtmlm.translateToTMLCPDataStructure(tmlcpp.getName()); //tmlcp.toString(); /*TraceManager.addDev( "I AM ABOUT TO GENERATE THE TMLtxt CODE!" ); mgui.generateTMLTxt(); //Now generating the TMLtxt code TraceManager.addDev( "TMLtxt CODE GENERATION DONE" );*/ listE = gtmlm.getCorrespondanceTable(); //for( CorrespondanceTGElement element : listE.getNames() ) { TraceManager.addDev("Printing listE.getNames: " + listE.getNames().toString()); TraceManager.addDev("Printing listE.getTG: " + listE.getTG().toString()); TraceManager.addDev("Printing listE.getPanelNames: " + listE.getPanelNames().toString()); TraceManager.addDev("Printing listE.getData: " + listE.getData().toString()); //} checkingErrors = gtmlm.getCheckingErrors(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { //analyzeErrors(); return false; } /*else { //tmcp.removeAllRandomSequences(); if( optimize ) { warningsOptimize = tmap.optimize(); //warningsOptimize = tmcp.optimize(); } warnings.addAll( convertToCheckingErrorTMLErrors(warningsOptimize, tmlcpp.tmlcpp ) ); mgui.resetAllDIPLOIDs(); listE.useDIPLOIDs(); mgui.setMode( MainGUI.GEN_DESIGN_OK ); return true; }*/ return true; //It means that there are no errors } public boolean translateTMLMapping(boolean _sample, boolean _channel, boolean _event, boolean _request, boolean _exec, boolean _busTransfers, boolean _scheduling, boolean _taskState, boolean _channelState, boolean _branching, boolean _terminateCPU, boolean _terminateCPUs, boolean _clocked, String _tickValue, boolean _endClocked, boolean _countTick, boolean _maxCountTick, String _maxCountTickValue, boolean _randomTask) { //TraceManager.addDev("TML=" + tmap.toString()); Mapping2TIF m2tif = new Mapping2TIF(tmap); m2tif.setShowSampleChannels(_sample); m2tif.setShowChannels(_channel); m2tif.setShowEvents(_event); m2tif.setShowRequests(_request); m2tif.setShowExecs(_exec); m2tif.setShowBusTransfers(_busTransfers); m2tif.setShowScheduling(_scheduling); m2tif.setIsClocked(_clocked); m2tif.setTickValue(_tickValue); m2tif.setIsEndClocked(_endClocked); m2tif.setIsCountTick(_countTick); m2tif.hasMaxCountTick(_maxCountTick); if (_maxCountTick) { m2tif.setMaxCountTickValue(_maxCountTickValue); } m2tif.setShowTaskState(_taskState); m2tif.setShowChannelState(_channelState); m2tif.setShowBlockedCPU(_terminateCPU); m2tif.setShowTerminateCPUs(_terminateCPUs); m2tif.setShowBranching(_branching); m2tif.setRandomTasks(_randomTask); tm = m2tif.generateTURTLEModeling(); //StringBuffer sb = tm.printToStringBuffer(); //TraceManager.addDev("tm=" + sb); TraceManager.addDev("tm generated from TMAP"); checkingErrors = m2tif.getCheckingErrors(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } mgui.setMode(MainGUI.GEN_DESIGN_OK); return true; } //Added by Solange public void generateLists(ProactiveDesignPanel pdp) { gpdtemp = new GProactiveDesign(pdp); } // public boolean translateTURTLEOSDesign(TURTLEOSDesignPanel tosdp) { warnings = new LinkedList<CheckingError>(); mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); //TraceManager.addDev("New TML Modeling"); GTURTLEOSModeling gosm = new GTURTLEOSModeling(tosdp); //gtmlm.setTasks(tasksToTakeIntoAccount); //tmlm = gosm.translateToTMLModeling(); //TraceManager.addDev("TML Modeling translated"); //TraceManager.addDev("----- TML Modeling -----"); //TraceManager.addDev(tmlm.toString()); //TraceManager.addDev("------------------------"); tm = gosm.generateTURTLEModeling(); tmState = 0; checkingErrors = gosm.getCheckingErrors(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } else { //TraceManager.addDev("Optimize"); tm.optimize(); //TraceManager.addDev("Optimize done"); TURTLEModelChecker tmc = new TURTLEModelChecker(tm); checkingErrors = tmc.syntaxAnalysisChecking(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } else { warnings = gosm.getCheckingWarnings(); warnings.addAll(tmc.getWarnings()); mgui.setMode(MainGUI.GEN_DESIGN_OK); return true; } } } public boolean translateProactiveDesign(ProactiveDesignPanel pdp) { mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO); GProactiveDesign gpd = new GProactiveDesign(pdp); tm = gpd.generateTURTLEModeling(); tmState = 0; if (gpd.checkSyntax() == false) { TraceManager.addDev("Errors found"); warnings = gpd.getCheckingWarnings(); checkingErrors = gpd.getCheckingErrors(); return false; } TURTLEModelChecker tmc = new TURTLEModelChecker(tm); checkingErrors = tmc.syntaxAnalysisChecking(); warnings = tmc.getWarnings(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } else { //A faire: // tm.optimize(); // warnings = gpd.getCheckingWarnings(); // warnings.addAll(tmc.getWarnings()); mgui.setMode(MainGUI.GEN_DESIGN_OK); return true; } } public void addStates(AvatarStateMachineElement asme, int x, int y, AvatarSMDPanel smp, AvatarBDBlock bl, Map<AvatarStateMachineElement, TGComponent> SMDMap, Map<AvatarStateMachineElement, TGComponent> locMap, Map<AvatarTransition, AvatarStateMachineElement> tranDestMap, Map<AvatarTransition, TGComponent> tranSourceMap) { // TGConnectingPoint tp = new TGConnectingPoint(null, x, y, false, false); //Create dummy tgcomponent TGComponent tgcomp = new AvatarSMDStartState(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); if (asme == null) { return; } if (asme instanceof AvatarStartState) { AvatarSMDStartState smdss = new AvatarSMDStartState(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); tgcomp = smdss; smp.addComponent(smdss, x, y, false, true); SMDMap.put(asme, smdss); // tp = smdss.tgconnectingPointAtIndex(0); locMap.put(asme, smdss); } if (asme instanceof AvatarTransition) { // } if (asme instanceof AvatarRandom) { AvatarSMDRandom smdr = new AvatarSMDRandom(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); smdr.setVariable(((AvatarRandom) asme).getVariable()); smp.addComponent(smdr, x, y, false, true); tgcomp = smdr; SMDMap.put(asme, smdr); locMap.put(asme, smdr); } if (asme instanceof AvatarActionOnSignal) { avatartranslator.AvatarSignal sig = ((AvatarActionOnSignal) asme).getSignal(); if (sig.isIn()) { AvatarSMDReceiveSignal smdrs = new AvatarSMDReceiveSignal(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); tgcomp = smdrs; smp.addComponent(smdrs, x, y, false, true); // String name=sig.minString(); // String parameters = ""; if (((AvatarActionOnSignal) asme).getValues().size() > 0) { parameters += ((AvatarActionOnSignal) asme).getValues().get(0); for (int i = 1; i < ((AvatarActionOnSignal) asme).getValues().size(); i++) { parameters = parameters + "," + ((AvatarActionOnSignal) asme).getValues().get(i); } } String name = sig.getName() + "(" + parameters + ")"; smdrs.setValue(name); // sig.setName(name); smdrs.recalculateSize(); SMDMap.put(asme, smdrs); // tp = smdrs.getFreeTGConnectingPoint(x+smdrs.getWidth()/2,y+smdrs.getHeight()); // TGConnectingPoint tp2 = smdrs.getFreeTGConnectingPoint(x+smdrs.getWidth()/2,y); locMap.put(asme, smdrs); if (bl.getAvatarSignalFromName(name) == null) { //bl.addSignal(new ui.AvatarSignal(0, name, new String[0], new String[0])); } } else { AvatarSMDSendSignal smdss = new AvatarSMDSendSignal(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); tgcomp = smdss; smp.addComponent(smdss, x, y, false, true); String parameters = ""; if (((AvatarActionOnSignal) asme).getValues().size() > 0) { parameters += ((AvatarActionOnSignal) asme).getValues().get(0); for (int i = 1; i < ((AvatarActionOnSignal) asme).getValues().size(); i++) { parameters = parameters + "," + ((AvatarActionOnSignal) asme).getValues().get(i); } } String name = sig.getName() + "(" + parameters + ")"; //String name=sig.minString(); smdss.setValue(name); smdss.recalculateSize(); SMDMap.put(asme, smdss); // tp = smdss.getFreeTGConnectingPoint(x+smdss.getWidth()/2,y+smdss.getHeight()); // TGConnectingPoint tp2 = smdss.getFreeTGConnectingPoint(x+smdss.getWidth()/2,y); locMap.put(asme, smdss); if (bl.getAvatarSignalFromName(name) == null) { // bl.addSignal(new ui.AvatarSignal(1, name, new String[0], new String[0])); } } } if (asme instanceof AvatarStopState) { AvatarSMDStopState smdstop = new AvatarSMDStopState(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); tgcomp = smdstop; SMDMap.put(asme, smdstop); smp.addComponent(smdstop, x, y, false, true); // tp = smdstop.tgconnectingPointAtIndex(0); locMap.put(asme, smdstop); } if (asme instanceof AvatarSetTimer) { AvatarSMDSetTimer timerSet = new AvatarSMDSetTimer(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); tgcomp = timerSet; SMDMap.put(asme, timerSet); smp.addComponent(timerSet, x, y, false, true); // tp = smdstop.tgconnectingPointAtIndex(0); locMap.put(asme, timerSet); } if (asme instanceof AvatarExpireTimer) { AvatarSMDExpireTimer timerExpire = new AvatarSMDExpireTimer(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); tgcomp = timerExpire; SMDMap.put(asme, timerExpire); smp.addComponent(timerExpire, x, y, false, true); // tp = smdstop.tgconnectingPointAtIndex(0); locMap.put(asme, timerExpire); } if (asme instanceof AvatarResetTimer) { AvatarSMDResetTimer timerReset = new AvatarSMDResetTimer(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); tgcomp = timerReset; SMDMap.put(asme, timerReset); smp.addComponent(timerReset, x, y, false, true); // tp = smdstop.tgconnectingPointAtIndex(0); locMap.put(asme, timerReset); } if (asme instanceof AvatarState) { //check if empty checker state /* if (asme.getName().contains("signalstate_")){ //don't add the state, ignore next transition, if (asme.getNexts().size()==1){ AvatarStateMachineElement next = asme.getNext(0).getNext(0); //Reroute transition for (AvatarTransition at: tranDestMap.keySet()){ if (tranDestMap.get(at) == asme){ tranDestMap.put(at, next); } } addStates(next, x, y, smp,bl, SMDMap, locMap, tranDestMap, tranSourceMap); return; } }*/ AvatarSMDState smdstate = new AvatarSMDState(x, y, smp.getMinX(), smp.getMaxX(), smp.getMinY(), smp.getMaxY(), false, null, smp); tgcomp = smdstate; smp.addComponent(smdstate, x, y, false, true); smdstate.setValue(asme.getName()); smdstate.recalculateSize(); SMDMap.put(asme, smdstate); // tp = smdstate.getFreeTGConnectingPoint(x+smdstate.getWidth()/2,y+smdstate.getHeight()); // TGConnectingPoint tp2 = smdstate.getFreeTGConnectingPoint(x+smdstate.getWidth()/2,y); locMap.put(asme, smdstate); } int i = 0; int diff = 300; int ydiff = 50; //int num = asme.nbOfNexts(); if (!(asme instanceof AvatarTransition)) { for (AvatarStateMachineElement el : asme.getNexts()) { if (!(el instanceof AvatarTransition)) { } } } for (AvatarStateMachineElement el : asme.getNexts()) { if (el instanceof AvatarTransition) { tranSourceMap.put((AvatarTransition) el, tgcomp); } else { if (asme instanceof AvatarTransition) { AvatarTransition t = (AvatarTransition) asme; tranDestMap.put(t, el); } } if (!SMDMap.containsKey(el)) { addStates(el, x + diff * i, y + ydiff, smp, bl, SMDMap, locMap, tranDestMap, tranSourceMap); } i++; } return; } public void drawBlockProperties(AvatarBlock ab, AvatarBDBlock bl) { for (avatartranslator.AvatarSignal sig : ab.getSignals()) { String name = sig.getName().split("__")[sig.getName().split("__").length - 1]; // sig.setName(name); String[] types = new String[sig.getListOfAttributes().size()]; String[] typeIds = new String[sig.getListOfAttributes().size()]; int i = 0; for (AvatarAttribute attr : sig.getListOfAttributes()) { types[i] = attr.getType().getStringType(); typeIds[i] = attr.getName(); i++; } //TraceManager.addDev("Adding signal " + sig + " with name=" + name); bl.addSignal(new ui.AvatarSignal(sig.getInOut(), name, types, typeIds)); } bl.setValueWithChange(ab.getName().split("__")[ab.getName().split("__").length - 1]); for (AvatarAttribute attr : ab.getAttributes()) { int type = 5; if (attr.getType() == AvatarType.BOOLEAN) { type = 4; } if (attr.getType() == AvatarType.INTEGER) { type = 0; } if (attr.hasInitialValue()) { bl.addAttribute(new TAttribute(0, attr.getName(), attr.getInitialValue(), type)); } else { bl.addAttribute(new TAttribute(0, attr.getName(), attr.getType().getDefaultInitialValue(), type)); } if (attr.getName().contains("key_") || attr.getName().contains("privKey_")) { hasCrypto = true; bl.addCryptoElements(); } } for (avatartranslator.AvatarMethod method : ab.getMethods()) { bl.addMethodIfApplicable(method.toString().replaceAll(" = 0", "")); } } public void drawPanel(AvatarSpecification avspec, AvatarDesignPanel adp) { // // Check Errors in AVSPEC TraceManager.addDev("Checking syntax of avatar spec."); ArrayList<AvatarError> list = AvatarSyntaxChecker.checkSyntax(avspec); for (AvatarError error : list) { TraceManager.addDev("Error: " + error.toString()); } TraceManager.addDev("Check done. " + checkingErrors.size() + " errors found"); // Go for drawing! hasCrypto = false; //Map<String, Set<String>> originDestMap = new HashMap<String, Set<String>>(); Map<String, AvatarBDBlock> blockMap = new HashMap<String, AvatarBDBlock>(); if (adp == null) { return; } if (avspec == null) { return; } AvatarBDPanel abd = adp.abdp; //Find all blocks, create nested blocks starting from top left int xpos = 10; int ypos = 40; //Create blocks recursively, starting from top level ones with no father //Lowest level blocks should be 100x100, next should be 100x(number of children*100+50)...etc, //Find level #, 0 refers to no father, etc Map<AvatarBlock, Integer> blockLevelMap = new HashMap<AvatarBlock, Integer>(); Map<AvatarBlock, Integer> blockSizeMap = new HashMap<AvatarBlock, Integer>(); Map<AvatarBlock, Integer> blockIncMap = new HashMap<AvatarBlock, Integer>(); int maxLevel = 0; for (AvatarBlock ab : avspec.getListOfBlocks()) { int level = 0; AvatarBlock block = ab; while (block.getFather() != null) { if (blockSizeMap.containsKey(block.getFather())) { blockSizeMap.put(block.getFather(), blockSizeMap.get(block.getFather()) + 1); } else { blockSizeMap.put(block.getFather(), 1); blockIncMap.put(block.getFather(), 10); } level++; block = block.getFather(); } if (level > maxLevel) { maxLevel = level; } if (!blockSizeMap.containsKey(block)) { blockSizeMap.put(block, 0); blockIncMap.put(block, 10); } blockLevelMap.put(ab, level); } for (int level = 0; level < maxLevel + 1; level++) { for (AvatarBlock ab : avspec.getListOfBlocks()) { if (blockLevelMap.get(ab) == level) { if (level == 0) { AvatarBDBlock bl = new AvatarBDBlock(xpos, ypos, abd.getMinX(), abd.getMaxX(), abd.getMinY(), abd.getMaxY(), false, null, abd); abd.addComponent(bl, xpos, ypos, false, true); bl.resize(100 * blockSizeMap.get(ab) + 100, 100 + (maxLevel - level) * 50); drawBlockProperties(ab, bl); AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue()); buildStateMachine(ab, bl, smp); //TraceManager.addDev("Putting in block") blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length - 1], bl); xpos += 100 * blockSizeMap.get(ab) + 200; } else { AvatarBDBlock father = blockMap.get(ab.getFather().getName().split("__")[ab.getFather().getName().split("__").length - 1]); // if (father == null) { // continue; } AvatarBDBlock bl = new AvatarBDBlock(father.getX() + blockIncMap.get(ab.getFather()), father.getY() + 10, abd.getMinX(), abd.getMaxX(), abd.getMinY(), abd.getMaxY(), false, father, abd); abd.addComponent(bl, father.getX() + blockIncMap.get(ab.getFather()), father.getY() + 10, false, true); int size = 100; if (blockSizeMap.containsKey(ab)) { size = 100 * blockSizeMap.get(ab) + 50; } bl.resize(size, 100 + (maxLevel - level) * 50); drawBlockProperties(ab, bl); abd.attach(bl); AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue()); buildStateMachine(ab, bl, smp); blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length - 1], bl); blockIncMap.put(ab.getFather(), blockIncMap.get(ab.getFather()) + size + 10); } } } } for(String s: blockMap.keySet()) { TraceManager.addDev("Key:" + s); } for (AvatarRelation ar : avspec.getRelations()) { String bl1 = ar.block1.getName(); String bl2 = ar.block2.getName(); /*TraceManager.addDev("bl1=" + bl1 + " bl2=" + bl2); AvatarBDBlock ab1 = blockMap.get(bl1); AvatarBDBlock ab2 = blockMap.get(bl2); if (ab1 == null) { TraceManager.addDev("Null ab1 block"); break; } if (ab2 == null) { TraceManager.addDev("Null ab2 block"); break; }*/ bl1 = getLastKeyword(bl1); bl2 = getLastKeyword(bl2); Vector<Point> points = new Vector<Point>(); TGConnectingPoint p1 = blockMap.get(bl1).findFirstFreeTGConnectingPoint(true, true); p1.setFree(false); TGConnectingPoint p2 = blockMap.get(bl2).findFirstFreeTGConnectingPoint(true, true); p2.setFree(false); if (bl2.equals(bl1)) { //Add 2 point so the connection looks square Point p = new Point(p1.getX(), p1.getY() - 10); points.add(p); p = new Point(p2.getX(), p2.getY() - 10); points.add(p); } AvatarBDPortConnector conn = new AvatarBDPortConnector(0, 0, 0, 0, 0, 0, true, null, abd, p1, p2, points); abd.addComponent(conn, 0, 0, false, true); conn.setAsynchronous(ar.isAsynchronous()); conn.setSynchronous(!ar.isAsynchronous()); conn.setAMS(false); conn.setBlocking(ar.isBlocking()); conn.setPrivate(ar.isPrivate()); conn.setSizeOfFIFO(ar.getSizeOfFIFO()); for (int indexSig = 0; indexSig < ar.getSignals1().size(); indexSig++) { //TraceManager.addDev("Adding signal 1: " + ar.getSignal1(i).toString() + " of block " + ar.block1.getName()); conn.addSignal(ar.getSignal1(indexSig).toString(), ar.getSignal1(indexSig).getInOut() == 0, ar.block1.getName().contains(bl1)); //TraceManager.addDev("Adding signal 2:" + ar.getSignal2(i).toString() + " of block " + ar.block2.getName()); conn.addSignal(ar.getSignal2(indexSig).toString(), ar.getSignal2(indexSig).getInOut() == 0, !ar.block2.getName().contains(bl2)); conn.updateAllSignals(); } conn.updateAllSignals(); } ypos += 100; //Add Pragmas AvatarBDPragma pragma = new AvatarBDPragma(xpos, ypos, xpos, xpos * 2, ypos, ypos * 2, false, null, abd); // String[] arr = new String[avspec.getPragmas().size()]; String s = ""; // int i=0; for ( AvatarPragma p : avspec.getPragmas()) { // arr[i] = p.getName(); String t = ""; String[] split = p.getName().split(" "); if (p.getName().contains("#Confidentiality")) { for (String str : split) { if (str.contains(".")) { String tmp = str.split("\\.")[0]; String tmp2 = str.split("\\.")[1]; t = t.concat(tmp.split("__")[tmp.split("__").length - 1] + "." + tmp2.split("__")[tmp2.split("__").length - 1] + " "); } else { t = t.concat(str + " "); } } } else if (p.getName().contains("Authenticity")) { t = p.getName(); } else if (p.getName().contains("Initial")) { t = p.getName(); } else { t = p.getName(); } s = s.concat(t + "\n"); // i++; } pragma.setValue(s); pragma.makeValue(); abd.addComponent(pragma, xpos, ypos, false, true); //Add message and key datatype if there is a cryptoblock xpos = 50; ypos += 200; if (hasCrypto) { AvatarBDDataType message = new AvatarBDDataType(xpos, ypos, xpos, xpos * 2, ypos, ypos * 2, false, null, abd); message.setValue("Message"); abd.addComponent(message, xpos, ypos, false, true); message.resize(200, 100); xpos += 400; AvatarBDDataType key = new AvatarBDDataType(xpos, ypos, xpos, xpos * 2, ypos, ypos * 2, false, null, abd); key.setValue("Key"); TAttribute attr = new TAttribute(2, "data", "0", 8); message.addAttribute(attr); key.addAttribute(attr); key.resize(200, 100); abd.addComponent(key, xpos, ypos, false, true); } } public String getLastKeyword(String s) { return s.split("__")[s.split("__").length - 1]; } public void drawPanelOld(AvatarSpecification avspec, AvatarDesignPanel adp) { // // Check Errors in AVSPEC TraceManager.addDev("Checking syntax of avatar spec."); ArrayList<AvatarError> list = AvatarSyntaxChecker.checkSyntax(avspec); for (AvatarError error : list) { TraceManager.addDev("Error: " + error.toString()); } TraceManager.addDev("Check done. " + checkingErrors.size() + " errors found"); // Go for drawing! hasCrypto = false; Map<String, Set<String>> originDestMap = new HashMap<String, Set<String>>(); Map<String, AvatarBDBlock> blockMap = new HashMap<String, AvatarBDBlock>(); if (adp == null) { return; } if (avspec == null) { return; } AvatarBDPanel abd = adp.abdp; //Find all blocks, create nested blocks starting from top left int xpos = 10; int ypos = 40; //Create blocks recursively, starting from top level ones with no father //Lowest level blocks should be 100x100, next should be 100x(number of children*100+50)...etc, //Find level #, 0 refers to no father, etc Map<AvatarBlock, Integer> blockLevelMap = new HashMap<AvatarBlock, Integer>(); Map<AvatarBlock, Integer> blockSizeMap = new HashMap<AvatarBlock, Integer>(); Map<AvatarBlock, Integer> blockIncMap = new HashMap<AvatarBlock, Integer>(); int maxLevel = 0; for (AvatarBlock ab : avspec.getListOfBlocks()) { int level = 0; AvatarBlock block = ab; while (block.getFather() != null) { if (blockSizeMap.containsKey(block.getFather())) { blockSizeMap.put(block.getFather(), blockSizeMap.get(block.getFather()) + 1); } else { blockSizeMap.put(block.getFather(), 1); blockIncMap.put(block.getFather(), 10); } level++; block = block.getFather(); } if (level > maxLevel) { maxLevel = level; } if (!blockSizeMap.containsKey(block)) { blockSizeMap.put(block, 0); blockIncMap.put(block, 10); } blockLevelMap.put(ab, level); } for (int level = 0; level < maxLevel + 1; level++) { for (AvatarBlock ab : avspec.getListOfBlocks()) { if (blockLevelMap.get(ab) == level) { if (level == 0) { AvatarBDBlock bl = new AvatarBDBlock(xpos, ypos, abd.getMinX(), abd.getMaxX(), abd.getMinY(), abd.getMaxY(), false, null, abd); abd.addComponent(bl, xpos, ypos, false, true); bl.resize(100 * blockSizeMap.get(ab) + 100, 100 + (maxLevel - level) * 50); drawBlockProperties(ab, bl); AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue()); buildStateMachine(ab, bl, smp); blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length - 1], bl); xpos += 100 * blockSizeMap.get(ab) + 200; } else { AvatarBDBlock father = blockMap.get(ab.getFather().getName().split("__")[ab.getFather().getName().split("__").length - 1]); // if (father == null) { // continue; } AvatarBDBlock bl = new AvatarBDBlock(father.getX() + blockIncMap.get(ab.getFather()), father.getY() + 10, abd.getMinX(), abd.getMaxX(), abd.getMinY(), abd.getMaxY(), false, father, abd); abd.addComponent(bl, father.getX() + blockIncMap.get(ab.getFather()), father.getY() + 10, false, true); int size = 100; if (blockSizeMap.containsKey(ab)) { size = 100 * blockSizeMap.get(ab) + 50; } bl.resize(size, 100 + (maxLevel - level) * 50); drawBlockProperties(ab, bl); abd.attach(bl); AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue()); buildStateMachine(ab, bl, smp); blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length - 1], bl); blockIncMap.put(ab.getFather(), blockIncMap.get(ab.getFather()) + size + 10); } } } } for (AvatarRelation ar : avspec.getRelations()) { String bl1 = ar.block1.getName(); String bl2 = ar.block2.getName(); if (originDestMap.containsKey(bl1.split("__")[bl1.split("__").length - 1])) { originDestMap.get(bl1.split("__")[bl1.split("__").length - 1]).add(bl2.split("__")[bl2.split("__").length - 1]); } else if (originDestMap.containsKey(bl2.split("__")[bl2.split("__").length - 1])) { originDestMap.get(bl2.split("__")[bl2.split("__").length - 1]).add(bl1.split("__")[bl1.split("__").length - 1]); } else { Set<String> hs = new HashSet<String>(); hs.add(bl2.split("__")[bl2.split("__").length - 1]); originDestMap.put(bl1.split("__")[bl1.split("__").length - 1], hs); } } //Add Relations for (String bl1 : originDestMap.keySet()) { for (String bl2 : originDestMap.get(bl1)) { Vector<Point> points = new Vector<Point>(); // if (blockMap.get(bl1) == null || blockMap.get(bl2) == null) { continue; } TGConnectingPoint p1 = blockMap.get(bl1).findFirstFreeTGConnectingPoint(true, true); p1.setFree(false); TGConnectingPoint p2 = blockMap.get(bl2).findFirstFreeTGConnectingPoint(true, true); p2.setFree(false); if (bl2.equals(bl1)) { //Add 2 point so the connection looks square Point p = new Point(p1.getX(), p1.getY() - 10); points.add(p); p = new Point(p2.getX(), p2.getY() - 10); points.add(p); } AvatarBDPortConnector conn = new AvatarBDPortConnector(0, 0, 0, 0, 0, 0, true, null, abd, p1, p2, points); abd.addComponent(conn, 0, 0, false, true); //Add Relations to connector for (AvatarRelation ar : avspec.getRelations()) { // Equal or endWith "__" + name // One must be equal // if (ar.block1.getName().equals(bl1) || ar.block1.getName().equals(bl2) || ar.block2.getName().equals(bl1) || ar.block1.getName // ().equals(bl2)) { if (ar.block1.getName().endsWith(bl1) && ar.block2.getName().endsWith(bl2) || ar.block1.getName().endsWith(bl2) && ar .block2.getName() .endsWith(bl1)) { TraceManager.addDev("Adding relations between " + bl1 + "/" + bl2 + " block1=" + ar.block1.getName() + " block2=" + ar .block2.getName()); //TraceManager.addDev("Trying adding signal relations to connector"); //TGConnectingPoint p1= blockMap.get(bl1).getFreeTGConnectingPoint(blockMap.get(bl1).getX(), blockMap.get(bl1).getY()); conn.setAsynchronous(ar.isAsynchronous()); conn.setSynchronous(!ar.isAsynchronous()); conn.setAMS(false); conn.setBlocking(ar.isBlocking()); conn.setPrivate(ar.isPrivate()); conn.setSizeOfFIFO(ar.getSizeOfFIFO()); // for (int i = 0; i < ar.nbOfSignals(); i++) { //TraceManager.addDev("Adding signal relations to connector"); // //TraceManager.addDev("Adding signal 1: " + ar.getSignal1(i).toString() + " of block " + ar.block1.getName()); conn.addSignal(ar.getSignal1(i).toString(), ar.getSignal1(i).getInOut() == 0, ar.block1.getName().contains(bl1)); //TraceManager.addDev("Adding signal 2:" + ar.getSignal2(i).toString() + " of block " + ar.block2.getName()); conn.addSignal(ar.getSignal2(i).toString(), ar.getSignal2(i).getInOut() == 0, !ar.block2.getName().contains(bl2)); // } // conn.updateAllSignals(); } conn.updateAllSignals(); } /*for (ui.AvatarSignal sig:blockMap.get(bl1).getSignalList()){ for (ui.AvatarSignal sig2: blockMap.get(bl2).getSignalList()){ if (sig.getId().equals(sig2.getId())){ conn.addSignal("in "+sig.getId(), true, true); conn.addSignal("out "+sig.getId(), false, false); } } }*/ } } ypos += 100; //Add Pragmas AvatarBDPragma pragma = new AvatarBDPragma(xpos, ypos, xpos, xpos * 2, ypos, ypos * 2, false, null, abd); // String[] arr = new String[avspec.getPragmas().size()]; String s = ""; // int i=0; for (AvatarPragma p : avspec.getPragmas()) { // arr[i] = p.getName(); String t = ""; String[] split = p.getName().split(" "); if (p.getName().contains("#Confidentiality")) { for (String str : split) { if (str.contains(".")) { String tmp = str.split("\\.")[0]; String tmp2 = str.split("\\.")[1]; t = t.concat(tmp.split("__")[tmp.split("__").length - 1] + "." + tmp2.split("__")[tmp2.split("__").length - 1] + " "); } else { t = t.concat(str + " "); } } } else if (p.getName().contains("Authenticity")) { t = p.getName(); } else if (p.getName().contains("Initial")) { t = p.getName(); } else { t = p.getName(); } s = s.concat(t + "\n"); // i++; } pragma.setValue(s); pragma.makeValue(); abd.addComponent(pragma, xpos, ypos, false, true); //Add message and key datatype if there is a cryptoblock xpos = 50; ypos += 200; if (hasCrypto) { AvatarBDDataType message = new AvatarBDDataType(xpos, ypos, xpos, xpos * 2, ypos, ypos * 2, false, null, abd); message.setValue("Message"); abd.addComponent(message, xpos, ypos, false, true); message.resize(200, 100); xpos += 400; AvatarBDDataType key = new AvatarBDDataType(xpos, ypos, xpos, xpos * 2, ypos, ypos * 2, false, null, abd); key.setValue("Key"); TAttribute attr = new TAttribute(2, "data", "0", 8); message.addAttribute(attr); key.addAttribute(attr); key.resize(200, 100); abd.addComponent(key, xpos, ypos, false, true); } } public void buildStateMachine(AvatarBlock ab, AvatarBDBlock bl, AvatarSMDPanel smp) { Map<AvatarTransition, TGComponent> tranSourceMap = new HashMap<AvatarTransition, TGComponent>(); Map<AvatarTransition, AvatarStateMachineElement> tranDestMap = new HashMap<AvatarTransition, AvatarStateMachineElement>(); Map<AvatarStateMachineElement, TGComponent> locMap = new HashMap<AvatarStateMachineElement, TGComponent>(); Map<AvatarStateMachineElement, TGComponent> SMDMap = new HashMap<AvatarStateMachineElement, TGComponent>(); //Build the state machine int smx = 400; int smy = 40; if (smp == null) { return; } smp.removeAll(); AvatarStateMachine asm = ab.getStateMachine(); //Remove the empty check states AvatarStartState start = asm.getStartState(); addStates(start, smx, smy, smp, bl, SMDMap, locMap, tranDestMap, tranSourceMap); //Add transitions for (AvatarTransition t : tranSourceMap.keySet()) { if (tranSourceMap.get(t) == null || tranDestMap.get(t) == null || locMap.get(tranDestMap.get(t)) == null) { continue; } int x = tranSourceMap.get(t).getX() + tranSourceMap.get(t).getWidth() / 2; int y = tranSourceMap.get(t).getY() + tranSourceMap.get(t).getHeight(); // TGConnectingPoint p1 = tranSourceMap.get(t).findFirstFreeTGConnectingPoint(true,false); TGConnectingPoint p1 = tranSourceMap.get(t).closerFreeTGConnectingPoint(x, y, true, false); if (p1 == null) { p1 = tranSourceMap.get(t).findFirstFreeTGConnectingPoint(true, true); //p1=tranSourceMap.get(t).closerFreeTGConnectingPoint(x,y,true, true); } x = locMap.get(tranDestMap.get(t)).getX() + locMap.get(tranDestMap.get(t)).getWidth() / 2; y = locMap.get(tranDestMap.get(t)).getY(); if (tranSourceMap.get(t).getY() > locMap.get(tranDestMap.get(t)).getY()) { y = locMap.get(tranDestMap.get(t)).getY() + locMap.get(tranDestMap.get(t)).getHeight() / 2; if (tranSourceMap.get(t).getX() < locMap.get(tranDestMap.get(t)).getX()) { x = locMap.get(tranDestMap.get(t)).getX(); } else { x = locMap.get(tranDestMap.get(t)).getX() + locMap.get(tranDestMap.get(t)).getWidth(); } } TGConnectingPoint p2 = locMap.get(tranDestMap.get(t)).closerFreeTGConnectingPoint(x, y, false, true); if (p2 == null) { p2 = locMap.get(tranDestMap.get(t)).closerFreeTGConnectingPoint(x, y, true, true); } Vector<Point> points = new Vector<Point>(); if (p1 == null || p2 == null) { return; } AvatarSMDConnector SMDCon = new AvatarSMDConnector(p1.getX(), p1.getY(), p1.getX(), p1.getY(), p1.getX(), p1.getY(), true, null, smp, p1, p2, points); // /// p1.setFree(false); p2.setFree(false); String action = ""; if (t.getActions().size() == 0) { action = ""; } else { action = t.getActions().get(0).toString().replaceAll(" ", ""); } // Delays SMDCon.setTransitionTime(t.getMinDelay(), t.getMaxDelay(), t.getMinCompute(), t.getMaxCompute()); // Guard SMDCon.setTransitionInfo(t.getGuard().toString(), action); // Action for (int i = 1; i < t.getActions().size(); i++) { SMDCon.setTransitionInfo("", t.getActions().get(i).toString().replaceAll(" ", "")); } smp.addComponent(SMDCon, p1.getX(), p1.getY(), false, true); } } // Generates for all observers, a TURTLE modeling for checking it public boolean generateTMsForRequirementAnalysis(Vector<Requirement> reqs, RequirementDiagramPanel rdp) { rm = new RequirementModeling(reqs, rdp, mgui); checkingErrors = rm.getCheckingErrors(); warnings = rm.getWarnings(); if ((checkingErrors != null) && (checkingErrors.size() > 0)) { return false; } else { //mgui.setMode(mgui.GEN_DESIGN_OK); languageID = MATRIX; return true; } } public RequirementModeling getRequirementModeling() { return rm; } public void removeBreakpoint(Point p) { if (listE == null) { return; } listE.removeBreakpoint(p); } public void addBreakpoint(Point p) { if (listE == null) { return; } listE.addBreakpoint(p); } private void analyzeErrors() { CheckingError ce; TGComponent tgc; for (int i = 0; i < checkingErrors.size(); i++) { ce = checkingErrors.get(i); if (ce != null && ce instanceof UICheckingError) { tgc = ((UICheckingError) ce).getTGComponent(); if (tgc != null) { analyzeErrorOnComponent(tgc); } } } } private void analyzeErrorOnComponent(TGComponent _tgc) { if (_tgc instanceof BasicErrorHighlight) { ((BasicErrorHighlight) _tgc).setStateAction(ErrorHighlight.UNKNOWN); } else if (_tgc instanceof ActionStateErrorHighlight) { ((ActionStateErrorHighlight) _tgc).setStateAction(ErrorHighlight.UNKNOWN_AS); } } public boolean makeEBRDD(EBRDDPanel tdp) { EBRDDTranslator ebrddt = new EBRDDTranslator(); ebrdd = ebrddt.generateEBRDD(tdp, tdp.getName()); warnings = ebrddt.getWarnings(); checkingErrors = ebrddt.getErrors(); if (checkingErrors.size() > 0) { return false; } TraceManager.addDev("the EBRDD:\n" + ebrdd.toString()); return true; } public void setElementsOfSearchTree(Vector<Object> elements) { st.setElements(elements); } }