diff --git a/libs/pnml-relast-engine-fatjar-0.1.jar b/libs/pnml-relast-engine-fatjar-0.1.jar index f200008a372c40e146b12978ce679039abf18f97..235fc3c8eb382be6f18abe5d3db24622c46233bc 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 f995423ea7ee18f82b9d0646b1577cf513cc6c81..0dc5012513e17edfb62b52242081ea7cffc76a3e 100644 --- a/src/main/java/de/tudresden/inf/st/sample/Main.java +++ b/src/main/java/de/tudresden/inf/st/sample/Main.java @@ -1,20 +1,9 @@ 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.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.engine.transform.PetriNetInitializer; -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 de.tudresden.inf.st.pnml.jastadd.model.*; import org.ros.node.DefaultNodeMainExecutor; import org.ros.node.NodeConfiguration; import org.ros.node.NodeMainExecutor; @@ -26,7 +15,7 @@ import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map;*/ +import java.util.Map; /** * <Generated> @@ -34,14 +23,14 @@ import java.util.Map;*/ public class Main { // 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 MQTT_HOST = "localhost"; 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) throws IOException, ParserConfigurationException, SAXException { /* * <Generated> @@ -49,9 +38,12 @@ public class Main { */ // 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/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<>(); Map<String, BalloonMarking> markings = new HashMap<>(); Map<String, BalloonCallbackStorage> callbackStorages = new HashMap<>(); @@ -60,58 +52,32 @@ public class Main { petriNets.add(PnmlParser.parsePnml(petriNetPath).get(0)); } - TransitionCallbackService transitionCallbackService = TransitionCallbackService.getInstance(); + TransitionHandlerService transitionHandlerService = TransitionHandlerService.getInstance(); for(PetriNet petriNet : petriNets){ markings.put(petriNet.getId(), petriNet.initializeBalloonMarking()); BalloonCallbackStorage storage = petriNet.initializeCallbackStorage(); - transitionCallbackService.init(petriNet.getId(), storage); + transitionHandlerService.init(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> * Start of the Dineros NodescallbackMap1 */ - /* nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI)); + 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()));*/ + markings.get(petriNets.get(1).getId()), callbackStorages.get(petriNets.get(1).getId())); + - /* 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()); - */ - - /* node2.getDinerosSubscribers().put("locB", new Node2Subscriber1()); new Thread(() -> nodeMainExecutor.execute(node1, nodeConfiguration)) {{ start(); @@ -120,5 +86,5 @@ public class Main { new Thread(() -> nodeMainExecutor.execute(node2, nodeConfiguration)) {{ start(); }}; - }*/ + } } diff --git a/src/main/java/de/tudresden/inf/st/sample/balloon/Token.java b/src/main/java/de/tudresden/inf/st/sample/balloon/Token.java deleted file mode 100644 index 43cbf6c728144764ab3fde6001c2447882c0237d..0000000000000000000000000000000000000000 --- a/src/main/java/de/tudresden/inf/st/sample/balloon/Token.java +++ /dev/null @@ -1,28 +0,0 @@ -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; - } -} diff --git a/src/main/java/de/tudresden/inf/st/sample/callback/AbstractNetCallback.java b/src/main/java/de/tudresden/inf/st/sample/callback/AbstractNetCallback.java deleted file mode 100644 index 35767fb6814d6d9f9e3e0a73774ed5993ecd0540..0000000000000000000000000000000000000000 --- a/src/main/java/de/tudresden/inf/st/sample/callback/AbstractNetCallback.java +++ /dev/null @@ -1,61 +0,0 @@ -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; - }*/ -} diff --git a/src/main/java/de/tudresden/inf/st/sample/handling/Handlers.java b/src/main/java/de/tudresden/inf/st/sample/handling/Handlers.java new file mode 100644 index 0000000000000000000000000000000000000000..ecec498cda0a617a0dbd6d86b4b35ead9a1b8852 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/sample/handling/Handlers.java @@ -0,0 +1,31 @@ +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; + }); +} diff --git a/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java b/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java similarity index 89% rename from src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java rename to src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java index fddc7e4cbe4aff0a4dd6e89445b1413e73d5d155..d1073d8338776c6628317b783cc1eb95e2d87970 100644 --- a/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java +++ b/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java @@ -1,15 +1,10 @@ -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> */ -public class CallbackMapper { +public class HandlingBinder { // methods generated for each petri net /* public static final Map<String, List<AbstractNetCallback>> initCallbacksForNode1(PetriNet petriNet){ 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 new file mode 100644 index 0000000000000000000000000000000000000000..df1dc7c20517755718cc2af3ba8353d5eec0aab6 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/ClientNode.java @@ -0,0 +1,32 @@ +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; + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..1c0a36500cd8c6fb7e4756bf22e802b92c47f3f1 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/PublisherNode.java @@ -0,0 +1,32 @@ +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; + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..108821b062dab681275854e9538b9048f62372a6 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/ServerNode.java @@ -0,0 +1,32 @@ +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; + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..7ab01781376d5b27644067961c9c24262b9974da --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/sample/nodes/SubscriberNode.java @@ -0,0 +1,32 @@ +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; + } +} diff --git a/src/main/resources/nets/client-net.pnml b/src/main/resources/nets/client-net.pnml index 421c11db87348f47b76e77eebd61db65fb8a1aeb..be9254e1d1527b8be6692957506321725287d9ca 100644 --- a/src/main/resources/nets/client-net.pnml +++ b/src/main/resources/nets/client-net.pnml @@ -1,18 +1,45 @@ -<pnml - xmlns="http://www.pnml.org/version-2009/grammar/pnml"> +<pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml"> <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> <page id="top"> <page id="sourcePage"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <type>nodePage</type> </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"> <name> <text>req1</text> </name> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> - <node>n1</node> - <subnet>s1</subnet> + <node>n3</node> + <subnet>s3</subnet> </toolspecific> <initialMarking> <text>0</text> @@ -23,13 +50,18 @@ <text>res1</text> </name> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> - <node>n1</node> - <subnet>s1</subnet> + <node>n3</node> + <subnet>s3</subnet> </toolspecific> <initialMarking> <text>0</text> </initialMarking> </place> + + <arc id="ca1" source="ClientPlace1" target="ClientTransition1"> + </arc> + <arc id="ca2" source="ClientTransition1" target="req1"> + </arc> </page> </page> <name> diff --git a/src/main/resources/nets/publisher-net.pnml b/src/main/resources/nets/publisher-net.pnml index c358e0cb73e38d49f54ab093470ad30a60bd1b9e..24807d74cfce60d1672f6a2adfc7a11594a1ad08 100644 --- a/src/main/resources/nets/publisher-net.pnml +++ b/src/main/resources/nets/publisher-net.pnml @@ -1,11 +1,47 @@ -<pnml - xmlns="http://www.pnml.org/version-2009/grammar/pnml"> +<pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml"> <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="sourcePage"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <type>nodePage</type> </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"> <name> <text>pub1</text> @@ -18,6 +54,11 @@ <text>0</text> </initialMarking> </place> + + <arc id="a1" source="RedObjectPool" target="SortRed"> + </arc> + <arc id="a2" source="SortRed" target="pub1"> + </arc> </page> </page> <name> diff --git a/src/main/resources/nets/server-net.pnml b/src/main/resources/nets/server-net.pnml index c37a6389c81ad4ecd109dcbd75e8b4e9d07465e7..3b603fee15cb5050ab09aa9f4b06381d08b29dbd 100644 --- a/src/main/resources/nets/server-net.pnml +++ b/src/main/resources/nets/server-net.pnml @@ -1,5 +1,4 @@ -<pnml - xmlns="http://www.pnml.org/version-2009/grammar/pnml"> +<pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml"> <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> <page id="top"> <page id="targetPage"> @@ -12,25 +11,41 @@ <text>serverIn</text> </name> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> - <node>n2</node> - <subnet>s2</subnet> + <node>n4</node> + <subnet>s4</subnet> </toolspecific> <initialMarking> <text>0</text> </initialMarking> </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"> <name> <text>serverOut</text> </name> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> - <node>n2</node> - <subnet>s2</subnet> + <node>n4</node> + <subnet>s4</subnet> </toolspecific> <initialMarking> <text>0</text> </initialMarking> </place> + + <arc id="a1" source="serverIn" target="ConnectorTransition"> + </arc> + <arc id="a2" source="ConnectorTransition" target="serverOut"> + </arc> </page> </page> <name> diff --git a/src/main/resources/nets/subscriber-net.pnml b/src/main/resources/nets/subscriber-net.pnml index 7035978904a1dc608fe369346e3c6b98dfe8e356..94a161aed23eaf57a807fbb7a9560b2f904811be 100644 --- a/src/main/resources/nets/subscriber-net.pnml +++ b/src/main/resources/nets/subscriber-net.pnml @@ -1,5 +1,4 @@ -<pnml - xmlns="http://www.pnml.org/version-2009/grammar/pnml"> +<pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml"> <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> <page id="top"> <page id="targetPage">