diff --git a/src/avatartranslator/toproverif/AVATAR2ProVerif.java b/src/avatartranslator/toproverif/AVATAR2ProVerif.java index 540c3b8de1fb89d5e98372f057a98167fc62cb43..eecc8f33e170c6817da17c73e7043327396319da 100755 --- a/src/avatartranslator/toproverif/AVATAR2ProVerif.java +++ b/src/avatartranslator/toproverif/AVATAR2ProVerif.java @@ -787,7 +787,7 @@ public class AVATAR2ProVerif implements AvatarTranslator { // Use a dummy name if no value is sent if (_asme.getNbOfValues() == 0) - _lastInstr = _lastInstr.setNextInstr (new ProVerifProcNew ("data__", "bistring")); + _lastInstr = _lastInstr.setNextInstr (new ProVerifProcNew ("data__", "bitstring")); String tmp = "out (" + CH_MAINCH + ", "; if (isPrivate) diff --git a/src/tmltranslator/TML2Avatar.java b/src/tmltranslator/TML2Avatar.java new file mode 100644 index 0000000000000000000000000000000000000000..29574d99239bf1631d3d251f8e6f9128bcc94d46 --- /dev/null +++ b/src/tmltranslator/TML2Avatar.java @@ -0,0 +1,386 @@ +/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + * + * ludovic.apvrille AT enst.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + * /** + * Class AVATAR2ProVerif + * Creation: 29/02/2016 + * @version 1.1 29/02/2016 + * @author Ludovic APVRILLE, Letitia LI + * @see + */ + +package tmltranslator; +import tmltranslator.*; +import java.util.List; +import java.util.LinkedList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Vector; +import java.io.*; +import javax.swing.*; +import java.util.ArrayList; + +import javax.xml.parsers.*; +import ui.ConfigurationTTool; +import ui.CheckingError; +import ui.AvatarDesignPanel; +import ui.TGComponent; +import proverifspec.*; +import myutil.*; +import avatartranslator.*; + +public class TML2Avatar { + TMLMapping tmlmap; + List<String> allStates; + public TML2Avatar(TMLMapping tmlmap) { + this.tmlmap = tmlmap; + allStates = new ArrayList<String>(); + } + + public List<AvatarStateMachineElement> translateState(TMLActivityElement ae, AvatarBlock block){ + + TMLActionState tmlaction; + TMLChoice tmlchoice; + TMLExecI tmlexeci; + TMLExecIInterval tmlexecii; + TMLExecC tmlexecc; + TMLExecCInterval tmlexecci; + TMLForLoop tmlforloop; + TMLReadChannel tmlreadchannel; + TMLSendEvent tmlsendevent; + TMLSendRequest tmlsendrequest; + TMLStopState tmlstopstate; + TMLWaitEvent tmlwaitevent; + TMLNotifiedEvent tmlnotifiedevent; + TMLWriteChannel tmlwritechannel; + TMLSequence tmlsequence; + TMLRandomSequence tmlrsequence; + TMLSelectEvt tmlselectevt; + TMLDelay tmldelay; + + AvatarTransition tran= new AvatarTransition(block, "", null); + List<AvatarStateMachineElement> elementList = new ArrayList<AvatarStateMachineElement>(); + + if (ae==null){ + return elementList; + } + + if (ae instanceof TMLStopState){ + AvatarStopState stops= new AvatarStopState(ae.getName(), ae.getReferenceObject()); + elementList.add(stops); + return elementList; + } + else if (ae instanceof TMLStartState){ + AvatarStartState ss= new AvatarStartState(ae.getName(), ae.getReferenceObject()); + tran = new AvatarTransition(block, "__after_" + ae.getName(), null); + ss.addNext(tran); + elementList.add(ss); + elementList.add(tran); + } + else if (ae instanceof TMLRandom){ + AvatarRandom ar = new AvatarRandom(ae.getName(), ae.getReferenceObject()); + TMLRandom tmlr = (TMLRandom) ae; + ar.setVariable(tmlr.getVariable()); + ar.setValues(tmlr.getMinValue(), tmlr.getMaxValue()); + tran = new AvatarTransition(block, "__after_"+ae.getName(), null); + ar.addNext(tran); + //Add to list + elementList.add(ar); + elementList.add(tran); + } + else if (ae instanceof TMLSequence){ + //Get all list of sequences and paste together + List<AvatarStateMachineElement> seq = translateState(ae.getNextElement(0), block); + elementList.addAll(seq); + for (int i=1; i< ae.getNbNext(); i++){ + List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block); + seq.get(seq.size()-1).addNext(tmp.get(0)); + elementList.addAll(tmp); + seq = tmp; + } + if (!(elementList.get(elementList.size()-1) instanceof AvatarStopState)){ + tran = new AvatarTransition(block, "end_seq", null); + AvatarStopState ss = new AvatarStopState("stop", null); + elementList.get(elementList.size()-1).addNext(tran); + tran.addNext(ss); + elementList.add(tran); + elementList.add(ss); + } + return elementList; + + } + else if (ae instanceof TMLRandomSequence){ + HashMap<Integer, List<AvatarStateMachineElement>> seqs = new HashMap<Integer, List<AvatarStateMachineElement>>(); + AvatarState choiceState = new AvatarState("seqchoice__"+ae.getName(), ae.getReferenceObject()); + elementList.add(choiceState); + if (ae.getNbNext()==2){ + //Create 2 choices, set0 -> set1 and set1 -> set0 + /* for (int i=0; i< ae.getNbNext(); i++){ + List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block); + seqs.put(i, tmp); + }*/ + + List<AvatarStateMachineElement> set0= translateState(ae.getNextElement(0), block); + List<AvatarStateMachineElement> set1 = translateState(ae.getNextElement(1), block); + elementList.addAll(set0); + elementList.addAll(set1); + + //Build branch 0 + tran = new AvatarTransition(block, "__after_"+ae.getName()+"_0", null); + choiceState.addNext(tran); + elementList.add(tran); + tran.addNext(set0.get(0)); + set0.get(set0.size()-1).addNext(set1.get(0)); + + + //Build branch 1 + List<AvatarStateMachineElement> set0_1= translateState(ae.getNextElement(0), block); + List<AvatarStateMachineElement> set1_1 =translateState(ae.getNextElement(1), block); + elementList.addAll(set0_1); + elementList.addAll(set1_1); + tran = new AvatarTransition(block, "__after_"+ae.getName()+"_1", null); + elementList.add(tran); + choiceState.addNext(tran); + tran.addNext(set1_1.get(0)); + set1_1.get(set1_1.size()-1).addNext(set0_1.get(0)); + } + else { + for (int i=0; i< ae.getNbNext(); i++){ + //For each of the possible state blocks, translate 1 and recurse on the remaining random sequence + tran = new AvatarTransition(block, "__after_"+ae.getName()+"_"+i, null); + choiceState.addNext(tran); + List<AvatarStateMachineElement> tmp = translateState(ae.getNextElement(i), block); + tran.addNext(tmp.get(0)); + TMLRandomSequence newSeq = new TMLRandomSequence("seqchoice__"+i+"_"+ae.getNbNext()+"_"+ae.getName(), ae.getReferenceObject()); + for (int j=0; j< ae.getNbNext(); j++){ + if (j!=i){ + newSeq.addNext(ae.getNextElement(j)); + } + } + tran = new AvatarTransition(block, "__after_"+ae.getNextElement(i).getName(), null); + tmp.get(tmp.size()-1).addNext(tran); + elementList.addAll(tmp); + elementList.add(tran); + List<AvatarStateMachineElement> nexts = translateState(newSeq, block); + elementList.addAll(nexts); + tran.addNext(nexts.get(0)); + } + } + return elementList; + } + else if (ae instanceof TMLActivityElementEvent){ + TMLActivityElementEvent aee = (TMLActivityElementEvent) ae; + TMLEvent ch = aee.getEvent(); + if (ae instanceof TMLSendEvent){ + AvatarSignal sig = new AvatarSignal(ch.getName(), AvatarSignal.OUT, ch.getReferenceObject()); + AvatarActionOnSignal as= new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject()); + tran= new AvatarTransition(block, "__after_"+ae.getName(), null); + elementList.add(as); + as.addNext(tran); + elementList.add(tran); + } + else if (ae instanceof TMLWaitEvent){ + AvatarSignal sig = new AvatarSignal(ch.getName(), AvatarSignal.IN, ch.getReferenceObject()); + AvatarActionOnSignal as= new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject()); + tran= new AvatarTransition(block, "__after_"+ae.getName(), null); + elementList.add(as); + as.addNext(tran); + elementList.add(tran); + } + else { + //Notify Event, I don't know how to translate this + AvatarState as = new AvatarState(ae.getName(), ae.getReferenceObject()); + tran = new AvatarTransition(block, "__after_"+ae.getName(), null); + as.addNext(tran); + elementList.add(as); + elementList.add(tran); + } + + } + else if (ae instanceof TMLActivityElementWithAction){ + AvatarState as = new AvatarState(ae.getName(), ae.getReferenceObject()); + tran = new AvatarTransition(block, "__after_"+ae.getName(), null); + tran.addAction(((TMLActivityElementWithAction) ae).getAction()); + as.addNext(tran); +// AvatarActionAssignment aaa= new AvatarActionAssignment( + elementList.add(as); + elementList.add(tran); + } + else if (ae instanceof TMLActivityElementWithIntervalAction){ + AvatarState as = new AvatarState(ae.getName(), ae.getReferenceObject()); + tran = new AvatarTransition(block, "__after_"+ae.getName(), null); + as.addNext(tran); + elementList.add(as); + elementList.add(tran); + } + else if (ae instanceof TMLActivityElementChannel){ + TMLActivityElementChannel aec = (TMLActivityElementChannel) ae; + TMLChannel ch = aec.getChannel(0); + AvatarSignal sig; + if (ae instanceof TMLReadChannel){ + sig = new AvatarSignal(ch.getName(), AvatarSignal.IN, ch.getReferenceObject()); + } + else { + sig = new AvatarSignal(ch.getName(), AvatarSignal.OUT, ch.getReferenceObject()); + } + AvatarActionOnSignal as = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject()); + tran= new AvatarTransition(block, "__after_"+ae.getName(), null); + as.addNext(tran); + elementList.add(as); + elementList.add(tran); + } + else if (ae instanceof TMLForLoop){ + TMLForLoop loop = (TMLForLoop)ae; + if (loop.isInfinite()){ + List<AvatarStateMachineElement> elements = translateState(ae.getNextElement(0), block); + System.out.println("looping... " + ae.getNextElement(0)); + AvatarTransition looptran = new AvatarTransition(block, "loop__"+ae.getName(), null); + elementList.addAll(elements); + elementList.add(looptran); + elements.get(elements.size()-1).addNext(looptran); + looptran.addNext(elements.get(0)); + return elementList; + } + else { + System.out.println("why isn't my loop infinite ?"); + } + } + else if (ae instanceof TMLChoice){ + AvatarState as = new AvatarState(ae.getName(), ae.getReferenceObject(), true); + //Make many choices + elementList.add(as); + TMLChoice c = (TMLChoice) ae; + for (int i=0; i<c.getNbGuard(); i++){ + tran = new AvatarTransition(block, "__after_"+ae.getName()+"_"+i, null); + tran.addGuard(c.getGuard(i)); + as.addNext(tran); + List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block); + tran.addNext(nexts.get(0)); + elementList.add(tran); + elementList.addAll(nexts); + } + return elementList; + + } + else if (ae instanceof TMLSelectEvt){ + AvatarState as = new AvatarState(ae.getName(), ae.getReferenceObject()); + //Make many choices + TMLSelectEvt c = (TMLSelectEvt) ae; + for (int i=0; i < ae.getNbNext(); i++){ + tran = new AvatarTransition(block, "__after_"+ae.getName()+"_"+i, null); + as.addNext(tran); + List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(i), block); + tran.addNext(nexts.get(0)); + elementList.addAll(nexts); + } + return elementList; + } + else { + System.out.println("undefined tml element " + ae); + } + List<AvatarStateMachineElement> nexts = translateState(ae.getNextElement(0), block); + if (nexts.size()==0){ + //in an infinite loop i hope + return elementList; + } + tran.addNext(nexts.get(0)); + elementList.addAll(nexts); + return elementList; + } + + public String processName(String name, int id){ + name = name.replaceAll("-","_").replaceAll(" ",""); + if (allStates.contains(name)){ + return name+id; + + } + else { + allStates.add(name); + return name; + } + } + + public AvatarSpecification generateAvatarSpec(){ + AvatarSpecification avspec = new AvatarSpecification("spec", null); + ArrayList<TMLTask> tasks = tmlmap.getTMLModeling().getTasks(); + for (TMLTask task:tasks){ + AvatarBlock block = new AvatarBlock(task.getName(), avspec, task.getReferenceObject()); + for (TMLAttribute attr: task.getAttributes()){ + AvatarType type; + if (attr.getType().getType()==TMLType.NATURAL){ + type = AvatarType.INTEGER; + } + else if (attr.getType().getType()==TMLType.BOOLEAN) { + type = AvatarType.BOOLEAN; + } + else { + type = AvatarType.UNDEFINED; + } + AvatarAttribute avattr = new AvatarAttribute(attr.getName(), type, block, null); + block.addAttribute(avattr); + } + AvatarTransition last; + AvatarStateMachine asm = block.getStateMachine(); + List<AvatarStateMachineElement> elementList= translateState(task.getActivityDiagram().get(0), block); + int i=0; + for (AvatarStateMachineElement e: elementList){ + e.setName(processName(e.getName(), e.getID())); + i++; + asm.addElement(e); + } + asm.setStartState((AvatarStartState) elementList.get(0)); + /* for (int i=1; i<task.getActivityDiagram().nElements(); i++){ + TMLActivityElement ae= task.getActivityDiagram().get(i); + List<AvatarStateMachineElement> elementList= translateState(ae); + last.addNext(elementList.get(0)); + for (AvatarStateMachineElement el: elementList){ + asm.addElement(el); + } + if (elementList.get(elementList.size()-1) instanceof AvatarTransition){ + last = elementList.get(elementList.size()-1); + } + }*/ + + + avspec.addBlock(block); + + } + System.out.println(avspec); + return avspec; + } + +} diff --git a/src/tmltranslator/TMLMapping.java b/src/tmltranslator/TMLMapping.java index 3037df545acd456414bd51a7bf0b7f1c5e5c9de3..16d0f93376ad384a257e10e1026baaa6ea375a22 100755 --- a/src/tmltranslator/TMLMapping.java +++ b/src/tmltranslator/TMLMapping.java @@ -67,7 +67,7 @@ public class TMLMapping { private ArrayList<TMLCPLib> mappedCPLibs; - + private ArrayList<String[]> pragmas= new ArrayList<String[]>(); private boolean optimized = false; private int hashCode; @@ -288,6 +288,14 @@ public class TMLMapping { return tmla.getCPUIDs(); } + public void addPragma(String[] s){ + pragmas.add(s); + } + + public ArrayList<String[]> getPragmas(){ + return pragmas; + } + public String[] getCPUandHwAIDs() { if (tmla == null) { return null; diff --git a/src/tmltranslator/toproverif/TML2ProVerif.class b/src/tmltranslator/toproverif/TML2ProVerif.class new file mode 100644 index 0000000000000000000000000000000000000000..f4e43056eeeadb11c71233977d3aa11303a44aec Binary files /dev/null and b/src/tmltranslator/toproverif/TML2ProVerif.class differ diff --git a/src/tmltranslator/toproverif/TML2ProVerif.java b/src/tmltranslator/toproverif/TML2ProVerif.java index 9c971e82889e6dd50d714ff89a556e1b6d1ffd6e..6baa71032b40926c0be5256249295af8ed33db74 100644 --- a/src/tmltranslator/toproverif/TML2ProVerif.java +++ b/src/tmltranslator/toproverif/TML2ProVerif.java @@ -336,7 +336,7 @@ public class TML2ProVerif { /* Queries */ this.spec.addDeclaration (new ProVerifComment ("Queries Secret")); TraceManager.addDev("Queries Secret"); - for (String[] pragma: tmlmodel.getPragmas ()){ + for (String[] pragma: tmlmap.getPragmas ()){ if (pragma[0].equals("#Confidentiality")){ this.spec.addDeclaration (new ProVerifQueryAtt (pragma[1].replaceAll("\\.", "__"), true)); TraceManager.addDev("| attacker (" + pragma[1].replaceAll("\\.", "__") + ")"); @@ -521,37 +521,45 @@ TMLActivity act= task.getActivityDiagram(); //declare entering p = p.setNextInstr (new ProVerifProcRaw ("event enteringState__" + task.getName() + "__" + stateNum + "()", true)); stateNum++; - if (ae instanceof TMLActivityElementChannel){ - TMLActivityElementChannel aec = (TMLActivityElementChannel) ae; - int channelStatus = channelMap.get(aec.getChannel(0).getName()); - if (aec instanceof TMLWriteChannel){ - tmp = "out (" + CH_MAINCH + ", "; - //Look up privacy - if (channelStatus!=channelUnreachable){ - if (channelStatus==channelPrivate) - tmp += CH_ENCRYPT + " ("; - tmp += "data__"+aec.getChannel(0).getName()+")"; - if (channelStatus==channelPrivate) - tmp += ")"; - p = p.setNextInstr(new ProVerifProcRaw (tmp, true)); - } - } - else { - if (channelStatus==channelPrivate) { - LinkedList<ProVerifVar> vars = new LinkedList<ProVerifVar> (); - TraceManager.addDev("| | in (chPriv, ...)"); - vars.add (new ProVerifVar ("data__"+ aec.getChannel(0).getName(), "bitstring")); - p = p.setNextInstr (new ProVerifProcIn (CH_MAINCH, new ProVerifVar[] {new ProVerifVar ("privChData", "bitstring")})); - p = p.setNextInstr (new ProVerifProcLet (vars.toArray (new ProVerifVar[vars.size()]), CH_DECRYPT + " (privChData)")); - } - else { - LinkedList<ProVerifVar> vars = new LinkedList<ProVerifVar> (); - vars.add (new ProVerifVar ("data__"+ aec.getChannel(0).getName(), "bitstring")); - p=p.setNextInstr(new ProVerifProcIn (CH_MAINCH, vars.toArray (new ProVerifVar[vars.size()]))); - } + if (ae instanceof TMLChoice){ + TMLChoice aechoice = (TMLChoice) ae; + for (int i=0; i< ae.getNbNext(); i++){ + + } + } + else { + if (ae instanceof TMLActivityElementChannel){ + TMLActivityElementChannel aec = (TMLActivityElementChannel) ae; + int channelStatus = channelMap.get(aec.getChannel(0).getName()); + if (aec instanceof TMLWriteChannel){ + tmp = "out (" + CH_MAINCH + ", "; + //Look up privacy + if (channelStatus!=channelUnreachable){ + if (channelStatus==channelPrivate) + tmp += CH_ENCRYPT + " ("; + tmp += "data__"+aec.getChannel(0).getName()+")"; + if (channelStatus==channelPrivate) + tmp += ")"; + p = p.setNextInstr(new ProVerifProcRaw (tmp, true)); + } + } + else { + if (channelStatus==channelPrivate) { + LinkedList<ProVerifVar> vars = new LinkedList<ProVerifVar> (); + TraceManager.addDev("| | in (chPriv, ...)"); + vars.add (new ProVerifVar ("data__"+ aec.getChannel(0).getName(), "bitstring")); + p = p.setNextInstr (new ProVerifProcIn (CH_MAINCH, new ProVerifVar[] {new ProVerifVar ("privChData", "bitstring")})); + p = p.setNextInstr (new ProVerifProcLet (vars.toArray (new ProVerifVar[vars.size()]), CH_DECRYPT + " (privChData)")); + } + else { + LinkedList<ProVerifVar> vars = new LinkedList<ProVerifVar> (); + vars.add (new ProVerifVar ("data__"+ aec.getChannel(0).getName(), "bitstring")); + p=p.setNextInstr(new ProVerifProcIn (CH_MAINCH, vars.toArray (new ProVerifVar[vars.size()]))); + } + } } + ae = ae.getNextElement(0); } - ae = ae.getNextElement(0); } diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java index 2c3a200322fb116dc1cece7e33b7497f0629c512..d3a36dccc7d941697c9fab733d8c205c91b2cbbd 100755 --- a/src/ui/GTMLModeling.java +++ b/src/ui/GTMLModeling.java @@ -62,6 +62,8 @@ import tmltranslator.toproverif.*; import proverifspec.*; import myutil.*; import tmltranslator.ctranslator.*; +import avatartranslator.*; + public class GTMLModeling { private TMLDesignPanel tmldp; @@ -75,8 +77,7 @@ public class GTMLModeling { private LinkedList removedChannels, removedRequests, removedEvents; private static CorrespondanceTGElement listE; private Hashtable<String, String> table; - public Map<String, Boolean> channelConfMap = new HashMap<String, Boolean>(); - + public AvatarSpecification avspec; //private ArrayList<HwNode> nodesToTakeIntoAccount; private LinkedList nodesToTakeIntoAccount; @@ -287,21 +288,21 @@ public class GTMLModeling { } private void addTMLPragmas(){ TGComponent tgc; - System.out.println(tmlap); components = tmlap.tmlap.getComponentList(); ListIterator iterator = components.listIterator(); while(iterator.hasNext()) { - tgc = (TGComponent)(iterator.next()); - if (tgc instanceof TGCNote){ - TGCNote note = (TGCNote) tgc; - String[] vals = note.getValues(); - for (String s: vals){ - if (s.contains(" ") && s.contains(".")){ - tmlm.addPragma(s.split(" ")); - } + tgc = (TGComponent)(iterator.next()); + if (tgc instanceof TGCNote){ + TGCNote note = (TGCNote) tgc; + String[] vals = note.getValues(); + for (String s: vals){ + System.out.println("Val " + s); + if (s.contains("#") && s.contains(" ")){ + map.addPragma(s.split(" ")); + } + } } - } - } + } } private void addTMLTasks() throws MalformedTMLDesignException { TGComponent tgc; @@ -1530,6 +1531,7 @@ public class GTMLModeling { tmlforloop.setInit(""); tmlforloop.setCondition(""); tmlforloop.setIncrement(""); + tmlforloop.setInfinite(true); activity.addElement(tmlforloop); ((BasicErrorHighlight)tgc).setStateAction(ErrorHighlight.OK); listE.addCor(tmlforloop, tgc); @@ -2242,6 +2244,7 @@ public class GTMLModeling { bus.arbitration = busnode.getArbitrationPolicy(); bus.clockRatio = busnode.getClockRatio(); bus.sliceTime = busnode.getSliceTime(); + bus.privacy = busnode.getPrivacy(); listE.addCor(bus, busnode); archi.addHwNode(bus); TraceManager.addDev("BUS node added:" + bus.getName()); @@ -3085,92 +3088,8 @@ public class GTMLModeling { } addTMLPragmas(); - ArrayList<TMLChannel> channels = tmlm.getChannels(); - List<TMLTask> destinations = new ArrayList<TMLTask>(); - TMLTask a; - for (TMLChannel channel: channels){ - destinations.clear(); - if (channel.isBasicChannel()){ - a = channel.getOriginTask(); - destinations.add(channel.getDestinationTask()); - } - else { - a=channel.getOriginTasks().get(0); - destinations.addAll(channel.getDestinationTasks()); - } - HwCPU node1 = (HwCPU) map.getHwNodeOf(a); - for (TMLTask t: destinations){ - List<HwBus> buses = new ArrayList<HwBus>(); - HwNode node2 = map.getHwNodeOf(t); - if (node1==node2){ - System.out.println("Channel "+channel.getName() + " between Task "+ a.getTaskName() + " and Task " + t.getTaskName() + " is confidential"); - channelConfMap.put(channel.getName(), true); - } - if (node1!=node2){ - //Navigate architecture for node - List<HwLink> links = archi.getHwLinks(); - HwNode last = node1; - 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>>(); - 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){ - System.out.println("Path does not exist for channel " + channel.getName() + " between Task " + a.getTaskName() + " and Task " + t.getTaskName()); - } - else { - boolean priv=true; - 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){ - priv=false; - break; - } - } - } - channelConfMap.put(channel.getName(), priv); - System.out.println("Channel "+channel.getName() + " between Task "+ a.getTaskName() + " and Task " + t.getTaskName() + " is " + (priv ? "confidential" : "not confidential")); - } - } - } - } + TML2Avatar t2a = new TML2Avatar(map); + avspec = t2a.generateAvatarSpec(); } public void addToTable(String s1, String s2) { diff --git a/src/ui/GTURTLEModeling.java b/src/ui/GTURTLEModeling.java index 61b98f38f7c8d3999608ee4078661a3f01174ec9..b411b428bbd4818c7c33a837d59a3f6a585ad444 100755 --- a/src/ui/GTURTLEModeling.java +++ b/src/ui/GTURTLEModeling.java @@ -6548,13 +6548,12 @@ public class GTURTLEModeling { 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(); - + if ((checkingErrors != null) && (checkingErrors.size() > 0)){ analyzeErrors(); return false; @@ -6665,7 +6664,7 @@ public class GTURTLEModeling { listE = gtmlm.getCorrespondanceTable(); checkingErrors = gtmlm.getCheckingErrors(); - + avatarspec = gtmlm.avspec; if ((checkingErrors != null) && (checkingErrors.size() > 0)){ analyzeErrors(); warnings = gtmlm.getCheckingWarnings(); diff --git a/src/ui/JToolBarMainTurtle.java b/src/ui/JToolBarMainTurtle.java index 80cf598954f9ed426f162c59180dafe15168caeb..4f770d38bc9a1ca626de603585ff35a056e3a52b 100755 --- a/src/ui/JToolBarMainTurtle.java +++ b/src/ui/JToolBarMainTurtle.java @@ -387,7 +387,7 @@ public class JToolBarMainTurtle extends JToolBar implements ActionListener avatarSimu.setVisible(!b); avatarFVUPPAAL.setVisible(!b); if (avatarFVProVerif != null) { - avatarFVProVerif.setVisible(!b); + avatarFVProVerif.setVisible(b); } avatarCodeGeneration.setVisible(!b); diff --git a/src/ui/tmldd/TMLArchiBUSNode.java b/src/ui/tmldd/TMLArchiBUSNode.java index c146a6eb9737f8c6400b9f6674f6084ae97a5133..8bec85d671fe3e2deabd5ea53fdd9e4bb9e2b688 100755 --- a/src/ui/tmldd/TMLArchiBUSNode.java +++ b/src/ui/tmldd/TMLArchiBUSNode.java @@ -303,6 +303,7 @@ public class TMLArchiBUSNode extends TMLArchiCommunicationNode implements Swallo sb.append(" sliceTime=\"" + sliceTime + "\" "); sb.append(" pipelineSize=\"" + pipelineSize + "\" "); sb.append(" clockRatio=\"" + clockRatio + "\" "); + sb.append(" privacy=\"" + privacy + "\" "); sb.append("/>\n"); sb.append("</extraparam>\n"); return new String(sb); @@ -310,54 +311,53 @@ public class TMLArchiBUSNode extends TMLArchiCommunicationNode implements Swallo public void loadExtraParam(NodeList nl, int decX, int decY, int decId) throws MalformedModelingException{ //System.out.println("*** load extra synchro ***"); - try { - - NodeList nli; - Node n1, n2; - Element elt; - int t1id; - String sstereotype = null, snodeName = null; - - for(int i=0; i<nl.getLength(); i++) { - n1 = nl.item(i); - //System.out.println(n1); - if (n1.getNodeType() == Node.ELEMENT_NODE) { - nli = n1.getChildNodes(); - for(int j=0; i<nli.getLength(); i++) { - n2 = nli.item(i); - //System.out.println(n2); - if (n2.getNodeType() == Node.ELEMENT_NODE) { - elt = (Element) n2; - if (elt.getTagName().equals("info")) { - sstereotype = elt.getAttribute("stereotype"); - snodeName = elt.getAttribute("nodeName"); - } - if (sstereotype != null) { - stereotype = sstereotype; - } - if (snodeName != null){ - name = snodeName; - } - - if (elt.getTagName().equals("attributes")) { - byteDataSize = Integer.decode(elt.getAttribute("byteDataSize")).intValue(); - arbitrationPolicy =Integer.decode(elt.getAttribute("arbitrationPolicy")).intValue(); - pipelineSize = Integer.decode(elt.getAttribute("pipelineSize")).intValue(); - if ((elt.getAttribute("clockRatio") != null) && (elt.getAttribute("clockRatio").length() > 0)){ - clockRatio = Integer.decode(elt.getAttribute("clockRatio")).intValue(); - } - if ((elt.getAttribute("sliceTime") != null) && (elt.getAttribute("sliceTime").length() > 0)){ - sliceTime = Integer.decode(elt.getAttribute("sliceTime")).intValue(); - } - } - } - } + try { + NodeList nli; + Node n1, n2; + Element elt; + int t1id; + String sstereotype = null, snodeName = null; + for(int i=0; i<nl.getLength(); i++) { + n1 = nl.item(i); + //System.out.println(n1); + if (n1.getNodeType() == Node.ELEMENT_NODE) { + nli = n1.getChildNodes(); + for(int j=0; i<nli.getLength(); i++) { + n2 = nli.item(i); + //System.out.println(n2); + if (n2.getNodeType() == Node.ELEMENT_NODE) { + elt = (Element) n2; + if (elt.getTagName().equals("info")) { + sstereotype = elt.getAttribute("stereotype"); + snodeName = elt.getAttribute("nodeName"); + } + if (sstereotype != null) { + stereotype = sstereotype; + } + if (snodeName != null){ + name = snodeName; } + if (elt.getTagName().equals("attributes")) { + byteDataSize = Integer.decode(elt.getAttribute("byteDataSize")).intValue(); + arbitrationPolicy =Integer.decode(elt.getAttribute("arbitrationPolicy")).intValue(); pipelineSize = Integer.decode(elt.getAttribute("pipelineSize")).intValue(); + if ((elt.getAttribute("clockRatio") != null) && (elt.getAttribute("clockRatio").length() > 0)){ + clockRatio = Integer.decode(elt.getAttribute("clockRatio")).intValue(); + } + if ((elt.getAttribute("sliceTime") != null) && (elt.getAttribute("sliceTime").length() > 0)){ + sliceTime = Integer.decode(elt.getAttribute("sliceTime")).intValue(); + } + if ((elt.getAttribute("privacy") != null) && (elt.getAttribute("privacy").length() > 0)){ + privacy = Integer.decode(elt.getAttribute("privacy")).intValue(); + } + } + } } - - } catch (Exception e) { - throw new MalformedModelingException(); + } } + + } catch (Exception e) { + throw new MalformedModelingException(); + } } diff --git a/tests/Avatar/AvatarGuardTests.java b/tests/Avatar/AvatarGuardTests.java index 7e0d60ec5f828d0a1064cbcd48f3a24c1a1231f9..c5fec63c84949ef75a4db77b29c1067daff31a02 100644 --- a/tests/Avatar/AvatarGuardTests.java +++ b/tests/Avatar/AvatarGuardTests.java @@ -36,10 +36,10 @@ * knowledge of the CeCILL license and that you accept its terms. * * /** - * Class AvatarPragma - * Creation: 20/05/2010 - * @version 1.1 01/07/2014 - * @author Ludovic APVRILLE, Raja GATGOUT + * Class AvatarGuardTests + * Creation: 20/05/2015 + * @version 1.1 01/07/2015 + * @author Ludovic APVRILLE, Letitia LI * @see */