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

added opposing-place-info to LRPNs

parent 32a649f6
Branches main
No related tags found
No related merge requests found
...@@ -23,7 +23,7 @@ public class Main { ...@@ -23,7 +23,7 @@ public class Main {
return; return;
} }
List<PetriNet> petriNets = PnmlParser.parsePnml(inputPath); List<PetriNet> petriNets = PnmlParser.parsePnml(inputPath, false);
List<List<PetriNet>> disconnectedPetriNets = new ArrayList<>(); List<List<PetriNet>> disconnectedPetriNets = new ArrayList<>();
GlobalToLocalNetsPostProcessor processor = new GlobalToLocalNetsPostProcessor(); GlobalToLocalNetsPostProcessor processor = new GlobalToLocalNetsPostProcessor();
......
package de.tudresden.inf.st.pnml.splitter.postprocessing; package de.tudresden.inf.st.pnml.splitter.postprocessing;
import de.tudresden.inf.st.pnml.base.constants.PnmlConstants; import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
import de.tudresden.inf.st.pnml.base.data.CommunicatorInformation;
import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.*;
import de.tudresden.inf.st.pnml.splitter.constants.SplitterPnmlConstants; import de.tudresden.inf.st.pnml.splitter.constants.SplitterPnmlConstants;
import fr.lip6.move.pnml.framework.utils.exception.InvalidIDException; import fr.lip6.move.pnml.framework.utils.exception.InvalidIDException;
...@@ -29,8 +28,8 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -29,8 +28,8 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
private final Map<String, Map<DinerosPlace, Integer>> topicSubscriberPlaces = new HashMap<>(); private final Map<String, Map<DinerosPlace, Integer>> topicSubscriberPlaces = new HashMap<>();
private final Map<String, Map<DinerosPlace, Integer>> topicPublisherPlaces = new HashMap<>(); private final Map<String, Map<DinerosPlace, Integer>> topicPublisherPlaces = new HashMap<>();
private final Map<String, List<DinerosPlace>> serviceClientResPlaces = new HashMap<>(); private final Map<String, List<Tuple2<DinerosPlace, String>>> serviceClientResPlaces = new HashMap<>();
private final Map<String, List<DinerosPlace>> serviceClientReqPlaces = new HashMap<>(); private final Map<String, List<Tuple2<DinerosPlace, String>>> serviceClientReqPlaces = new HashMap<>();
private final Map<String, Tuple2<DinerosPlace, Integer>> serviceServerResPlaces = new HashMap<>(); private final Map<String, Tuple2<DinerosPlace, Integer>> serviceServerResPlaces = new HashMap<>();
private final Map<String, Tuple2<DinerosPlace, Integer>> serviceServerReqPlaces = new HashMap<>(); private final Map<String, Tuple2<DinerosPlace, Integer>> serviceServerReqPlaces = new HashMap<>();
...@@ -61,7 +60,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -61,7 +60,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
// filter deep copy elements by location // filter deep copy elements by location
for (String location : locations) { for (String location : locations) {
List<PetriNet> reParsedPetriNets = PnmlParser.parsePnml(serializedNetPath); List<PetriNet> reParsedPetriNets = PnmlParser.parsePnml(serializedNetPath, false);
for (PetriNet pn : reParsedPetriNets) { for (PetriNet pn : reParsedPetriNets) {
PetriNet separatedNet = createdSeparatedNetByNode(pn, location); PetriNet separatedNet = createdSeparatedNetByNode(pn, location);
separatedNet.setId(separatedNet.getType() + "-" + netSuffix); separatedNet.setId(separatedNet.getType() + "-" + netSuffix);
...@@ -126,8 +125,8 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -126,8 +125,8 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
if (!serviceClientReqPlaces.containsKey(serviceName)) { if (!serviceClientReqPlaces.containsKey(serviceName)) {
serviceClientReqPlaces.put(serviceName, new ArrayList<>()); serviceClientReqPlaces.put(serviceName, new ArrayList<>());
} }
serviceClientReqPlaces.get(serviceName).add(petriNet.getPlaceById(sc.getRequestPlaceId()).asDinerosPlace()); serviceClientReqPlaces.get(serviceName).add(new Tuple2<>(petriNet.getPlaceById(sc.getRequestPlaceId()).asDinerosPlace(), sc.getResponsePlaceId()));
serviceClientResPlaces.get(serviceName).add(petriNet.getPlaceById(sc.getResponsePlaceId()).asDinerosPlace()); serviceClientResPlaces.get(serviceName).add(new Tuple2<>(petriNet.getPlaceById(sc.getResponsePlaceId()).asDinerosPlace(), sc.getRequestPlaceId()));
} }
serviceServerReqPlaces.put(serviceName, new Tuple2<>(petriNet.getPlaceById(serviceTransition. serviceServerReqPlaces.put(serviceName, new Tuple2<>(petriNet.getPlaceById(serviceTransition.
...@@ -298,33 +297,28 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -298,33 +297,28 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
} }
private void buildPlaceInfoListPartWithoutCap(Document doc, Element ports, Map<String, List<DinerosPlace>> map, String placeType) { private void buildPlaceInfoListPartWithoutCap(Document doc, Element ports, Map<String, List<Tuple2<DinerosPlace, String>>> map, String placeType) {
Map<String, Map<DinerosPlace, Integer>> defaultMap = new HashMap<>(); Map<String, Map<DinerosPlace, Integer>> defaultMap = new HashMap<>();
for(String s : map.keySet()){ for(String s : map.keySet()){
Map<DinerosPlace, Integer> tMap = new HashMap<>(); Map<DinerosPlace, Integer> tMap = new HashMap<>();
for(DinerosPlace d : map.get(s)){ for(Tuple2<DinerosPlace, String> t : map.get(s)){
tMap.put(d, -1); tMap.put(t.get_1(), -1);
} }
defaultMap.put(s, tMap); defaultMap.put(s, tMap);
} }
buildPlaceInfoListPart(doc, ports, defaultMap, placeType, false); buildPlaceInfoListPart(doc, ports, defaultMap, placeType, false, true);
} }
private void buildPlaceInfoListPart(Document doc, Element ports, Map<String, Map<DinerosPlace, Integer>> map, String placeType, boolean withLimit) { private void buildPlaceInfoListPart(Document doc, Element ports, Map<String, Map<DinerosPlace, Integer>> map, String placeType, boolean withLimit, boolean isClient) {
for (Map.Entry<String, Map<DinerosPlace, Integer>> entry : map.entrySet()) { for (Map.Entry<String, Map<DinerosPlace, Integer>> entry : map.entrySet()) {
System.out.println("- " + entry.getKey());
for (Map.Entry<DinerosPlace, Integer> innerEntry : entry.getValue().entrySet()) { for (Map.Entry<DinerosPlace, Integer> innerEntry : entry.getValue().entrySet()) {
System.out.println("- - - " + innerEntry.getKey().getId());
Element port = doc.createElement(PnmlConstants.CHANNEL_PORT_KEY); Element port = doc.createElement(PnmlConstants.CHANNEL_PORT_KEY);
port.appendChild(doc.createTextNode(innerEntry.getKey().getId())); port.appendChild(doc.createTextNode(innerEntry.getKey().getId()));
...@@ -342,11 +336,32 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -342,11 +336,32 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
port.setAttributeNode(attr3); port.setAttributeNode(attr3);
} }
if(placeType.equals(PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_REQ_KEY)){
Attr attr4 = doc.createAttribute(PnmlConstants.PORTS_CRES_KEY);
findOppositePlace(innerEntry, port, attr4, serviceClientReqPlaces);
}
if(placeType.equals(PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_RES_KEY)){
Attr attr4 = doc.createAttribute(PnmlConstants.PORTS_CREQ_KEY);
findOppositePlace(innerEntry, port, attr4, serviceClientResPlaces);
}
ports.appendChild(port); ports.appendChild(port);
} }
} }
} }
private void findOppositePlace(Map.Entry<DinerosPlace, Integer> innerEntry, Element port, Attr attr4, Map<String, List<Tuple2<DinerosPlace, String>>> map) {
for(Map.Entry<String, List<Tuple2<DinerosPlace, String>>> e : map.entrySet()){
for(Tuple2<DinerosPlace, String> et : e.getValue()){
if(et.get_1().getId().equals(innerEntry.getKey().getId())){
attr4.setValue(et.get_2());
port.setAttributeNode(attr4);
}
}
}
}
private void buildPlaceInfoListServerPart(Document doc, Element ports, Map<String, Tuple2<DinerosPlace, Integer>> map, String placeType) { private void buildPlaceInfoListServerPart(Document doc, Element ports, Map<String, Tuple2<DinerosPlace, Integer>> map, String placeType) {
for (Map.Entry<String, Tuple2<DinerosPlace, Integer>> entry : map.entrySet()) { for (Map.Entry<String, Tuple2<DinerosPlace, Integer>> entry : map.entrySet()) {
...@@ -385,8 +400,8 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -385,8 +400,8 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
Element ports = doc.createElement(PnmlConstants.CHANNEL_PORTS_KEY); Element ports = doc.createElement(PnmlConstants.CHANNEL_PORTS_KEY);
buildPlaceInfoListPart(doc, ports, topicPublisherPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_PUB_KEY, true); buildPlaceInfoListPart(doc, ports, topicPublisherPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_PUB_KEY, true, false);
buildPlaceInfoListPart(doc, ports, topicSubscriberPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_SUB_KEY, true); buildPlaceInfoListPart(doc, ports, topicSubscriberPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_SUB_KEY, true, false);
buildPlaceInfoListPartWithoutCap(doc, ports, serviceClientReqPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_REQ_KEY); buildPlaceInfoListPartWithoutCap(doc, ports, serviceClientReqPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_REQ_KEY);
buildPlaceInfoListPartWithoutCap(doc, ports, serviceClientResPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_RES_KEY); buildPlaceInfoListPartWithoutCap(doc, ports, serviceClientResPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_RES_KEY);
buildPlaceInfoListServerPart(doc, ports, serviceServerReqPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_SERVER_REQ_KEY); buildPlaceInfoListServerPart(doc, ports, serviceServerReqPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_SERVER_REQ_KEY);
......
<?xml version="1.0" encoding="UTF-8"?>
<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">
<name>
<text>ServiceChainNet</text>
</name>
<page id="top">
<page id="sourcePage">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<type>nodePage</type>
</toolspecific>
<place id="p1">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node>
<subnet>s1</subnet>
</toolspecific>
<initialMarking>
<text>1</text>
</initialMarking>
<name>
<text>p1</text>
</name>
</place>
<place id="p2">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node>
<subnet>s1</subnet>
</toolspecific>
<initialMarking>
<text>0</text>
</initialMarking>
<name>
<text>p2</text>
</name>
</place>
<place id="p3">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n1</node>
<subnet>s1</subnet>
</toolspecific>
<initialMarking>
<text>0</text>
</initialMarking>
<name>
<text>p3</text>
</name>
</place>
</page>
<transition id="serviceTransition0">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<type>serviceTransitionType</type>
<serviceName>sampleService0</serviceName>
<serverInput>serverIn0</serverInput>
<serverOutput>serverOut0</serverOutput>
<serverCapacity>2</serverCapacity>
<channels>
<channel>
<cid>c1</cid>
<request>p1</request>
<response>p2</response>
</channel>
</channels>
</toolspecific>
<name>
<text>serviceTransition0</text>
</name>
</transition>
<transition id="serviceTransition1">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<type>serviceTransitionType</type>
<serviceName>sampleService1</serviceName>
<serverInput>serverIn1</serverInput>
<serverOutput>serverOut1</serverOutput>
<serverCapacity>2</serverCapacity>
<channels>
<channel>
<cid>c1</cid>
<request>p2</request>
<response>p3</response>
</channel>
</channels>
</toolspecific>
<name>
<text>serviceTransition1</text>
</name>
</transition>
<page id="targetPage0">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<type>serverPrototype</type>
<serviceName>sampleService0</serviceName>
</toolspecific>
<place id="serverIn0">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n2</node>
<subnet>s2</subnet>
</toolspecific>
<name>
<text>serverIn0</text>
</name>
</place>
<place id="serverOut0">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n2</node>
<subnet>s2</subnet>
</toolspecific>
<name>
<text>serverOut0</text>
</name>
</place>
</page>
<page id="targetPage1">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<type>serverPrototype</type>
<serviceName>sampleService1</serviceName>
</toolspecific>
<place id="serverIn1">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n3</node>
<subnet>s3</subnet>
</toolspecific>
<name>
<text>serverIn1</text>
</name>
</place>
<place id="serverOut1">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<node>n3</node>
<subnet>s3</subnet>
</toolspecific>
<name>
<text>serverOut1</text>
</name>
</place>
</page>
</page>
</net>
</pnml>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment