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