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