diff --git a/src/main/java/avatartranslator/AvatarBlock.java b/src/main/java/avatartranslator/AvatarBlock.java index 1136c88f3459e5f8e4dd581947ffbca7f643f7f7..2401f90bcb13a55178137ee449dd81d9896ade82 100644 --- a/src/main/java/avatartranslator/AvatarBlock.java +++ b/src/main/java/avatartranslator/AvatarBlock.java @@ -341,6 +341,9 @@ public class AvatarBlock extends AvatarElement implements AvatarStateMachineOwne * @return The attribute if found, or null otherwise */ public AvatarAttribute getAvatarAttributeWithName(String _name) { + if ((attributes == null) || (_name == null)) { + return null; + } for (AvatarAttribute attribute : attributes) { if (attribute.getName().compareTo(_name) == 0) { return attribute; diff --git a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java index 02a4feb15a9d0d5bfae8c10b5754fec9191825d5..28c77f8a21517aed8398d48e26bc1574553c0c93 100644 --- a/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java +++ b/src/main/java/tmltranslator/toavatar/FullTML2Avatar.java @@ -710,17 +710,20 @@ public class FullTML2Avatar { AvatarRelation ar = new AvatarRelation(event.getName(), taskBlockMap.get(event.getOriginTask()), taskBlockMap.get(event.getDestinationTask()), event.getReferenceObject()); + ar.setAsynchronous(true); + AvatarSignal sigOut = signalOutMap.get(event.getName()); AvatarSignal sigIn = signalInMap.get(event.getName()); + ar.addSignals(sigOut, sigIn); TraceManager.addDev("Relation for event " + event.getName() + " sigout:" + sigOut.getSignalName() + " sigin:" + sigIn.getSignalName()); - AvatarSignal sigNotified = signalInMap.get(event.getName() + NOTIFIED); - ar.addSignals(sigOut, sigIn); + //AvatarSignal sigNotified = signalInMap.get(event.getName() + NOTIFIED); + //ar.addSignals(sigOut, sigIn); - AvatarBlock ab0 = taskBlockMap.get(event.getOriginTask()); - AvatarBlock ab1 = taskBlockMap.get(event.getDestinationTask()); + //AvatarBlock ab0 = taskBlockMap.get(event.getOriginTask()); + //AvatarBlock ab1 = taskBlockMap.get(event.getDestinationTask()); //ab0.addSignal(new AvatarSignal(event.getName(), AvatarSignal.OUT, null)); //ab1.addSignal(new AvatarSignal(event.getName(), AvatarSignal.IN, null)); @@ -734,9 +737,11 @@ public class FullTML2Avatar { ar.setSizeOfFIFO(event.getMaxSize()); } - //avspec.addRelation(ar); + avspec.addRelation(ar); + - AvatarBlock FifoEvt = AvatarBlockTemplate.getFifoBlockWithNotified("Block" + event.getName(), + // Old way to do: using extra blocks. We simply use an asynchronous channel + /*AvatarBlock FifoEvt = AvatarBlockTemplate.getFifoBlockWithNotified("Block" + event.getName(), avspec, ar, event.getReferenceObject(), sigOut, sigIn, sigNotified, event.getMaxSize(), event.getID()); avspec.addBlock(FifoEvt); @@ -749,7 +754,7 @@ public class FullTML2Avatar { event.getReferenceObject()); ar.addSignals(FifoEvt.getAvatarSignalWithName("read"), sigIn); ar.addSignals(FifoEvt.getAvatarSignalWithName("notified"), sigNotified); - avspec.addRelation(ar); + avspec.addRelation(ar);*/ } @@ -1140,17 +1145,22 @@ public class FullTML2Avatar { elementList.add(tran); } else { - //Notify Event, I don't know how to translate this - AvatarSignal sig = signalInMap.get(evt.getName() + NOTIFIED); - TraceManager.addDev("sig=" + sig); - AvatarActionOnSignal aaos = new AvatarActionOnSignal(ae.getName(), sig, ae.getReferenceObject()); + TraceManager.addDev("Class: " + ae.getClass() + " ae=" + ae.toString()); + //Notify Event: we use a query signal + AvatarSignal sig = signalInMap.get(evt.getName()); + String param = ((TMLActivityElementEvent)ae).getVariable(); + AvatarAttribute at = block.getAvatarAttributeWithName(param); + if (at == null) { + at = new AvatarAttribute(param, AvatarType.INTEGER, block, ae.getReferenceObject()); + } + TraceManager.addDev("sig=" + sig); + AvatarQueryOnSignal aqos = new AvatarQueryOnSignal(ae.getName(), sig, at, ae.getReferenceObject()); tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject()); - aaos.addValue(aee.getVariable()); - aaos.addNext(tran); - elementList.add(aaos); + aqos.addNext(tran); + elementList.add(aqos); elementList.add(tran); }