From 948882ecbb16ef2d1d7af3a14fe67bbc068368ef Mon Sep 17 00:00:00 2001
From: SebastianEbert <sebastian.ebert@tu-dresden.de>
Date: Wed, 9 Feb 2022 10:38:59 +0100
Subject: [PATCH] fixed location based splitting

---
 .../tudresden/inf/st/pnml/splitter/Main.java  |  6 ++--
 .../GlobalToLocalNetsPostProcessor.java       | 31 +++++++++++--------
 src/main/nets/topicTest1.pnml                 | 10 +++---
 3 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java b/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java
index c3002c5..2e8c7e1 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java
@@ -20,13 +20,15 @@ public class Main {
 
         String inputPath = (args.length > 0) ? args[0] : null;
 
+        /*
         if (inputPath == null) {
             logger.error("No model found on given input path.");
             return;
         }
+        */
 
-        // List<PetriNet> petriNets = PnmlParser.parsePnml("pnml-relast-splitter/src/main/nets/serviceTest1.pnml");
-        List<PetriNet> petriNets = PnmlParser.parsePnml(inputPath);
+         List<PetriNet> petriNets = PnmlParser.parsePnml("pnml-relast-splitter/src/main/nets/topicTest1.pnml");
+        //List<PetriNet> petriNets = PnmlParser.parsePnml(inputPath);
 
         List<List<PetriNet>> disconnectedPetriNets = new ArrayList<>();
 
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 f7c986a..1f72e41 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
@@ -42,6 +42,9 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
 
             Set<String> locations = getLocations(serviceCuttedNet);
 
+            logger.info("##############################################################################################");
+            PostProcessingUtils.printNet(serviceCuttedNet);
+
             // serialize for deep copy
             String serializedNetPath = PnmlExporter.serializeToPnmlFile(serviceCuttedNet, "-pre-split.pnml");
 
@@ -68,16 +71,16 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
         Set<String> allLocations = new HashSet<>();
 
         for (Place place : petriNet.allPlaces()) {
-            if (place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() != null) {
-                allLocations.add(place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet());
+            if (place.asOutputSignalPlace().getStaticPlaceInformation().getLocation() != null) {
+                allLocations.add(place.asOutputSignalPlace().getStaticPlaceInformation().getLocation());
             } else {
                 logger.error("Found place without location.");
             }
         }
 
         for(RefPlace rp : petriNet.allRefPlaces()){
-            if (rp.getSubNet() != null) {
-                allLocations.add(rp.getSubNet());
+            if (rp.getLocation() != null) {
+                allLocations.add(rp.getLocation());
             } else {
                 logger.error("Found reference place without location.");
             }
@@ -398,31 +401,33 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
 
     private static PetriNet createdSeparatedNetByLocation(PetriNet petriNet, String location) {
 
+        logger.info("Removing elements without: " + location);
+
         Set<String> removedTransitionIds = new HashSet<>();
         Set<String> removedPlaceIds = new HashSet<>();
         Set<String> removedRefTransitionIds = new HashSet<>();
         Set<String> removeRefPlaceIds = new HashSet<>();
 
         for (Place place : petriNet.allPlaces()) {
-            if (!place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(location)) {
+            if (!place.asOutputSignalPlace().getStaticPlaceInformation().getLocation().equals(location)) {
                 removedPlaceIds.add(place.getId());
             }
         }
 
         for (Transition transition : petriNet.allTransitions()) {
-            if (!transition.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(location)) {
+            if (!transition.asInputSignalTransition().getStaticTransitionInformation().getLocation().equals(location)) {
                 removedTransitionIds.add(transition.getId());
             }
         }
 
         for (RefPlace place : petriNet.allRefPlaces()) {
-            if (!place.getSubNet().equals(location)) {
+            if (!place.getLocation().equals(location)) {
                 removeRefPlaceIds.add(place.getId());
             }
         }
 
         for (RefTransition transition : petriNet.allRefTransitions()) {
-            if (!transition.getSubNet().equals(location)) {
+            if (!transition.getLocation().equals(location)) {
                 removedRefTransitionIds.add(transition.getId());
             }
         }
@@ -438,21 +443,21 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
         }
 
         for (Place place : petriNet.allPlaces()) {
-            if (!place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(location)) {
+            if (!place.asOutputSignalPlace().getStaticPlaceInformation().getLocation().equals(location)) {
                 logger.info("removing place " + place.getId() + " from net");
                 place.removeSelf();
             }
         }
 
         for (RefPlace place : petriNet.allRefPlaces()) {
-            if (!place.getSubNet().equals(location)) {
+            if (!place.getLocation().equals(location)) {
                 logger.info("removing ref place " + place.getId() + " from net");
                 place.removeSelf();
             }
         }
 
         for (RefTransition transition : petriNet.allRefTransitions()) {
-            if (!transition.getSubNet().equals(location)) {
+            if (!transition.getLocation().equals(location)) {
                 logger.info("removing ref transition " + transition.getId() + " from net");
                 transition.removeSelf();
             }
@@ -461,14 +466,14 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
         for (Transition transition : petriNet.allTransitions()) {
 
             if(transition.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()){
-                if (!transition.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getSubNet().equals(location)) {
+                if (!transition.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getLocation().equals(location)) {
                     logger.info("removing old topic transition " + transition.getId() + " from net");
                     transition.removeSelf();
                 }
             }
 
             if(transition.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()){
-                if (!transition.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getSubNet().equals(location)) {
+                if (!transition.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getLocation().equals(location)) {
                     logger.info("removing old service transition " + transition.getId() + " from net");
                     transition.removeSelf();
                 }
diff --git a/src/main/nets/topicTest1.pnml b/src/main/nets/topicTest1.pnml
index c8ab79d..734eb06 100644
--- a/src/main/nets/topicTest1.pnml
+++ b/src/main/nets/topicTest1.pnml
@@ -10,7 +10,7 @@
                 <referencePlace id="rp1" ref="channelInPlace">
                     <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                         <location>loc2</location>
-                        <subnet>loc2</subnet>
+                        <subnet>locA</subnet>
                     </toolspecific>
                     <name>
                         <text>rp1</text>
@@ -28,7 +28,7 @@
                 <place id="channelInPlace">
                     <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                         <location>loc2</location>
-                        <subnet>loc2</subnet>
+                        <subnet>locA</subnet>
                     </toolspecific>
                     <name>
                         <text>channelInPlace</text>
@@ -43,7 +43,7 @@
                 <transition id="channelTransition">
                     <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                         <location>channel</location>
-                        <subnet>channel</subnet>
+                        <subnet>locC</subnet>
                         <type>topicTransitionType</type>
                         <topic>sampleTopic</topic>
                         <inputlimit>10</inputlimit>
@@ -62,7 +62,7 @@
                 <referencePlace id="rp2" ref="outRefPlace">
                     <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                         <location>loc3</location>
-                        <subnet>loc3</subnet>
+                        <subnet>locB</subnet>
                     </toolspecific>
                     <name>
                         <text>rp2</text>
@@ -84,7 +84,7 @@
                 <place id="outRefPlace">
                     <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                         <location>loc3</location>
-                        <subnet>loc3</subnet>
+                        <subnet>locB</subnet>
                     </toolspecific>
                     <name>
                         <text>outRefPlace</text>
-- 
GitLab