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

main as launch mechanism, simplfication of initializations

parent 76233b3c
Branches
No related tags found
No related merge requests found
No preview for this file type
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();
}};
}
}
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;
});
};
}
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
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 bindHandlersToClientNode(PetriNet petriNet){
petriNet.registerHandler("ClientTransition1", 1, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION);
}
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);
}
}
......@@ -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);
}
}
......@@ -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);
}
}
......@@ -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);
}
}
......@@ -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);
}
}
......@@ -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>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment