diff --git a/libs/pnml-relast-engine-fatjar-0.1.jar b/libs/pnml-relast-engine-fatjar-0.1.jar index 235fc3c8eb382be6f18abe5d3db24622c46233bc..962eac47cbea654f89f42dfb0775e21f7ec936ba 100644 Binary files a/libs/pnml-relast-engine-fatjar-0.1.jar and b/libs/pnml-relast-engine-fatjar-0.1.jar differ diff --git a/src/main/java/de/tudresden/inf/st/sample/Main.java b/src/main/java/de/tudresden/inf/st/sample/Main.java index 0dc5012513e17edfb62b52242081ea7cffc76a3e..740e6c056a3a3a36983c4306c0dec6481710a42d 100644 --- a/src/main/java/de/tudresden/inf/st/sample/Main.java +++ b/src/main/java/de/tudresden/inf/st/sample/Main.java @@ -1,21 +1,20 @@ package de.tudresden.inf.st.sample; import de.tudresden.inf.st.pnml.engine.execution.TransitionHandlerService; -import de.tudresden.inf.st.pnml.engine.ros.DiNeRosDefaultNode; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; import de.tudresden.inf.st.pnml.jastadd.model.*; +import de.tudresden.inf.st.sample.handling.HandlingBinder; +import de.tudresden.inf.st.sample.nodes.ClientNode; +import de.tudresden.inf.st.sample.nodes.PublisherNode; +import de.tudresden.inf.st.sample.nodes.ServerNode; +import de.tudresden.inf.st.sample.nodes.SubscriberNode; import org.ros.node.DefaultNodeMainExecutor; import org.ros.node.NodeConfiguration; import org.ros.node.NodeMainExecutor; -import org.xml.sax.SAXException; -import javax.xml.parsers.ParserConfigurationException; -import java.io.IOException; import java.net.URI; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * <Generated> @@ -30,61 +29,48 @@ public class Main { private static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST); private static final NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault(); - public static void main(java.lang.String[] args) throws IOException, ParserConfigurationException, SAXException { + public static void main(java.lang.String[] args) { - /* - * <Generated> - * Petri Net base data initialization - */ + // Setup ROS Master + nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI)); - // actual petri net paths are generated + // Petri Net base data initialization List<String> petriNetPaths = new ArrayList<>(); petriNetPaths.add("src/main/resources/nets/publisher-net.pnml"); petriNetPaths.add("src/main/resources/nets/subscriber-net.pnml"); petriNetPaths.add("src/main/resources/nets/client-net.pnml"); petriNetPaths.add("src/main/resources/nets/server-net.pnml"); + // Parse the PNML files List<PetriNet> petriNets = new ArrayList<>(); - Map<String, BalloonMarking> markings = new HashMap<>(); - Map<String, BalloonCallbackStorage> callbackStorages = new HashMap<>(); - for(String petriNetPath : petriNetPaths){ petriNets.add(PnmlParser.parsePnml(petriNetPath).get(0)); } + // Initialize the Handling TransitionHandlerService transitionHandlerService = TransitionHandlerService.getInstance(); - for(PetriNet petriNet : petriNets){ - markings.put(petriNet.getId(), petriNet.initializeBalloonMarking()); BalloonCallbackStorage storage = petriNet.initializeCallbackStorage(); transitionHandlerService.init(petriNet.getId(), storage); - callbackStorages.put(petriNet.getId(), storage); } - /* - * <Generated> - * Start of the Dineros NodescallbackMap1 - */ - - nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI)); - - // generated - DiNeRosNode node1 = new Node1("node1", petriNets.get(0), - markings.get(petriNets.get(0).getId()), callbackStorages.get(petriNets.get(0).getId())); - DiNeRosNode node2 = new Node2("node2", petriNets.get(1), - markings.get(petriNets.get(1).getId()), callbackStorages.get(petriNets.get(1).getId())); - + // Create the ROS nodes + DiNeRosNode node0 = new PublisherNode("PublisherNode", petriNets.get(0), MQTT_HOST, "mqtt"); + DiNeRosNode node1 = new SubscriberNode("SubscriberNode", petriNets.get(1), MQTT_HOST, "mqtt"); + DiNeRosNode node2 = new ClientNode("ClientNode", petriNets.get(2), MQTT_HOST, "mqtt"); + DiNeRosNode node3 = new ServerNode("ServerNode", petriNets.get(3), MQTT_HOST, "mqtt"); - DiNeRosNode diNeRosNode = new DiNeRosDefaultNode("TestNode", petriNets.get(0), - markings.get(petriNets.get(0).getId()), callbackStorages.get(petriNets.get(0).getId())); - diNeRosNode.getDinerosServiceServers().put("locB", new DiNeRosDefaultServer()); + // Setup handlers of the ROS nodes + HandlingBinder.bindHandlersToPublisherNode(petriNets.get(0)); + HandlingBinder.bindHandlersToSubscriberNode(petriNets.get(0)); + HandlingBinder.bindHandlersToClientNode(petriNets.get(0)); + HandlingBinder.bindHandlersToServerNode(petriNets.get(0)); - new Thread(() -> nodeMainExecutor.execute(node1, nodeConfiguration)) {{ - start(); - }}; + // Start the ROS nodes + new Thread(() -> nodeMainExecutor.execute(node0, nodeConfiguration)) {{start();}}; + new Thread(() -> nodeMainExecutor.execute(node1, nodeConfiguration)) {{start();}}; + new Thread(() -> nodeMainExecutor.execute(node2, nodeConfiguration)) {{start();}}; + new Thread(() -> nodeMainExecutor.execute(node3, nodeConfiguration)) {{start();}}; - new Thread(() -> nodeMainExecutor.execute(node2, nodeConfiguration)) {{ - start(); - }}; } } diff --git a/src/main/java/de/tudresden/inf/st/sample/handling/Handlers.java b/src/main/java/de/tudresden/inf/st/sample/handling/HandlerFunctions.java similarity index 55% rename from src/main/java/de/tudresden/inf/st/sample/handling/Handlers.java rename to src/main/java/de/tudresden/inf/st/sample/handling/HandlerFunctions.java index ecec498cda0a617a0dbd6d86b4b35ead9a1b8852..79a90fd5e9fd52ec4550137bae51679acf6175c6 100644 --- a/src/main/java/de/tudresden/inf/st/sample/handling/Handlers.java +++ b/src/main/java/de/tudresden/inf/st/sample/handling/HandlerFunctions.java @@ -1,31 +1,30 @@ package de.tudresden.inf.st.sample.handling; -import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler; - import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.function.Function; -public final class Handlers { +public final class HandlerFunctions { - TransitionHandler sampleHandlerColor = new TransitionHandler(1, maps -> { + final static Function<List<Map<String, Object>>, List<Map<String, Object>>> SAMPLE_COLOR_HANDLING_FUNCTION = maps -> { for(Map<String, Object> m : maps){ m.keySet().stream().filter(s -> false).forEach(s -> m.replace("color", "light-red")); } return maps; - }); + }; - TransitionHandler sampleHandlerStatus = new TransitionHandler(1, maps -> { + final static Function<List<Map<String, Object>>, List<Map<String, Object>>> SAMPLE_SUCCESS_HANDLING_FUNCTION = maps -> { for(Map<String, Object> m : maps){ m.keySet().stream().filter(s -> false).forEach(s -> m.replace("pickPlaceSuccess", true)); } return maps; - }); + }; - TransitionHandler sampleFinalHandler = new TransitionHandler(1, maps -> { + final static Function<List<Map<String, Object>>, List<Map<String, Object>>> SAMPLE_FINAL_HANDLING_FUNCTION = maps -> { List<Map<String, Object>> sList = new ArrayList<>(); sList.add(maps.get(0)); return sList; - }); + }; } diff --git a/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java b/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java index d1073d8338776c6628317b783cc1eb95e2d87970..522fdb87a35362452386dc4fefbca0f2c02d9d3f 100644 --- a/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java +++ b/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java @@ -1,48 +1,28 @@ package de.tudresden.inf.st.sample.handling; +import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; + /** * <Generated> */ public class HandlingBinder { - // methods generated for each petri net - /* public static final Map<String, List<AbstractNetCallback>> initCallbacksForNode1(PetriNet petriNet){ - - Map<String, List<AbstractNetCallback>> callbackMap = new HashMap<>(); - - // TODO: implementation by user + public static void bindHandlersToClientNode(PetriNet petriNet){ + petriNet.registerHandler("ClientTransition1", 1, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION); + } - SampleNetCallback callback = new SampleNetCallback("default_cb", 1, new ArrayList<>()); - - for(Transition t : petriNet.allTransitions()){ - if(t.asInputSignalTransition().getStaticTransitionInformation().isDefaultTransitionInformation()){ - List<AbstractNetCallback> cbList = new ArrayList<>(); - cbList.add(callback); - callbackMap.put(t.getId(), cbList); - } - } - - return callbackMap; + public static void bindHandlersToServerNode(PetriNet petriNet){ + petriNet.registerHandler("ConnectorTransition", 1, HandlerFunctions.SAMPLE_SUCCESS_HANDLING_FUNCTION); + petriNet.registerHandler("ConnectorTransition", 2, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION); } - // methods generated for each petri net - public static final Map<String, List<AbstractNetCallback>> initCallbacksForNode2(PetriNet petriNet){ - - Map<String, List<AbstractNetCallback>> callbackMap = new HashMap<>(); - - // TODO: implementation by user - - SampleNetCallback callback = new SampleNetCallback("default_cb", 1, new ArrayList<>()); - - for(Transition t : petriNet.allTransitions()){ - if(t.asInputSignalTransition().getStaticTransitionInformation().isDefaultTransitionInformation()){ - List<AbstractNetCallback> cbList = new ArrayList<>(); - cbList.add(callback); - callbackMap.put(t.getId(), cbList); - } - } + public static void bindHandlersToPublisherNode(PetriNet petriNet){ + petriNet.registerHandler("SortRed", 1, HandlerFunctions.SAMPLE_COLOR_HANDLING_FUNCTION); + petriNet.registerHandler("SortRed", 2, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION); + } - return callbackMap; - }*/ + public static void bindHandlersToSubscriberNode(PetriNet petriNet){ + petriNet.registerHandler("SubTransition", 1, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION); + } } diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/ClientNode.java b/src/main/java/de/tudresden/inf/st/sample/nodes/ClientNode.java index df1dc7c20517755718cc2af3ba8353d5eec0aab6..d199e5221c0a6753f7457c398a555a70d8410235 100644 --- a/src/main/java/de/tudresden/inf/st/sample/nodes/ClientNode.java +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/ClientNode.java @@ -11,22 +11,15 @@ public class ClientNode extends DiNeRosNode { super(nodeName, petriNet, rcHost, gcProtocol); } - public ClientNode(String nodeName, PetriNet petriNet, BalloonMarking marking, BalloonCallbackStorage callbackStorage, InputSignalConnector inputSignalConnector) { - super(nodeName, petriNet, marking, callbackStorage, inputSignalConnector); - } - - @Override - protected void nodeLoop() { - - } - @Override protected TransitionSelectionResult onChange(List<Transition> list) { - return null; + return list.size() == 0 ? + new FiringSelectionNone() : fireRandomEnabledTransition(list); } @Override protected TransitionSelectionResult onStartupEnded(List<Transition> list) { - return null; + return list.size() == 0 ? + new FiringSelectionNone() : fireRandomEnabledTransition(list); } } diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/PublisherNode.java b/src/main/java/de/tudresden/inf/st/sample/nodes/PublisherNode.java index 1c0a36500cd8c6fb7e4756bf22e802b92c47f3f1..3bac0bea18a0329f264641e78caf06a6ff8a28ce 100644 --- a/src/main/java/de/tudresden/inf/st/sample/nodes/PublisherNode.java +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/PublisherNode.java @@ -11,22 +11,15 @@ public class PublisherNode extends DiNeRosNode { super(nodeName, petriNet, rcHost, gcProtocol); } - public PublisherNode(String nodeName, PetriNet petriNet, BalloonMarking marking, BalloonCallbackStorage callbackStorage, InputSignalConnector inputSignalConnector) { - super(nodeName, petriNet, marking, callbackStorage, inputSignalConnector); - } - - @Override - protected void nodeLoop() { - - } - @Override protected TransitionSelectionResult onChange(List<Transition> list) { - return null; + return list.size() == 0 ? + new FiringSelectionNone() : fireRandomEnabledTransition(list); } @Override protected TransitionSelectionResult onStartupEnded(List<Transition> list) { - return null; + return list.size() == 0 ? + new FiringSelectionNone() : fireRandomEnabledTransition(list); } } diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/ServerNode.java b/src/main/java/de/tudresden/inf/st/sample/nodes/ServerNode.java index 108821b062dab681275854e9538b9048f62372a6..858c20d0497b6d9caa19555d4f00ecc776ee901d 100644 --- a/src/main/java/de/tudresden/inf/st/sample/nodes/ServerNode.java +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/ServerNode.java @@ -11,22 +11,15 @@ public class ServerNode extends DiNeRosNode { super(nodeName, petriNet, rcHost, gcProtocol); } - public ServerNode(String nodeName, PetriNet petriNet, BalloonMarking marking, BalloonCallbackStorage callbackStorage, InputSignalConnector inputSignalConnector) { - super(nodeName, petriNet, marking, callbackStorage, inputSignalConnector); - } - - @Override - protected void nodeLoop() { - - } - @Override protected TransitionSelectionResult onChange(List<Transition> list) { - return null; + return list.size() == 0 ? + new FiringSelectionNone() : fireRandomEnabledTransition(list); } @Override protected TransitionSelectionResult onStartupEnded(List<Transition> list) { - return null; + return list.size() == 0 ? + new FiringSelectionNone() : fireRandomEnabledTransition(list); } } diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/SubscriberNode.java b/src/main/java/de/tudresden/inf/st/sample/nodes/SubscriberNode.java index 7ab01781376d5b27644067961c9c24262b9974da..8baa58e23397520306bdc60e70c0b806410fdea8 100644 --- a/src/main/java/de/tudresden/inf/st/sample/nodes/SubscriberNode.java +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/SubscriberNode.java @@ -11,22 +11,15 @@ public class SubscriberNode extends DiNeRosNode { super(nodeName, petriNet, rcHost, gcProtocol); } - public SubscriberNode(String nodeName, PetriNet petriNet, BalloonMarking marking, BalloonCallbackStorage callbackStorage, InputSignalConnector inputSignalConnector) { - super(nodeName, petriNet, marking, callbackStorage, inputSignalConnector); - } - - @Override - protected void nodeLoop() { - - } - @Override protected TransitionSelectionResult onChange(List<Transition> list) { - return null; + return list.size() == 0 ? + new FiringSelectionNone() : fireRandomEnabledTransition(list); } @Override protected TransitionSelectionResult onStartupEnded(List<Transition> list) { - return null; + return list.size() == 0 ? + new FiringSelectionNone() : fireRandomEnabledTransition(list); } } diff --git a/src/main/resources/nets/subscriber-net.pnml b/src/main/resources/nets/subscriber-net.pnml index 94a161aed23eaf57a807fbb7a9560b2f904811be..0b951970011d061ed03b9be6962939f68f7af74e 100644 --- a/src/main/resources/nets/subscriber-net.pnml +++ b/src/main/resources/nets/subscriber-net.pnml @@ -17,6 +17,29 @@ <text>0</text> </initialMarking> </place> + <transition id="SubTransition"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <node>n3</node> + <subnet>s3</subnet> + <type>discreteTransitionType</type> + <inputsignalclause></inputsignalclause> + </toolspecific> + <name> + <text>SubTransition</text> + </name> + </transition> + <place id="sub2"> + <name> + <text>sub2</text> + </name> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <node>n3</node> + <subnet>s3</subnet> + </toolspecific> + <initialMarking> + <text>0</text> + </initialMarking> + </place> </page> </page> <name>