From dec39d12da70570443632c799dc31b719ffed05d Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Thu, 8 Jun 2023 19:02:53 +0200 Subject: [PATCH] extended split data --- .../splitter/copy/CopyPrimitiveElements.java | 1 - .../GlobalToLocalNetsPostProcessor.java | 79 +++++++++++++------ src/main/nets/TestNet2.pnml | 1 + 3 files changed, 54 insertions(+), 27 deletions(-) diff --git a/src/main/java/de/tudresden/inf/st/pnml/splitter/copy/CopyPrimitiveElements.java b/src/main/java/de/tudresden/inf/st/pnml/splitter/copy/CopyPrimitiveElements.java index 9288316..f39470e 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/splitter/copy/CopyPrimitiveElements.java +++ b/src/main/java/de/tudresden/inf/st/pnml/splitter/copy/CopyPrimitiveElements.java @@ -21,7 +21,6 @@ public class CopyPrimitiveElements { tiCopy.setSubNet(ti.getSubNet()); tiCopy.setNode(tiCopy.getNode()); tiCopy.setTraceInfo(ti.getTraceInfo()); - tiCopy.setClause(copyClause(ti.getClause())); return tiCopy; } diff --git a/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java b/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java index ed4e6b3..6b1d753 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java +++ b/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java @@ -15,7 +15,6 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; @@ -28,12 +27,12 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { private static final Logger logger = LoggerFactory.getLogger(GlobalToLocalNetsPostProcessor.class); - private final Map<String, List<DinerosPlace>> topicSubscriberPlaces = new HashMap<>(); - private final Map<String, List<DinerosPlace>> topicPublisherPlaces = 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, List<DinerosPlace>> serviceClientResPlaces = new HashMap<>(); private final Map<String, List<DinerosPlace>> serviceClientReqPlaces = new HashMap<>(); - private final Map<String, DinerosPlace> serviceServerResPlaces = new HashMap<>(); - private final Map<String, DinerosPlace> serviceServerReqPlaces = new HashMap<>(); + private final Map<String, Tuple2<DinerosPlace, Integer>> serviceServerResPlaces = new HashMap<>(); + private final Map<String, Tuple2<DinerosPlace, Integer>> serviceServerReqPlaces = new HashMap<>(); public List<PetriNet> disconnectNets(PetriNet petriNet) { @@ -131,10 +130,12 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { serviceClientResPlaces.get(serviceName).add(petriNet.getPlaceById(sc.getResponsePlaceId()).asDinerosPlace()); } - serviceServerReqPlaces.put(serviceName, petriNet.getPlaceById(serviceTransition. - getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getRequestPlaceId()).asDinerosPlace()); - serviceServerResPlaces.put(serviceName, petriNet.getPlaceById(serviceTransition. - getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getResponsePlaceId()).asDinerosPlace()); + serviceServerReqPlaces.put(serviceName, new Tuple2<>(petriNet.getPlaceById(serviceTransition. + getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getRequestPlaceId()).asDinerosPlace(), + serviceTransition.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getCapacity())); + serviceServerResPlaces.put(serviceName, new Tuple2<>(petriNet.getPlaceById(serviceTransition. + getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getResponsePlaceId()).asDinerosPlace(), + serviceTransition.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getCapacity())); } } @@ -168,10 +169,10 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { Place outPlace = petriNet.getPlaceById(subscriberPort.getPlaceId()); if (!topicSubscriberPlaces.containsKey(topic)) { - topicSubscriberPlaces.put(topic, new ArrayList<>()); + topicSubscriberPlaces.put(topic, new HashMap<>()); } - topicSubscriberPlaces.get(topic).add(outPlace.asDinerosPlace()); + topicSubscriberPlaces.get(topic).put(outPlace.asDinerosPlace(), subscriberPort.getLimit()); } for (PublisherPort publisherPort : topicTransition.getStaticTransitionInformation() @@ -179,10 +180,10 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { Place inPlace = petriNet.getPlaceById(publisherPort.getPlaceId()); if (!topicPublisherPlaces.containsKey(topic)) { - topicPublisherPlaces.put(topic, new ArrayList<>()); + topicPublisherPlaces.put(topic, new HashMap<>()); } - topicPublisherPlaces.get(topic).add(inPlace.asDinerosPlace()); + topicPublisherPlaces.get(topic).put(inPlace.asDinerosPlace(), publisherPort.getLimit()); } } } @@ -297,18 +298,35 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { } - private void buildPlaceInfoListPart(Document doc, Element ports, Map<String, List<DinerosPlace>> map, String placeType) { + private void buildPlaceInfoListPartWithoutCap(Document doc, Element ports, Map<String, List<DinerosPlace>> map, String placeType) { - for (Map.Entry<String, List<DinerosPlace>> entry : map.entrySet()) { + Map<String, Map<DinerosPlace, Integer>> defaultMap = new HashMap<>(); + + for(String s : map.keySet()){ + + Map<DinerosPlace, Integer> tMap = new HashMap<>(); + for(DinerosPlace d : map.get(s)){ + tMap.put(d, -1); + } + defaultMap.put(s, tMap); + } + + buildPlaceInfoListPart(doc, ports, defaultMap, placeType, false); + + } + + private void buildPlaceInfoListPart(Document doc, Element ports, Map<String, Map<DinerosPlace, Integer>> map, String placeType, boolean withLimit) { + + for (Map.Entry<String, Map<DinerosPlace, Integer>> entry : map.entrySet()) { System.out.println("- " + entry.getKey()); - for (DinerosPlace dp : entry.getValue()) { + for (Map.Entry<DinerosPlace, Integer> innerEntry : entry.getValue().entrySet()) { - System.out.println("- - - " + dp.getId()); + System.out.println("- - - " + innerEntry.getKey().getId()); Element port = doc.createElement(PnmlConstants.CHANNEL_PORT_KEY); - port.appendChild(doc.createTextNode(dp.getId())); + port.appendChild(doc.createTextNode(innerEntry.getKey().getId())); Attr attr1 = doc.createAttribute(PnmlConstants.CHANNEL_NAME_KEY); attr1.setValue(entry.getKey()); @@ -318,17 +336,23 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { attr2.setValue(placeType); port.setAttributeNode(attr2); + if(!withLimit) { + Attr attr3 = doc.createAttribute(PnmlConstants.CHANNEL_LIMIT_KEY); + attr3.setValue(String.valueOf(innerEntry.getValue())); + port.setAttributeNode(attr3); + } + ports.appendChild(port); } } } - private void buildPlaceInfoListServerPart(Document doc, Element ports, Map<String, DinerosPlace> map, String placeType) { + private void buildPlaceInfoListServerPart(Document doc, Element ports, Map<String, Tuple2<DinerosPlace, Integer>> map, String placeType) { - for (Map.Entry<String, DinerosPlace> entry : map.entrySet()) { + for (Map.Entry<String, Tuple2<DinerosPlace, Integer>> entry : map.entrySet()) { Element port = doc.createElement(PnmlConstants.CHANNEL_PORT_KEY); - port.appendChild(doc.createTextNode(entry.getValue().getId())); + port.appendChild(doc.createTextNode(entry.getValue().get_1().getId())); Attr attr1 = doc.createAttribute(PnmlConstants.CHANNEL_NAME_KEY); attr1.setValue(entry.getKey()); @@ -338,8 +362,11 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { attr2.setValue(placeType); port.setAttributeNode(attr2); - ports.appendChild(port); + Attr attr3 = doc.createAttribute(PnmlConstants.CHANNEL_LIMIT_KEY); + attr3.setValue(String.valueOf(entry.getValue().get_2())); + port.setAttributeNode(attr3); + ports.appendChild(port); } } @@ -361,10 +388,10 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { Element ports = doc.createElement(PnmlConstants.CHANNEL_PORTS_KEY); - buildPlaceInfoListPart(doc, ports, topicPublisherPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_PUB_KEY); - buildPlaceInfoListPart(doc, ports, topicSubscriberPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_SUB_KEY); - buildPlaceInfoListPart(doc, ports, serviceClientReqPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_REQ_KEY); - buildPlaceInfoListPart(doc, ports, serviceClientResPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_RES_KEY); + buildPlaceInfoListPart(doc, ports, topicPublisherPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_PUB_KEY, true); + buildPlaceInfoListPart(doc, ports, topicSubscriberPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_SUB_KEY, true); + buildPlaceInfoListPartWithoutCap(doc, ports, serviceClientReqPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_REQ_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, serviceServerResPlaces, PnmlConstants.CHANNEL_PLACE_TYPE_SERVER_RES_KEY); diff --git a/src/main/nets/TestNet2.pnml b/src/main/nets/TestNet2.pnml index 63df430..dfe8d89 100644 --- a/src/main/nets/TestNet2.pnml +++ b/src/main/nets/TestNet2.pnml @@ -56,6 +56,7 @@ <serviceName>sampleService</serviceName> <serverInput>serverIn</serverInput> <serverOutput>serverOut</serverOutput> + <serverCapacity>16</serverCapacity> <channels> <channel> <cid>c1</cid> -- GitLab