From 93b53358d34ef869aaa64f7d292c8e42c87228e5 Mon Sep 17 00:00:00 2001
From: SebastianEbert <sebastian.ebert@tu-dresden.de>
Date: Fri, 7 Jul 2023 12:21:34 +0200
Subject: [PATCH] added none-result, added sample sensorics node

---
 .../balloonMarking/BalloonExecution.jadd      |  6 ++
 .../balloonMarking/BalloonExecution.relast    |  3 +-
 .../de/tudresden/inf/st/pnml/engine/Main.java |  5 +-
 .../engine/{testNodes => example}/Client.java |  2 +-
 .../DinerosTestNode.java                      |  2 +-
 .../st/pnml/engine/example/SensoricsNode.java | 76 +++++++++++++++++++
 .../engine/{testNodes => example}/Server.java |  2 +-
 .../engine/execution/TransitionHandler.java   |  2 +-
 .../inf/st/pnml/engine/ros/DiNeRosNode.java   |  7 +-
 9 files changed, 95 insertions(+), 10 deletions(-)
 rename src/main/java/de/tudresden/inf/st/pnml/engine/{testNodes => example}/Client.java (97%)
 rename src/main/java/de/tudresden/inf/st/pnml/engine/{testNodes => example}/DinerosTestNode.java (98%)
 create mode 100644 src/main/java/de/tudresden/inf/st/pnml/engine/example/SensoricsNode.java
 rename src/main/java/de/tudresden/inf/st/pnml/engine/{testNodes => example}/Server.java (95%)

diff --git a/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd b/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd
index 3dd6750..202bd1b 100644
--- a/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd
+++ b/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd
@@ -11,6 +11,9 @@ aspect BalloonExecution{
         syn FiringSelectionFail TransitionSelectionResult.asFiringSelectionFail()=null;
         eq FiringSelectionFail.asFiringSelectionFail()=this;
 
+        syn FiringSelectionNone TransitionSelectionResult.asFiringSelectionNone()=null;
+        eq FiringSelectionNone.asFiringSelectionNone()=this;
+
         syn boolean TransitionSelectionResult.isFiringSelectionSuccess()=false;
         eq FiringSelectionSuccess.isFiringSelectionSuccess()=true;
 
@@ -20,6 +23,9 @@ aspect BalloonExecution{
         syn boolean TransitionSelectionResult.isFiringSelectionFail()=false;
         eq FiringSelectionFail.isFiringSelectionFail()=true;
 
+        syn boolean TransitionSelectionResult.isFiringSelectionNone()=false;
+        eq FiringSelectionNone.isFiringSelectionNone()=true;
+
         public Optional<BalloonMarking> BalloonMarking.fireTransition(Transition transition, BalloonCallbackStorage callbackStorage,
             InputSignalConnector inputSignalConnector,de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode node, boolean requireFlush) {
 
diff --git a/src/main/jastadd/engine/balloonMarking/BalloonExecution.relast b/src/main/jastadd/engine/balloonMarking/BalloonExecution.relast
index 66385e3..f87f2eb 100644
--- a/src/main/jastadd/engine/balloonMarking/BalloonExecution.relast
+++ b/src/main/jastadd/engine/balloonMarking/BalloonExecution.relast
@@ -7,4 +7,5 @@ abstract TransitionSelectionResult;
 FiringSelectionSuccess : TransitionSelectionResult;
 rel FiringSelectionSuccess.Transition -> Transition;
 FiringSelectionWait : TransitionSelectionResult ::= <WaitingTime:int>;
-FiringSelectionFail : TransitionSelectionResult;
\ No newline at end of file
+FiringSelectionFail : TransitionSelectionResult;
+FiringSelectionNone : TransitionSelectionResult;
\ No newline at end of file
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 d6e9ec4..f34e737 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
@@ -1,16 +1,13 @@
 package de.tudresden.inf.st.pnml.engine;
 
 import de.tudresden.inf.st.pnml.engine.execution.DefaultFinalTransitionHandler;
-import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler;
-import de.tudresden.inf.st.pnml.engine.testNodes.DinerosTestNode;
+import de.tudresden.inf.st.pnml.engine.example.DinerosTestNode;
 import de.tudresden.inf.st.pnml.jastadd.model.*;
 import org.ros.node.DefaultNodeMainExecutor;
 import org.ros.node.NodeConfiguration;
 import org.ros.node.NodeMainExecutor;
 
 import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
 
 public class Main {
 
diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Client.java b/src/main/java/de/tudresden/inf/st/pnml/engine/example/Client.java
similarity index 97%
rename from src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Client.java
rename to src/main/java/de/tudresden/inf/st/pnml/engine/example/Client.java
index 58077a6..28b2d78 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Client.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/example/Client.java
@@ -1,4 +1,4 @@
-package de.tudresden.inf.st.pnml.engine.testNodes;
+package de.tudresden.inf.st.pnml.engine.example;
 
 import org.ros.exception.RemoteException;
 import org.ros.exception.RosRuntimeException;
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/example/DinerosTestNode.java
similarity index 98%
rename from src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java
rename to src/main/java/de/tudresden/inf/st/pnml/engine/example/DinerosTestNode.java
index d931a9e..d4c5d76 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/example/DinerosTestNode.java
@@ -1,4 +1,4 @@
-package de.tudresden.inf.st.pnml.engine.testNodes;
+package de.tudresden.inf.st.pnml.engine.example;
 
 import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
 import de.tudresden.inf.st.pnml.jastadd.model.*;
diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/example/SensoricsNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/example/SensoricsNode.java
new file mode 100644
index 0000000..99dbc8a
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/example/SensoricsNode.java
@@ -0,0 +1,76 @@
+package de.tudresden.inf.st.pnml.engine.example;
+
+import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
+import de.tudresden.inf.st.pnml.jastadd.model.*;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Set;
+
+public class SensoricsNode extends DiNeRosNode {
+
+    public SensoricsNode(String nodeName, PetriNet petriNet, String rcHost, String gcProtocol) {
+        super(nodeName, petriNet, rcHost, gcProtocol);
+    }
+
+    @Override
+    protected void nodeLoop() {}
+
+    @NotNull
+    private TransitionSelectionResult fireFirstEnabled(Set<Transition> enabledTransitions) {
+
+
+        FiringSelectionSuccess fsc = new FiringSelectionSuccess();
+
+        for (Transition t : enabledTransitions) {
+            fsc.setTransition(t);
+            break;
+        }
+
+        return fsc;
+    }
+
+    @Override
+    protected TransitionSelectionResult onMarkingChange(Set<Transition> enabledTransitions) {
+
+        for(Transition t : enabledTransitions){
+
+            if(t.getId().equals("GetSensorData")){
+                FiringSelectionSuccess sel = new FiringSelectionSuccess();
+                sel.setTransition(t);
+                return sel;
+            }
+
+            if(t.getId().equals("ProcessSensorData")){
+                FiringSelectionWait sel = new FiringSelectionWait();
+                sel.setWaitingTime(100);
+                return sel;
+            }
+        }
+
+        return new FiringSelectionNone();
+    }
+
+    @Override
+    protected TransitionSelectionResult onSignalChange(Set<Transition> enabledTransitions) {
+
+        for(Transition t : enabledTransitions){
+            if(t.getId().equals("GetSensorData")){
+                FiringSelectionSuccess sel = new FiringSelectionSuccess();
+                sel.setTransition(t);
+                return sel;
+            }
+        }
+
+        return new FiringSelectionNone();
+    }
+
+    @Override
+    protected TransitionSelectionResult onWaitEnded(Set<Transition> enabledTransitions) {
+        return fireFirstEnabled(enabledTransitions);
+    }
+
+    @Override
+    protected TransitionSelectionResult onStartupEnded(Set<Transition> enabledTransitions) {
+        return new FiringSelectionNone();
+    }
+}
diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Server.java b/src/main/java/de/tudresden/inf/st/pnml/engine/example/Server.java
similarity index 95%
rename from src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Server.java
rename to src/main/java/de/tudresden/inf/st/pnml/engine/example/Server.java
index 16ec095..d037ac0 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/Server.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/example/Server.java
@@ -1,4 +1,4 @@
-package de.tudresden.inf.st.pnml.engine.testNodes;
+package de.tudresden.inf.st.pnml.engine.example;
 
 import org.ros.namespace.GraphName;
 import org.ros.node.AbstractNodeMain;
diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionHandler.java b/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionHandler.java
index 321f8e8..9a2554c 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionHandler.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionHandler.java
@@ -14,7 +14,7 @@ public abstract class TransitionHandler{
 
     private String id;
     private int priority;
-    private List<String> params = new ArrayList<>();
+    protected List<String> params = new ArrayList<>();
 
     public TransitionHandler(String id, int priority, List<String> params) {
         this.id = id;
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 fc3f24b..264194d 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
@@ -227,12 +227,17 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
             }
         }
 
+        if(res.isFiringSelectionNone()){
+            return;
+        }
+
         if (res.isFiringSelectionFail()) {
             System.err.println("[DiNeROS-Node] [" + nodeName + "] Firing selection action failed!");
             return;
         }
 
-        System.out.println("FIRING TRANSITION");
+        System.out.println("[DiNeROS-Node] [" + nodeName + "] " +
+                "Firing Transition " + res.asFiringSelectionSuccess().getTransition().getId());
         marking.fireTransition(res.asFiringSelectionSuccess()
                 .getTransition(), callbackStorage, inputSignalConnector, this, true);
 
-- 
GitLab