diff --git a/src/main/java/tmltranslator/toavatar/TML2Avatar.java b/src/main/java/tmltranslator/toavatar/TML2Avatar.java index 945c82475271a82f58db8ce4f4675af2041745a9..f32e1404f4aee4910b653fba19620e7bcfa57580 100644 --- a/src/main/java/tmltranslator/toavatar/TML2Avatar.java +++ b/src/main/java/tmltranslator/toavatar/TML2Avatar.java @@ -674,7 +674,7 @@ public class TML2Avatar { } else if (ae instanceof TMLActivityElementWithAction) { //Might be encrypt or decrypt - AvatarState as = new AvatarState(ae.getValue().replaceAll(" ", "") + "_" + ae.getName().replaceAll(" ", ""), ae.getReferenceObject()); + AvatarState as = new AvatarState(ae.getValue().replaceAll(" ", "").replaceAll("\\*","").replaceAll("\\+","").replaceAll("\\-","") + "_" + ae.getName().replaceAll(" ", "").replaceAll("\\*","").replaceAll("\\+","").replaceAll("\\-",""), ae.getReferenceObject()); tran = new AvatarTransition(block, "__after_" + ae.getName(), ae.getReferenceObject()); as.addNext(tran); elementList.add(as); @@ -1760,6 +1760,7 @@ public class TML2Avatar { AvatarBlock fifo = new AvatarBlock("FIFO", avspec,null); for (TMLChannel channel:tmlmodel.getChannels()){ if (channel.getName().contains("JOINCHANNEL")){ + //System.out.println("JOINCHANNEL"); AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(channel.getOriginTask()), taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject()); ar.setPrivate(false); if (channel.getType()==TMLChannel.BRBW){ @@ -1823,7 +1824,56 @@ public class TML2Avatar { } avspec.addRelation(ar); } + + else if (channel.getName().contains("FORKCHANNEL") || channel.getName().contains("fork__")){ + System.out.println("FORKCHANNEL " + channel.getName()); + AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(channel.getOriginTask()), taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject()); + ar.setPrivate(false); + + //System.out.println(channel.getName() + " " +channel.getOriginTask().getName() + " " + channel.getDestinationTask().getName()); + //Find in signal + //Sig1 contains IN Signals, Sig2 contains OUT signals + List<AvatarSignal> sig1 = new ArrayList<AvatarSignal>(); + List<AvatarSignal> sig2 = new ArrayList<AvatarSignal>(); + for (AvatarSignal sig: taskBlockMap.get(channel.getDestinationTask()).getSignals()){ + if (sig.getInOut()==AvatarSignal.IN){ + String name = sig.getName(); + String tmp = getName(channel.getName()); + if (name.equals(tmp.split("FORK")[tmp.split("FORK").length-1]) || name.equals(tmp)){ + sig1.add(sig); + } + } + } + for (AvatarSignal sig: taskBlockMap.get(channel.getOriginTask()).getSignals()){ + if (sig.getInOut()==AvatarSignal.OUT){ + String name = sig.getName(); + String tmp = getName(channel.getName()); + if (name.equals(tmp.split("FORK")[tmp.split("FORK").length-1]) || name.equals(tmp)){ + sig2.add(sig); + } + } + } + + if (sig1.size()==1 && sig2.size()==1){ + if (channel.getType()==TMLChannel.NBRNBW && mc){ + AvatarSignal read = fifo.getSignalByName("readSignal"); + ar.block2= fifo; + //Set IN signal with read + ar.addSignals(sig1.get(0), read); + AvatarRelation ar2= new AvatarRelation(channel.getName()+"2", fifo, taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject()); + AvatarSignal write = fifo.getSignalByName("writeSignal"); + //set OUT signal with write + ar2.addSignals(write, sig2.get(0)); + ar2.setAsynchronous(false); + avspec.addRelation(ar2); + } + else { + ar.addSignals(sig2.get(0), sig1.get(0)); + } + } + avspec.addRelation(ar); + } else if (channel.isBasicChannel()){ //System.out.println("checking channel " + channel.getName()); AvatarRelation ar= new AvatarRelation(channel.getName(), taskBlockMap.get(channel.getOriginTask()), taskBlockMap.get(channel.getDestinationTask()), channel.getReferenceObject()); @@ -1920,7 +1970,7 @@ public class TML2Avatar { avspec.addRelation(ar); } else { - System.out.println("Found non-basic channel"); + // System.out.println("Found non-basic channel"); //If not a basic channel, create a relation between TOP block and itself AvatarRelation relation= new AvatarRelation(channel.getName(), top, top, channel.getReferenceObject()); AvatarSignal s1 = new AvatarSignal(getName(channel.getName())+"in", AvatarSignal.IN, null); @@ -2062,7 +2112,11 @@ public class TML2Avatar { } avspec.addRelation(ar); } + + // System.out.println("Avatar relations " + avspec.getRelations()); + for (AvatarSignal sig: signals){ + // System.out.println("signal " + sig.getName()); //check that all signals are put in relations AvatarRelation ar = avspec.getAvatarRelationWithSignal(sig); if (ar==null){