diff --git a/src/tmltranslator/toturtle/TML2TURTLE.java b/src/tmltranslator/toturtle/TML2TURTLE.java index 32c92c64f6363ce53bfb5b58c9c2e2265c128d67..706080f9381a8195f260997c89e6292691dea797 100755 --- a/src/tmltranslator/toturtle/TML2TURTLE.java +++ b/src/tmltranslator/toturtle/TML2TURTLE.java @@ -860,7 +860,62 @@ public class TML2TURTLE { return adag; } else { parameter = tclass.addNewParamIfApplicable("cpt__0", "nat", "0"); - adacparam = new ADActionStateWithParam(parameter); + adchoice = null; + adacparam2 = null; + + for(int k=0; k<acch.getNbOfChannels(); k++) { + + adacparam = new ADActionStateWithParam(parameter); + adacparam.setActionValue(acch.getNbOfSamples()); + tclass.getActivityDiagram().add(adacparam); + + if (k ==0) { + newElements.add(adacparam); + baseElements.add(tmle); + adacparam2 = adacparam; + } else { + adchoice.addNext(adacparam); + } + + adj = new ADJunction(); + tclass.getActivityDiagram().add(adj); + adacparam.addNext(adj); + + adchoice = new ADChoice(); + tclass.getActivityDiagram().add(adchoice); + adj.addNext(adchoice); + + adacparam1 = new ADActionStateWithParam(parameter); + adacparam1.setActionValue("cpt__0 - 1"); + tclass.getActivityDiagram().add(adacparam1); + adacparam1.addNext(adj); + + g = addGateChannel("wr", acch, k, tclass); + TClass tcl = tm.getTClassWithName(getChannelString(acch.getChannel(k))); + g1 = tcl.getGateByName("wr__"+acch.getChannel(k).getName()); + tm.addSynchroRelation(tclass, g, tcl, g1); + + adag = new ADActionStateWithGate(g); + adag.setActionValue(""); + tclass.getActivityDiagram().add(adag); + adchoice.addNext(adag); + adchoice.addGuard("[cpt__0 > 0]"); + + adag.addNext(adacparam1); + + if (k == (acch.getNbOfChannels()-1)) { + adc1 = translateAD(newElements, baseElements, tclass, task, tmle.getNextElement(0), adacparam1, adjunc); + adchoice.addNext(adc1); + } + + adchoice.addGuard("[cpt__0 == 0]"); + } + + return adacparam2; + + + + /*adacparam = new ADActionStateWithParam(parameter); adacparam.setActionValue(acch.getNbOfSamples()); tclass.getActivityDiagram().add(adacparam); @@ -904,7 +959,7 @@ public class TML2TURTLE { adc1 = translateAD(newElements, baseElements, tclass, task, tmle.getNextElement(0), adacparam, adjunc); adchoice.addNext(adc1); adchoice.addGuard("[cpt__0 == 0]"); - return adacparam; + return adacparam;*/ } } } catch (Exception e) { diff --git a/src/tmltranslator/touppaal/TML2UPPAAL.java b/src/tmltranslator/touppaal/TML2UPPAAL.java index 08fbab609660667f807bf04c3e0e7263711acacb..292f68f9a5235d7e6bf812ec54a638d649bbde13 100755 --- a/src/tmltranslator/touppaal/TML2UPPAAL.java +++ b/src/tmltranslator/touppaal/TML2UPPAAL.java @@ -349,6 +349,7 @@ public class TML2UPPAAL { // Write channel } else if (elt instanceof TMLWriteChannel) { wc = (TMLWriteChannel)elt; + loc = addLocation(template); tr = addTransition(template, previous, loc); setAssignment(tr, "nb__wr = " + wc.getNbOfSamples()); @@ -359,31 +360,37 @@ public class TML2UPPAAL { setGuard(tr1, "nb__wr>0"); setSynchronization(tr1, "wr__" +wc.getChannel(0).getName() + "!"); setAssignment(tr1, "nb__wr = nb__wr - 1"); + + loc1 = addLocation(template); + tr2 = addTransition(template, loc, loc1); + setGuard(tr2, "nb__wr==0"); + rtu.addTMLActivityElementLocation(elt, previous, loc1); + } else { loc2 = loc; loc1 = null; for(int k=0; k<wc.getNbOfChannels(); k++) { + tr1 = addTransition(template, loc, loc); + setGuard(tr1, "nb__wr>0"); + setSynchronization(tr1, "wr__" +wc.getChannel(k).getName() + "!"); + setAssignment(tr1, "nb__wr = nb__wr - 1"); + if (k == (wc.getNbOfChannels()-1)) { - tr1 = addTransition(template, loc2, loc); - setAssignment(tr1, "nb__wr = nb__wr - 1"); + loc1 = addLocation(template); + tr2 = addTransition(template, loc, loc1); + setGuard(tr2, "nb__wr==0"); + rtu.addTMLActivityElementLocation(elt, previous, loc1); } else { loc1 = addLocation(template); - tr1 = addTransition(template, loc2, loc1); + tr2 = addTransition(template, loc, loc1); + setGuard(tr2, "nb__wr == 0"); + setAssignment(tr2, "nb__wr = " + wc.getNbOfSamples()); + loc = loc1; } - if (loc2 == loc) { - setGuard(tr1, "nb__wr>0"); - } - loc2 = loc1; - setGuard(tr1, "nb__wr>0"); - setSynchronization(tr1, "wr__" +wc.getChannel(k).getName() + "!"); } } - - loc1 = addLocation(template); - tr2 = addTransition(template, loc, loc1); - setGuard(tr2, "nb__wr==0"); - rtu.addTMLActivityElementLocation(elt, previous, loc1); - makeElementBehavior(task, template, elt.getNextElement(0), loc1, end); + + makeElementBehavior(task, template, elt.getNextElement(0), loc1, end); // Send Request } else if (elt instanceof TMLSendRequest) {