Skip to content
Snippets Groups Projects
Commit 76233b3c authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

reworking base example

parent 70e9e509
Branches
No related tags found
No related merge requests found
Showing
with 280 additions and 162 deletions
No preview for this file type
package de.tudresden.inf.st.sample; package de.tudresden.inf.st.sample;
/*import com.fasterxml.jackson.databind.ObjectMapper; import de.tudresden.inf.st.pnml.engine.execution.TransitionHandlerService;
import de.tudresden.inf.st.pnml.engine.execution.TransitionCallback; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosDefaultNode;
import de.tudresden.inf.st.pnml.engine.execution.TransitionCallbackService;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer; import de.tudresden.inf.st.pnml.jastadd.model.*;
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;
import de.tudresden.inf.st.sample.nodes.Node1;
import de.tudresden.inf.st.sample.nodes.Node2;
import org.ros.node.DefaultNodeMainExecutor; import org.ros.node.DefaultNodeMainExecutor;
import org.ros.node.NodeConfiguration; import org.ros.node.NodeConfiguration;
import org.ros.node.NodeMainExecutor; import org.ros.node.NodeMainExecutor;
...@@ -26,7 +15,7 @@ import java.net.URI; ...@@ -26,7 +15,7 @@ import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;*/ import java.util.Map;
/** /**
* <Generated> * <Generated>
...@@ -34,14 +23,14 @@ import java.util.Map;*/ ...@@ -34,14 +23,14 @@ import java.util.Map;*/
public class Main { public class Main {
// actual ros / mqtt host url is inserted based on configuration // actual ros / mqtt host url is inserted based on configuration
/* private static final String ROS_HOST = "localhost"; private static final String ROS_HOST = "localhost";
private static final String ROS_MASTER_URI = "http://localhost:11311"; private static final String ROS_MASTER_URI = "http://localhost:11311";
private static final String MQTT_HOST = "localhost"; private static final String MQTT_HOST = "localhost";
private static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST); private static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST);
private static final NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault(); 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) throws IOException, ParserConfigurationException, SAXException {
/* /*
* <Generated> * <Generated>
...@@ -49,9 +38,12 @@ public class Main { ...@@ -49,9 +38,12 @@ public class Main {
*/ */
// actual petri net paths are generated // actual petri net paths are generated
/* List<String> petriNetPaths = new ArrayList<>(); List<String> petriNetPaths = new ArrayList<>();
petriNetPaths.add("src/main/resources/nets/publisher-net.pnml"); petriNetPaths.add("src/main/resources/nets/publisher-net.pnml");
petriNetPaths.add("src/main/resources/nets/subscriber-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");
List<PetriNet> petriNets = new ArrayList<>(); List<PetriNet> petriNets = new ArrayList<>();
Map<String, BalloonMarking> markings = new HashMap<>(); Map<String, BalloonMarking> markings = new HashMap<>();
Map<String, BalloonCallbackStorage> callbackStorages = new HashMap<>(); Map<String, BalloonCallbackStorage> callbackStorages = new HashMap<>();
...@@ -60,58 +52,32 @@ public class Main { ...@@ -60,58 +52,32 @@ public class Main {
petriNets.add(PnmlParser.parsePnml(petriNetPath).get(0)); petriNets.add(PnmlParser.parsePnml(petriNetPath).get(0));
} }
TransitionCallbackService transitionCallbackService = TransitionCallbackService.getInstance(); TransitionHandlerService transitionHandlerService = TransitionHandlerService.getInstance();
for(PetriNet petriNet : petriNets){ for(PetriNet petriNet : petriNets){
markings.put(petriNet.getId(), petriNet.initializeBalloonMarking()); markings.put(petriNet.getId(), petriNet.initializeBalloonMarking());
BalloonCallbackStorage storage = petriNet.initializeCallbackStorage(); BalloonCallbackStorage storage = petriNet.initializeCallbackStorage();
transitionCallbackService.init(petriNet.getId(), storage); transitionHandlerService.init(petriNet.getId(), storage);
callbackStorages.put(petriNet.getId(), storage); callbackStorages.put(petriNet.getId(), storage);
PetriNetInitializer.initInputSignalConnections(petriNet, MQTT_HOST, "mqtt");
PetriNetInitializer.initOutputSignalConnections(petriNet, MQTT_HOST, "mqtt");
}*/
/*
* <Generated>
* Callback and token integration
*/
/* Map<String, List<AbstractNetCallback>> callbackMap1 = CallbackMapper.initCallbacksForNode1(petriNets.get(0));
for (Map.Entry<String, List<AbstractNetCallback>> entry : callbackMap1.entrySet()) {
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()) {
for(AbstractNetCallback anc : entry.getValue()){
transitionCallbackService.registerCallback(petriNets.get(1), entry.getKey(), anc);
}
}*/
/* /*
* <Generated> * <Generated>
* Start of the Dineros NodescallbackMap1 * Start of the Dineros NodescallbackMap1
*/ */
/* nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI)); nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI));
// generated // generated
DiNeRosNode node1 = new Node1("node1", petriNets.get(0), DiNeRosNode node1 = new Node1("node1", petriNets.get(0),
markings.get(petriNets.get(0).getId()), callbackStorages.get(petriNets.get(0).getId())); markings.get(petriNets.get(0).getId()), callbackStorages.get(petriNets.get(0).getId()));
DiNeRosNode node2 = new Node2("node2", petriNets.get(1), DiNeRosNode node2 = new Node2("node2", petriNets.get(1),
markings.get(petriNets.get(1).getId()), callbackStorages.get(petriNets.get(1).getId()));*/ markings.get(petriNets.get(1).getId()), callbackStorages.get(petriNets.get(1).getId()));
/*
DiNeRosNode diNeRosNode = new DiNeRosDefaultNode("TestNode", petriNets.get(0), DiNeRosNode diNeRosNode = new DiNeRosDefaultNode("TestNode", petriNets.get(0),
markings.get(petriNets.get(0).getId()), callbackStorages.get(petriNets.get(0).getId())); markings.get(petriNets.get(0).getId()), callbackStorages.get(petriNets.get(0).getId()));
diNeRosNode.getDinerosServiceServers().put("locB", new DiNeRosDefaultServer()); diNeRosNode.getDinerosServiceServers().put("locB", new DiNeRosDefaultServer());
*/
/* node2.getDinerosSubscribers().put("locB", new Node2Subscriber1());
new Thread(() -> nodeMainExecutor.execute(node1, nodeConfiguration)) {{ new Thread(() -> nodeMainExecutor.execute(node1, nodeConfiguration)) {{
start(); start();
...@@ -120,5 +86,5 @@ public class Main { ...@@ -120,5 +86,5 @@ public class Main {
new Thread(() -> nodeMainExecutor.execute(node2, nodeConfiguration)) {{ new Thread(() -> nodeMainExecutor.execute(node2, nodeConfiguration)) {{
start(); start();
}}; }};
}*/ }
} }
package de.tudresden.inf.st.sample.balloon;
import java.util.ArrayList;
import java.util.List;
// input file provide by user
public class Token {
private String field;
private List<String> fieldList = new ArrayList<>();
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public List<String> getFieldList() {
return fieldList;
}
public void setFieldList(List<String> fieldList) {
this.fieldList = fieldList;
}
}
package de.tudresden.inf.st.sample.callback;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.tudresden.inf.st.sample.balloon.Token;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
// only the token class is generated, this is a static class
// this class gets extended by the user for concrete callbacks
// this class hides (de-)serialisation of the tokens
public abstract class AbstractNetCallback {
/* public AbstractNetCallback(String id, int priority, List<String> params) {
super(id, priority, params);
}
public AbstractNetCallback(String id, int priority) {
super(id, priority);
}
private Token parseToken(String s) throws IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(s, Token.class);
}
public abstract void processTokenCallback(List<Token> tokens);
@Override
public final List<BalloonToken> processToken(List<BalloonToken> tokens) {
List<Token> resultTokens = new ArrayList<>();
List<BalloonToken> resultBalloonTokens = new ArrayList<>();
ObjectMapper mapper = new ObjectMapper();
for(BalloonToken bt : tokens){
try {
Token t = parseToken(bt.getValue());
resultTokens.add(t);
} catch (IOException e) {
e.printStackTrace();
}
}
processTokenCallback(resultTokens);
for(Token t : resultTokens){
BalloonToken newBt = new BalloonToken();
try {
newBt.setValue(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t));
resultBalloonTokens.add(newBt);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return resultBalloonTokens;
}*/
}
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;
public final class Handlers {
TransitionHandler sampleHandlerColor = new TransitionHandler(1, 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 -> {
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 -> {
List<Map<String, Object>> sList = new ArrayList<>();
sList.add(maps.get(0));
return sList;
});
}
package de.tudresden.inf.st.sample.callback; package de.tudresden.inf.st.sample.handling;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* <Generated> * <Generated>
*/ */
public class CallbackMapper { public class HandlingBinder {
// methods generated for each petri net // methods generated for each petri net
/* public static final Map<String, List<AbstractNetCallback>> initCallbacksForNode1(PetriNet petriNet){ /* public static final Map<String, List<AbstractNetCallback>> initCallbacksForNode1(PetriNet petriNet){
......
package de.tudresden.inf.st.sample.nodes;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.util.List;
public class ClientNode extends DiNeRosNode {
public ClientNode(String nodeName, PetriNet petriNet, String rcHost, String gcProtocol) {
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;
}
@Override
protected TransitionSelectionResult onStartupEnded(List<Transition> list) {
return null;
}
}
package de.tudresden.inf.st.sample.nodes;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.util.List;
public class PublisherNode extends DiNeRosNode {
public PublisherNode(String nodeName, PetriNet petriNet, String rcHost, String gcProtocol) {
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;
}
@Override
protected TransitionSelectionResult onStartupEnded(List<Transition> list) {
return null;
}
}
package de.tudresden.inf.st.sample.nodes;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.util.List;
public class ServerNode extends DiNeRosNode {
public ServerNode(String nodeName, PetriNet petriNet, String rcHost, String gcProtocol) {
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;
}
@Override
protected TransitionSelectionResult onStartupEnded(List<Transition> list) {
return null;
}
}
package de.tudresden.inf.st.sample.nodes;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.util.List;
public class SubscriberNode extends DiNeRosNode {
public SubscriberNode(String nodeName, PetriNet petriNet, String rcHost, String gcProtocol) {
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;
}
@Override
protected TransitionSelectionResult onStartupEnded(List<Transition> list) {
return null;
}
}
<pnml <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
xmlns="http://www.pnml.org/version-2009/grammar/pnml">
<net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
<page id="top"> <page id="top">
<page id="sourcePage"> <page id="sourcePage">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<type>nodePage</type> <type>nodePage</type>
</toolspecific> </toolspecific>
<place id="ClientPlace1">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n3</node>
<subnet>s3</subnet>
<balloonMarking>
<tokens>
<token> { "id" : "red1", "target" : "bin1" } </token>
</tokens>
</balloonMarking>
</toolspecific>
<initialMarking>
<text>1</text>
</initialMarking>
<name>
<text>ClientPlace1</text>
</name>
</place>
<transition id="ClientTransition1">
<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>ClientTransition1</text>
</name>
</transition>
<place id="req1"> <place id="req1">
<name> <name>
<text>req1</text> <text>req1</text>
</name> </name>
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node> <node>n3</node>
<subnet>s1</subnet> <subnet>s3</subnet>
</toolspecific> </toolspecific>
<initialMarking> <initialMarking>
<text>0</text> <text>0</text>
...@@ -23,13 +50,18 @@ ...@@ -23,13 +50,18 @@
<text>res1</text> <text>res1</text>
</name> </name>
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node> <node>n3</node>
<subnet>s1</subnet> <subnet>s3</subnet>
</toolspecific> </toolspecific>
<initialMarking> <initialMarking>
<text>0</text> <text>0</text>
</initialMarking> </initialMarking>
</place> </place>
<arc id="ca1" source="ClientPlace1" target="ClientTransition1">
</arc>
<arc id="ca2" source="ClientTransition1" target="req1">
</arc>
</page> </page>
</page> </page>
<name> <name>
......
<pnml <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
xmlns="http://www.pnml.org/version-2009/grammar/pnml">
<net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<inputsignals>
<inputsignal>
<inputsignalID>SignalRed</inputsignalID>
<initialvalue>false</initialvalue>
</inputsignal>
</inputsignals>
</toolspecific>
<page id="top"> <page id="top">
<page id="sourcePage"> <page id="sourcePage">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<type>nodePage</type> <type>nodePage</type>
</toolspecific> </toolspecific>
<place id="RedObjectPool">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node>
<subnet>s1</subnet>
<balloonMarking>
<tokens>
<token> { "id" : "red1", "target" : "bin1" } </token>
</tokens>
</balloonMarking>
</toolspecific>
<initialMarking>
<text>1</text>
</initialMarking>
<name>
<text>RedObjectPool</text>
</name>
</place>
<transition id="SortRed">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node>
<subnet>s1</subnet>
<type>discreteTransitionType</type>
<inputsignalclause>(SignalRed)</inputsignalclause>
</toolspecific>
<name>
<text>SortRed</text>
</name>
</transition>
<place id="pub1"> <place id="pub1">
<name> <name>
<text>pub1</text> <text>pub1</text>
...@@ -18,6 +54,11 @@ ...@@ -18,6 +54,11 @@
<text>0</text> <text>0</text>
</initialMarking> </initialMarking>
</place> </place>
<arc id="a1" source="RedObjectPool" target="SortRed">
</arc>
<arc id="a2" source="SortRed" target="pub1">
</arc>
</page> </page>
</page> </page>
<name> <name>
......
<pnml <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
xmlns="http://www.pnml.org/version-2009/grammar/pnml">
<net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
<page id="top"> <page id="top">
<page id="targetPage"> <page id="targetPage">
...@@ -12,25 +11,41 @@ ...@@ -12,25 +11,41 @@
<text>serverIn</text> <text>serverIn</text>
</name> </name>
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n2</node> <node>n4</node>
<subnet>s2</subnet> <subnet>s4</subnet>
</toolspecific> </toolspecific>
<initialMarking> <initialMarking>
<text>0</text> <text>0</text>
</initialMarking> </initialMarking>
</place> </place>
<transition id="ConnectorTransition">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n4</node>
<subnet>s4</subnet>
<type>discreteTransitionType</type>
<inputsignalclause></inputsignalclause>
</toolspecific>
<name>
<text>ConnectorTransition</text>
</name>
</transition>
<place id="serverOut"> <place id="serverOut">
<name> <name>
<text>serverOut</text> <text>serverOut</text>
</name> </name>
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n2</node> <node>n4</node>
<subnet>s2</subnet> <subnet>s4</subnet>
</toolspecific> </toolspecific>
<initialMarking> <initialMarking>
<text>0</text> <text>0</text>
</initialMarking> </initialMarking>
</place> </place>
<arc id="a1" source="serverIn" target="ConnectorTransition">
</arc>
<arc id="a2" source="ConnectorTransition" target="serverOut">
</arc>
</page> </page>
</page> </page>
<name> <name>
......
<pnml <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
xmlns="http://www.pnml.org/version-2009/grammar/pnml">
<net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
<page id="top"> <page id="top">
<page id="targetPage"> <page id="targetPage">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment