diff --git a/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd b/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd index d5a593a20a1e57be3e576546242af433b1f6815d..451a87973ecbf60dfea1e4f80845603dbcb83c99 100644 --- a/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd +++ b/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd @@ -45,6 +45,8 @@ aspect BalloonExecution{ if((clauseValuesDefinition.getDefs().size() > 0) && (!transition.asDinerosTransition().getStaticTransitionInformation(). asSignalTransitionInformation().getClause().evalClause(clauseValuesDefinition))){ + + System.out.println("Signals, do not allow to fire transition!"); return Optional.of(this); } } diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java index 447e07d9a6a1109022826f7cdc1dd263105b9367..648bc62e642f6cbe5338ab63ae2359b33e320224 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java @@ -60,11 +60,7 @@ public class Main { java.lang.String pnmlPath = "../pnml-relast-engine/src/main/resources/nets/NodeNetSignalTest.pnml"; PetriNet petriNet = PnmlParser.parsePnml(pnmlPath).get(0); - for(Transition t : petriNet.allTransitions()){ - - } - - /* nodeConfiguration.setMasterUri(URI.create("http://localhost:11311")); + nodeConfiguration.setMasterUri(URI.create("http://localhost:11311")); DinerosTestNode diNeRosNode = new DinerosTestNode("TestNode", petriNet); @@ -80,7 +76,7 @@ public class Main { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); - }*/ + } } /* diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java index c0e520cd4290616db0e5b549ab86096d453ccf74..425542c1558b67772acd642af7d054cbf6e6fe26 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java @@ -1,5 +1,6 @@ package de.tudresden.inf.st.pnml.engine.ros; +import de.tudresden.inf.st.pnml.base.data.ClauseValuesDefinition; import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer; import de.tudresden.inf.st.pnml.jastadd.model.*; import org.jetbrains.annotations.NotNull; @@ -73,25 +74,57 @@ public abstract class DiNeRosNode extends AbstractNodeMain { public void notify(java.lang.String notificationType){ + Set<Transition> signalFilteredTransitions = getSignalFilteredTransitions(); + if (notificationType.equals(NOTIFICATION_MARKING_CHANGE)) { - onMarkingChangeInternal(marking.enabledBalloonTransitions()); + onMarkingChangeInternal(signalFilteredTransitions); } else if (notificationType.equals(NOTIFICATION_SIGNAL_CHANGE)) { System.out.println("NOTIFICATION_SIGNAL_CHANGE"); - onSignalChangeInternal(marking.enabledBalloonTransitions()); + onSignalChangeInternal(signalFilteredTransitions); } else if (notificationType.equals(NOTIFICATION_WAIT_ENDED)) { - onWaitEndedInternal(marking.enabledBalloonTransitions()); + onWaitEndedInternal(signalFilteredTransitions); } else if (notificationType.equals(NOTIFICATION_STARTUP_ENDED)) { - onStartupEndedInternal(marking.enabledBalloonTransitions()); + onStartupEndedInternal(signalFilteredTransitions); } } + @NotNull + private Set<Transition> getSignalFilteredTransitions() { + Set<Transition> signalFilteredTransitions = new HashSet<>(); + + ClauseValuesDefinition clauseValuesDefinition = new ClauseValuesDefinition(); + + for(Transition transition : marking.enabledBalloonTransitions()) { + if (transition.asDinerosTransition().getStaticTransitionInformation() + .asSignalTransitionInformation().getClause() != null) { + for (String signalId : transition.asDinerosTransition().getStaticTransitionInformation() + .asSignalTransitionInformation().getClause().signals()) { + for (SignalConnection sc : inputSignalConnector.getSignalConnections()) { + if (signalId.equals(sc.getId())) { + clauseValuesDefinition.addDef(sc.getId(), sc.getCurrentValue()); + break; + } + } + } + + if ((clauseValuesDefinition.getDefs().size() == 0) || + (transition.asDinerosTransition().getStaticTransitionInformation(). + asSignalTransitionInformation().getClause().evalClause(clauseValuesDefinition))) { + + signalFilteredTransitions.add(transition); + } + } + } + return signalFilteredTransitions; + } + @NotNull private TransitionSelectionResult getTransitionSelectionResult(TransitionSelectionResult res) { if (res.isFiringSelectionWait()) { try { TimeUnit.MILLISECONDS.sleep(res.asFiringSelectionWait().getWaitingTime()); - onWaitEndedInternal(marking.enabledBalloonTransitions()); + onWaitEndedInternal(getSignalFilteredTransitions()); return res; } catch (InterruptedException e) { e.printStackTrace(); diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java index bed0679e71c8a327ff549780ebc605bbe8a391db..b39ed23d0c285d17eb6669d6ecaf9177b8b2f0f8 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java @@ -16,7 +16,7 @@ public class DinerosTestNode extends DiNeRosNode { } public DinerosTestNode(String nodeName, PetriNet petriNet, BalloonMarking marking, BalloonCallbackStorage callbackStorage) { - super(nodeName, petriNet, "localhost", "mqtt"); + super(nodeName, petriNet, "localhost:2000", "mqtt"); this.marking = marking; this.callbackStorage = callbackStorage; } diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java index 83bfcbf86d80387ad1ad7cdf49f99500045dfa0e..089696d9f5e0abff908621eb125baaec52bc1f20 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java @@ -22,7 +22,7 @@ public class PetriNetInitializer { SignalTransitionInformation ti = new SignalTransitionInformation(); ti.setSubNet(dt.getStaticTransitionInformation().getSubNet() + usedSuffix); ti.setNode(dt.getStaticTransitionInformation().getNode()); - ti.setClause(dt.getStaticTransitionInformation().asSignalTransitionInformation().getClause().deepCopy()); + //ti.setClause(dt.getStaticTransitionInformation().asSignalTransitionInformation().getClause().deepCopy()); target.setMutableTransitionInformation(ti); } else if (dt.getStaticTransitionInformation().isTopicTransitionInformation()) { deepCopyTopicTransitionInformation(target, dt, usedSuffix); diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java index beb8fa14a8ece849ce1f35a0816da9f78a96f3a5..1ebb0845e9e6ee3670cb32c53f04ef5233f52f4d 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java @@ -77,7 +77,7 @@ public class ServiceTransformer { SignalTransitionInformation sti = new SignalTransitionInformation(); sti.setNode(t.asDinerosTransition().getStaticTransitionInformation().getNode()); sti.setSubNet(t.asDinerosTransition().getStaticTransitionInformation().getSubNet() + "-" + suffix); - sti.setClause(t.asDinerosTransition().getStaticTransitionInformation().asSignalTransitionInformation().getClause().deepCopy()); + //sti.setClause(t.asDinerosTransition().getStaticTransitionInformation().asSignalTransitionInformation().getClause().deepCopy()); copy.setMutableTransitionInformation(sti); copy.getName().setText(t.getName().getText());