diff --git a/build.gradle b/build.gradle index 4f8a10197f3c80bba9cd79f148c31900ca9390e6..336f5bbfa8cc158893aa58864f95cdb8e4fa8e5a 100644 --- a/build.gradle +++ b/build.gradle @@ -56,5 +56,10 @@ task fatJar(type: Jar) { configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) } } - manifest.attributes "Main-Class": "${mainClassName}" + manifest.attributes "Main-Class": "de.tudresden.inf.st.sample.Main" +} + +run { + mainClassName = 'de.tudresden.inf.st.sample.Main' + standardInput = System.in } diff --git a/libs/pnml-relast-engine-fatjar-0.1.jar b/libs/pnml-relast-engine-fatjar-0.1.jar index 06f20b04c51a4af521214389dc8ee0a206229fab..d3af3f2fe8490694a105ed70a5e35335b92b5293 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 ec7db71247cd951208b8d763291961158ed33dfe..33c34860845168e089db8598462fd42faaae5476 100644 --- a/src/main/java/de/tudresden/inf/st/sample/Main.java +++ b/src/main/java/de/tudresden/inf/st/sample/Main.java @@ -1,5 +1,6 @@ package de.tudresden.inf.st.sample; +import com.fasterxml.jackson.databind.ObjectMapper; import de.tudresden.inf.st.pnml.engine.execution.TransitionCallback; import de.tudresden.inf.st.pnml.engine.execution.TransitionCallbackService; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; @@ -8,6 +9,7 @@ import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage; import de.tudresden.inf.st.pnml.jastadd.model.BalloonMarking; import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser; +import de.tudresden.inf.st.sample.balloon.Token; import de.tudresden.inf.st.sample.callback.AbstractNetCallback; import de.tudresden.inf.st.sample.callback.CallbackMapper; import de.tudresden.inf.st.sample.communication.Node2Subscriber1; @@ -41,13 +43,25 @@ public class Main { public static void main(java.lang.String[] args) throws IOException, ParserConfigurationException, SAXException { + /*ObjectMapper mapper = new ObjectMapper(); + + Token t = new Token(); + t.setField("Test"); + t.getFieldList().add("TestListElement"); + + System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t)); + + if(t != null){ + return; + }*/ + /* * <Generated> * Petri Net base data initialization */ // actual petri net paths are generated - String[] petriNetPaths = {"/src/main/resources/nets/publisher-net.pnml", "/src/main/resources/nets/subscriber-net.pnml"}; + String[] petriNetPaths = {"src/main/resources/nets/publisher-net.pnml", "src/main/resources/nets/subscriber-net.pnml"}; List<PetriNet> petriNets = new ArrayList<>(); Map<String, BalloonMarking> markings = new HashMap<>(); Map<String, BalloonCallbackStorage> callbackStorages = new HashMap<>(); @@ -75,13 +89,17 @@ public class Main { Map<String, List<AbstractNetCallback>> callbackMap1 = CallbackMapper.initCallbacksForNode1(petriNets.get(0)); for (Map.Entry<String, List<AbstractNetCallback>> entry : callbackMap1.entrySet()) { - transitionCallbackService.registerCallback(petriNets.get(0), entry.getKey(), (TransitionCallback) entry.getValue()); + for(AbstractNetCallback anc : entry.getValue()){ + transitionCallbackService.registerCallback(petriNets.get(0), entry.getKey(), anc); + } } Map<String, List<AbstractNetCallback>> callbackMap2 = CallbackMapper.initCallbacksForNode2(petriNets.get(1)); for (Map.Entry<String, List<AbstractNetCallback>> entry : callbackMap2.entrySet()) { - transitionCallbackService.registerCallback(petriNets.get(1), entry.getKey(), (TransitionCallback) entry.getValue()); + for(AbstractNetCallback anc : entry.getValue()){ + transitionCallbackService.registerCallback(petriNets.get(1), entry.getKey(), anc); + } } /* diff --git a/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java b/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java index 3f4a28f777f234c100ae7593b37f7625ec59b884..4f96aae1de5d00f25d49760cf5830d7413533780 100644 --- a/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java +++ b/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java @@ -1,7 +1,11 @@ package de.tudresden.inf.st.sample.callback; +import de.tudresden.inf.st.pnml.engine.execution.DefaultTransitionCallback; +import de.tudresden.inf.st.pnml.engine.execution.TransitionCallback; import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; +import de.tudresden.inf.st.pnml.jastadd.model.Transition; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -18,6 +22,16 @@ public class CallbackMapper { // 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); + } + } + return callbackMap; } @@ -28,6 +42,16 @@ public class CallbackMapper { // 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); + } + } + return callbackMap; } } diff --git a/src/main/java/de/tudresden/inf/st/sample/callback/SampleNetCallback.java b/src/main/java/de/tudresden/inf/st/sample/callback/SampleNetCallback.java new file mode 100644 index 0000000000000000000000000000000000000000..9bcd27ed1e58f9fbc5e243e2071b0d08a75c0c0e --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/sample/callback/SampleNetCallback.java @@ -0,0 +1,18 @@ +package de.tudresden.inf.st.sample.callback; + +import de.tudresden.inf.st.sample.balloon.Token; + +import java.util.List; + +public class SampleNetCallback extends AbstractNetCallback{ + + public SampleNetCallback(String id, int priority, List<String> params) { + super(id, priority, params); + } + + @Override + public void processTokenCallback(List<Token> tokens) { + System.out.println("Executing callback: " + getId()); + tokens.subList(1, tokens.size()).clear(); + } +} diff --git a/src/main/java/de/tudresden/inf/st/sample/communication/Node2Subscriber1.java b/src/main/java/de/tudresden/inf/st/sample/communication/Node2Subscriber1.java index 4a912da4ef7cff26f00f06ab63456aae86e23146..247e1500c40d439d64ccefbdf40451365569d718 100644 --- a/src/main/java/de/tudresden/inf/st/sample/communication/Node2Subscriber1.java +++ b/src/main/java/de/tudresden/inf/st/sample/communication/Node2Subscriber1.java @@ -6,12 +6,23 @@ import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; public class Node2Subscriber1 extends AbstractDinerosSubscriber { - @Override public boolean subscribe(BalloonMarking balloonMarking, BalloonCallbackStorage balloonCallbackStorage, PetriNet petriNet, String subnet) { // TODO: Implementation by user - return false; + System.out.println("Firing transition t2"); + balloonMarking.fireTransition(petriNet.getTransitionById("t2"), balloonCallbackStorage, true); + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + System.out.println("Firing transition t3"); + balloonMarking.fireTransition(petriNet.getTransitionById("t3"), balloonCallbackStorage, true); + + return true; } } diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/Node1.java b/src/main/java/de/tudresden/inf/st/sample/nodes/Node1.java index 983ec8f4ea52b53441f21971b15317ff3187a9e2..8362675df3ae0c48f6eeb3e93bfb7e3106129005 100644 --- a/src/main/java/de/tudresden/inf/st/sample/nodes/Node1.java +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/Node1.java @@ -4,7 +4,6 @@ import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage; import de.tudresden.inf.st.pnml.jastadd.model.BalloonMarking; import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; -import org.ros.concurrent.CancellableLoop; /** * <Generated> @@ -22,14 +21,19 @@ public class Node1 extends DiNeRosNode { @Override protected void nodeLoop() { - this.connectedNode.executeCancellableLoop(new CancellableLoop() { - @Override - protected void loop() throws InterruptedException { + // TODO: Implementation by user - // TODO: Implementation by user + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } - } - }); + System.out.println("Firing publisher transition"); + firePublisherTransition(petriNet.getTransitionById("channelTransition-publisher-0").asInputSignalTransition()); + + stop(); } + } \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/Node2.java b/src/main/java/de/tudresden/inf/st/sample/nodes/Node2.java index cd647e5ab38f29b280264711be68ef92d6342c68..5d29123ac9cc15d410f7b7ca4734668abbf6205a 100644 --- a/src/main/java/de/tudresden/inf/st/sample/nodes/Node2.java +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/Node2.java @@ -4,6 +4,7 @@ import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage; import de.tudresden.inf.st.pnml.jastadd.model.BalloonMarking; import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; +import org.ros.concurrent.CancellableLoop; /** * <Generated> @@ -17,4 +18,11 @@ public class Node2 extends DiNeRosNode { public Node2(String nodeName, PetriNet petriNet, BalloonMarking marking, BalloonCallbackStorage callbackStorage) { super(nodeName, petriNet, marking, callbackStorage); } + + @Override + protected void nodeLoop() { + + // TODO: Implementation by user + + } } diff --git a/src/main/resources/nets/publisher-net.pnml b/src/main/resources/nets/publisher-net.pnml index 2d551b03eeecab649c31619fd8ac18f9e09644b9..96dd206a91f563ae8e70b9e0d2493253bddd502f 100644 --- a/src/main/resources/nets/publisher-net.pnml +++ b/src/main/resources/nets/publisher-net.pnml @@ -1,5 +1,5 @@ <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml"> - <net id="n-E2D0-BCF46-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> + <net id="pub-net-1" type="http://www.pnml.org/version-2009/grammar/ptnet"> <page id="top"> <page id="channelPage"> <place id="channelInPlace"> @@ -7,13 +7,16 @@ <text>channelInPlace</text> </name> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> - - + <balloonMarking> + <tokens> + <token> { "field" : "Test", "fieldList" : [ "TestListElement" ] } </token> + </tokens> + </balloonMarking> <location>loc2</location> <subnet>locA</subnet> </toolspecific> <initialMarking> - <text>0</text> + <text>1</text> </initialMarking> </place> <transition id="channelTransition-publisher-0"> diff --git a/src/main/resources/nets/subscriber-net.pnml b/src/main/resources/nets/subscriber-net.pnml index 129a2ca56e4aa872397b15284ba694324d8c581f..f463ea0a1ad38ed1be507183bfa1201a5439fae6 100644 --- a/src/main/resources/nets/subscriber-net.pnml +++ b/src/main/resources/nets/subscriber-net.pnml @@ -1,5 +1,5 @@ <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml"> - <net id="n-E2D0-BCF46-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> + <net id="sub-net-1" type="http://www.pnml.org/version-2009/grammar/ptnet"> <page id="top"> <page id="targetPage"> <place id="outRefPlace"> @@ -7,8 +7,19 @@ <text>outRefPlace</text> </name> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <location>loc3</location> + <subnet>locB</subnet> + </toolspecific> + <initialMarking> + <text>0</text> + </initialMarking> + </place> - + <place id="p2"> + <name> + <text>p2</text> + </name> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <location>loc3</location> <subnet>locB</subnet> </toolspecific> @@ -16,6 +27,34 @@ <text>0</text> </initialMarking> </place> + + <transition id="t2"> + <name> + <text>t2</text> + </name> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <location>loc3</location> + <subnet>locB</subnet> + </toolspecific> + </transition> + + <transition id="t3"> + <name> + <text>t3</text> + </name> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <location>loc3</location> + <subnet>locB</subnet> + </toolspecific> + </transition> + + <arc id="a3" source="outRefPlace" target="t2"> + </arc> + <arc id="a4" source="t2" target="p2"> + </arc> + <arc id="a5" source="p2" target="t3"> + </arc> + </page> <page id="channelPage"> <transition id="channelTransition-subscriber-0">