diff --git a/src/main/jastadd/flatter/transforms/ServiceChannelTransforms.jadd b/src/main/jastadd/flatter/transforms/ServiceChannelTransforms.jadd index 10253045a9b3bba5e52a4b28e56d500a5b6ca25a..9e877c6b270122dd15195414dc340524ad1acc64 100644 --- a/src/main/jastadd/flatter/transforms/ServiceChannelTransforms.jadd +++ b/src/main/jastadd/flatter/transforms/ServiceChannelTransforms.jadd @@ -7,6 +7,7 @@ aspect ServiceChannelTransforms { syn Page DinerosTransition.transformServiceElement() { Page res = new Page(); + Map<String, PnObject> addedObjects = new HashMap<>(); System.out.println("Transforming service transition: " + this.getId()); ServiceTransitionInformation sti = this.getStaticTransitionInformation().asServiceTransitionInformation(); res.setId(TemplateConstants.CHANNEL_SERVICE_PAGE_PREFIX + "-" + sti.getServiceName()); @@ -18,34 +19,35 @@ aspect ServiceChannelTransforms { clientMap.put(TemplateConstants.SERVICE_CAN_CALL_REF_PLACE + "-" + sti.getServiceName() + "-" + sc, petriNet().getPlaceById(clientChannel.getRequestPlaceId())); clientMap.put(TemplateConstants.SERVICE_CAN_RESP_REF_PLACE + "-" + sti.getServiceName() + "-" + sc, petriNet().getPlaceById(clientChannel.getRequestPlaceId())); PetriNet clientNet = ServiceTemplates.getServiceConnectionTemplate(sti.getServiceName() + "-" + sc); - TransformationUtils.includeTemplateInstance(res, petriNet(), clientNet, clientMap); + TransformationUtils.includeTemplateInstance(res, petriNet(), clientNet, clientMap, addedObjects); sc++; } + petriNet().flushAttrAndCollectionCache(); + // apply rule S3 for(int i = 0; i < sti.getServerChannel().getCapacity(); i++){ - Page instancePage = petriNet().getPlaceById(sti.getServerChannel().getRequestPlaceId()).ContainingPage(); PetriNet serviceInterfaceNet = ServiceTemplates.getServiceServerInterfaceTemplate(sti.getServiceName() + "-" + i); - TransformationUtils.includeTemplateInstance(instancePage, petriNet(), serviceInterfaceNet); + TransformationUtils.includeTemplateInstance(res, petriNet(), serviceInterfaceNet, addedObjects); // apply rule S2 int sc2 = 0; for(ServiceChannel clientChannel: sti.getClientChannels()){ Map<String, Node> multiplexerMap = new HashMap<>(); multiplexerMap.put(TemplateConstants.SERVICE_CALL_M_REF_PLACE + - "-" + sti.getServiceName() + "-" + sc2, petriNet().getPlaceById(TemplateConstants.SERVICE_CON_CLIENT_CALL_PLACE + "-" + sc2)); + "-" + sti.getServiceName() + "-" + i + "-" + sc2, addedObjects.get(TemplateConstants.SERVICE_CON_CLIENT_CALL_PLACE + "-" + sti.getServiceName() + "-" + sc2).asNode()); multiplexerMap.put(TemplateConstants.SERVICE_RESP_M_REF_PLACE + - "-" + sti.getServiceName() + "-" + sc2, petriNet().getPlaceById(TemplateConstants.SERVICE_CON_CLIENT_RESP_PLACE + "-" + sc2)); + "-" + sti.getServiceName() + "-" + i + "-" + sc2, addedObjects.get(TemplateConstants.SERVICE_CON_CLIENT_RESP_PLACE + "-" + sti.getServiceName() + "-" + sc2).asNode()); multiplexerMap.put(TemplateConstants.SERVICE_ACTIVE_M_REF_PLACE + - "-" + sti.getServiceName() + "-" + sc2, petriNet().getPlaceById(TemplateConstants.SERVICE_ACTIVE_PLACE + "-" + i)); + "-" + sti.getServiceName() + "-" + i + "-" + sc2, addedObjects.get(TemplateConstants.SERVICE_ACTIVE_PLACE + "-" + sti.getServiceName() + "-" + i).asNode()); multiplexerMap.put(TemplateConstants.SERVICE_INACTIVE_M_REF_PLACE + - "-" + sti.getServiceName() + "-" + sc2, petriNet().getPlaceById(TemplateConstants.SERVICE_INACTIVE_PLACE + "-" + i)); + "-" + sti.getServiceName() + "-" + i + "-" + sc2, addedObjects.get(TemplateConstants.SERVICE_INACTIVE_PLACE + "-" + sti.getServiceName() + "-" + i).asNode()); multiplexerMap.put(TemplateConstants.SERVICE_ENTRY_M_REF_PLACE + - "-" + sti.getServiceName() + "-" + sc2, petriNet().getPlaceById(sti.getServerChannel().getRequestPlaceId())); + "-" + sti.getServiceName() + "-" + i + "-" + sc2, petriNet().getPlaceById(sti.getServerChannel().getRequestPlaceId() + "-" + i + "-" + PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX)); multiplexerMap.put(TemplateConstants.SERVICE_EXIT_M_REF_PLACE + - "-" + sti.getServiceName() + "-" + sc2, petriNet().getPlaceById(sti.getServerChannel().getResponsePlaceId())); + "-" + sti.getServiceName() + "-" + i + "-" + sc2, petriNet().getPlaceById(sti.getServerChannel().getResponsePlaceId() + "-" + i + "-" + PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX)); PetriNet multiplexerNet = ServiceTemplates.getServiceMultiplexerTemplate(sti.getServiceName() + "-" + i + "-" + sc2); - TransformationUtils.includeTemplateInstance(res, petriNet(), multiplexerNet, multiplexerMap); + TransformationUtils.includeTemplateInstance(res, petriNet(), multiplexerNet, multiplexerMap, null); sc2++; } } diff --git a/src/main/jastadd/flatter/transforms/SignalTransforms.jadd b/src/main/jastadd/flatter/transforms/SignalTransforms.jadd index 65f7f930f0ac6ea24331945e47e77e95f3f254ec..f5d7fe3f8590f920e75b3c7e26383f1333041f04 100644 --- a/src/main/jastadd/flatter/transforms/SignalTransforms.jadd +++ b/src/main/jastadd/flatter/transforms/SignalTransforms.jadd @@ -11,14 +11,14 @@ aspect SignalTransforms { PetriNet pubNet = SignalTemplates.getInputSignalTemplate(entry.getKey()); if(Boolean.parseBoolean(entry.getValue())){ - pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + entry.getKey()).getInitialMarking().setText(1); - pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + entry.getKey()).getInitialMarking().setText(0); + pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + "-" + entry.getKey()).getInitialMarking().setText(1); + pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + "-" + entry.getKey()).getInitialMarking().setText(0); } else { - pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + entry.getKey()).getInitialMarking().setText(0); - pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + entry.getKey()).getInitialMarking().setText(1); + pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + "-" + entry.getKey()).getInitialMarking().setText(0); + pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + "-" + entry.getKey()).getInitialMarking().setText(1); } - TransformationUtils.includeTemplateInstance(signalValuePage, this, pubNet, "signal", "signal"); + TransformationUtils.includeTemplateInstance(signalValuePage, this, pubNet, "signal", "signal", null); } return this; } @@ -36,7 +36,12 @@ aspect SignalTransforms { pdi.getName().setText(pdi.getId()); RefTransition rt = PrimitiveTemplates.getReferenceTransition(t); rt.setId("PD-REF-" + i + "-" + t.getId()); - rt.getName().setText(rt.getId()); + rt.setRef(t); + res.addObject(pdi); + res.addObject(rt); + + TransformationUtils.createAndIncludeArc(res, pdi.getId() + "-to-" + rt.getId(), pdi, rt); + TransformationUtils.createAndIncludeArc(res, rt.getId() + "-to-" + pdi.getId(), rt, pdi); int j = 0; for(Literal l : dj.getLiterals()){ @@ -47,17 +52,18 @@ aspect SignalTransforms { // create elements for rule I2 & I3 RefTransition toTrueRt = PrimitiveTemplates.getReferenceTransition(toTrue); toTrueRt.setId(toTrue.getId() + "REF-" + i + "-" + j); - toTrueRt.getName().setText(toTrueRt.getId()); res.addObject(toTrueRt); RefTransition toFalseRt = PrimitiveTemplates.getReferenceTransition(toFalse); toFalseRt.setId(toFalse.getId() + "REF-" + i + "-" + j); - toFalseRt.getName().setText(toFalseRt.getId()); res.addObject(toFalseRt); RefPlace djRefPlace = PrimitiveTemplates.getReferencePlace(pdi); + djRefPlace.setId("DJREF-" + i + "-" + j); + djRefPlace.getName().setText(djRefPlace.getId()); + res.addObject(djRefPlace); // apply rule I2 if(l.isPositiveLiteral()){ - TransformationUtils.createAndIncludeArc(res, toFalse.getId() + "-to-" + djRefPlace.getId(), toFalseRt, djRefPlace); + TransformationUtils.createAndIncludeArc(res, toFalseRt.getId() + "-to-" + djRefPlace.getId(), toFalseRt, djRefPlace); TransformationUtils.createAndIncludeArc(res, djRefPlace.getId() + "-to-" + toTrueRt.getId(), djRefPlace, toTrueRt); if(Boolean.parseBoolean(net.getInputSignalDefinition().get(l.getName()))){ diff --git a/src/main/jastadd/flatter/transforms/TopicTransforms.jadd b/src/main/jastadd/flatter/transforms/TopicTransforms.jadd index 7fad60e2b29f92d81b6a4c74bab6af4ef86a2a3b..e1750d19df52d93342a0b013a46409e67ad3a021 100644 --- a/src/main/jastadd/flatter/transforms/TopicTransforms.jadd +++ b/src/main/jastadd/flatter/transforms/TopicTransforms.jadd @@ -49,7 +49,7 @@ aspect TopicTransforms { pubMap.put(TemplateConstants.PLACE_TOPIC_PUBLISHER_REF + "-" + tti.getTopic() + "-" + i, petriNet().getPlaceById(pp.getPlaceId())); pubMap.put(TemplateConstants.PLACE_TOPIC_PUBLISHER_CHANNEL_REF + "-" + tti.getTopic() + "-" + i, pTopic); PetriNet pubNet = TopicTemplates.getTopicPublisherPetriNet(tti.getTopic() + "-" + i, pp.getLimit()); - TransformationUtils.includeTemplateInstance(res, petriNet(), pubNet, pubMap); + TransformationUtils.includeTemplateInstance(res, petriNet(), pubNet, pubMap, null); i++; } @@ -73,7 +73,7 @@ aspect TopicTransforms { dispatchMap.put(TemplateConstants.TRANSITION_TOPIC_DISPATCHER_CHANNEL_REF + "-" + tti.getTopic() + "-" + j, tTopic); // TODO: make capacity configurable PetriNet dispatchNet = TopicTemplates.getTopicDispatcherPetriNet(tti.getTopic() + "-" + j, 16); - Map<String, PnObject> addedObjects = TransformationUtils.includeTemplateInstance(res, petriNet(), dispatchNet, dispatchMap); + Map<String, PnObject> addedObjects = TransformationUtils.includeTemplateInstance(res, petriNet(), dispatchNet, dispatchMap, null); // apply rule T4 int k = 0; @@ -83,7 +83,7 @@ aspect TopicTransforms { subMap.put(TemplateConstants.TRANSITION_TOPIC_CALLBACK_INPUT_REF + "-" + tti.getTopic() + "-" + j + "-" + k, addedObjects.get(TemplateConstants.DISPATCHER_OUTPUT_TRANSITION + "-" + tti.getTopic() + "-" + j).asNode()); PetriNet callbackNet = TopicTemplates.getTopicCallbackQueuePetriNet(tti.getTopic() + "-" + j + "-" + k, sp.getLimit()); - TransformationUtils.includeTemplateInstance(res, petriNet(), callbackNet, subMap); + TransformationUtils.includeTemplateInstance(res, petriNet(), callbackNet, subMap, null); k++; } j++; diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java index 644805e618a8cb4ef04afc3df4c29cb63cb79997..c3dd544ba76edc84ec1107e6638e953d73db6369 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java @@ -1,13 +1,11 @@ package de.tudresden.inf.st.pnml.flatter; -import de.tudresden.inf.st.jastadd.dumpAst.ast.DumpBuilder; -import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper; -import de.tudresden.inf.st.jastadd.dumpAst.ast.SkinParamBooleanSetting; import de.tudresden.inf.st.pnml.base.constants.PnmlConstants; import de.tudresden.inf.st.pnml.flatter.config.ConfigReader; import de.tudresden.inf.st.pnml.flatter.tina.KtzioProxy; import de.tudresden.inf.st.pnml.flatter.tina.SiftProxy; import de.tudresden.inf.st.pnml.flatter.tina.TinaProxy; +import de.tudresden.inf.st.pnml.flatter.transform.ReferenceFlatter; import de.tudresden.inf.st.pnml.flatter.transform.TransformationUtils; import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser; @@ -16,33 +14,29 @@ import fr.lip6.move.pnml.framework.utils.exception.InvalidIDException; import de.tudresden.inf.st.pnml.flatter.tina.NdrioProxy; import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; -import java.awt.*; import java.io.IOException; -import java.io.OutputStream; -import java.nio.file.Paths; -import java.util.HashSet; import java.util.UUID; public class Main { - public static void main(String[] args) throws InvalidIDException { + public static void main(String[] args) throws InvalidIDException, IOException, InterruptedException { String configPath = (args.length > 1) ? args[1] : null; String pnmlPath = (args.length > 0) ? args[0] : null; -/* + if (pnmlPath == null || configPath == null) { System.out.println("No model found on given input path."); return; - }*/ + } // parse the global not flatted petri net - pnmlPath = "/home/sebastian/git/dineros/dineros-v2/dineros/pnml-relast-base/src/main/resources/nets/TestNet1.pnml"; - configPath = "src/main/config/siftConfig.json"; + //pnmlPath = "/home/sebastian/git/dineros/dineros-v2/dineros/pnml-relast-base/src/main/resources/nets/TestNet3.pnml"; + //configPath = "src/main/config/siftConfig.json"; PetriNet petriNet = PnmlParser.parsePnml(pnmlPath).get(0); // [STAGE 1] Resolve service prototype pages TransformationUtils.transformPrototypePagesRecursive(petriNet.getPage(0), null, petriNet); - petriNet.flushTreeCache(); + petriNet.flushAttrAndCollectionCache(); // [STAGE 2] Transform topic transitions for(DinerosTransition dt : petriNet.allDinerosTransitions()){ @@ -57,6 +51,8 @@ public class Main { } } + petriNet.flushTreeCache(); + // [STAGE 3] Transform service transitions for(DinerosTransition dt : petriNet.allDinerosTransitions()){ if(dt.canTransformServiceTransition()){ @@ -85,17 +81,8 @@ public class Main { petriNet.flushTreeCache(); - // DumpBuilder builder = Dumper.read(petriNet).skinParam(SkinParamBooleanSetting.Shadowing, false); - // builder.dumpAsPNG(Paths.get("net.png")); - // builder.dumpAsSVG(Paths.get("net.svg")); - - // read config for analyzer from file - /* ConfigReader cr = new ConfigReader(configPath); - String[] tinaConfig = cr.getTinaConfigParams(); - String[] siftConfig = cr.getSiftConfigParams();*/ - - // make sure that we have a valid marking - System.out.println("[FLATTER] Checking marking."); + // [STAGE 5] make sure that we have a valid marking + System.out.println("[FLATTENER] Checking marking."); for (Place p : petriNet.allPlaces()) { if (p.getInitialMarking() == null) { System.out.println("[FLATTER] Found NULL-marking. Falling back to 0 ..."); @@ -105,52 +92,62 @@ public class Main { } } - /* - // remove references / pages - System.out.println("[FLATTER] Breaking references and pages."); - ReferenceFlatter.flatReferencesAndPages(petriNet); -*/ - // export flatted net to pnml - printNet(petriNet, true, false); - System.out.println("[FLATTER] Exporting to pnml."); + // [STAGE 6] remove references / pages + System.out.println("[FLATTENER] Breaking references and pages."); + for(Page p : petriNet.allPages()){ + if(p.getId().equals("top")){ + ReferenceFlatter.flatReferencesAndPages(petriNet,p); + break; + } + } + + // [STAGE 7] export flatted net to pnml + // printNet(petriNet, true, false); + System.out.println("[FLATTENER] Exporting to pnml."); String exportId = UUID.randomUUID().toString(); String pnmlExportPath = PnmlExporter.serializeToPnmlFile(petriNet, "flatted-" + exportId); // convert and add inhibitor arcs - /* System.out.println("[FLATTER] Converting to net format."); + System.out.println("[FLATTENER] Converting to net format."); NdrioProxy ndrioProxy = new NdrioProxy(); String homeDirectory = System.getProperty("user.dir"); String fid = UUID.randomUUID().toString(); - String ndrioTargetPath = homeDirectory + "/temp/net/" + fid + "flatted-" + exportId + ".net";*/ + String ndrioTargetPath = homeDirectory + "/temp/net/" + fid + "flatted-" + exportId + ".net"; // resolve inhibitor arcs - /* System.out.println("[FLATTER] Including inhibitor arcs into net format."); + System.out.println("[FLATTENER] Including inhibitor arcs into net format."); String inhibitorTargetPath = homeDirectory + "/temp/net/" + fid + "flatted-inh-" + exportId + ".net"; ndrioProxy.pnml2net(pnmlExportPath, ndrioTargetPath); - ndrioProxy.includeInhibitorArcs(petriNet, ndrioTargetPath, inhibitorTargetPath);*/ + ndrioProxy.includeInhibitorArcs(petriNet, ndrioTargetPath, inhibitorTargetPath); + + // [STAGE 8] Analyze + // read config for analyzer from file + ConfigReader cr = new ConfigReader(configPath); + String[] tinaConfig = cr.getTinaConfigParams(); + String[] siftConfig = cr.getSiftConfigParams(); // insert into tina - /* if (tinaConfig.length > 1) { - System.out.println("[FLATTER] Inserting into tina."); + if (tinaConfig.length > 1) { + System.out.println("[FLATTENER] Inserting into tina."); TinaProxy tinaProxy = new TinaProxy(); String tinaTargetPath = homeDirectory + "/temp/tina/" + "tina-result-" + exportId + ".txt"; tinaProxy.analyzePetriNet(inhibitorTargetPath, tinaTargetPath, tinaConfig); - }*/ + } // insert into sift - /* if (siftConfig.length > 1) { - System.out.println("[FLATTER] Inserting into sift."); + if (siftConfig.length > 1) { + System.out.println("[FLATTENER] Inserting into sift."); SiftProxy siftProxy = new SiftProxy(); String siftTargetPath = homeDirectory + "/temp/sift/" + "sift-result-" + exportId + ".ktz"; siftProxy.analyzePetriNet(inhibitorTargetPath, siftTargetPath, siftConfig); - System.out.println("[FLATTER] Converting with ktzio."); + System.out.println("[FLATTENER] Converting with ktzio."); KtzioProxy ktzioProxy = new KtzioProxy(); String ktzioPath = homeDirectory + "/temp/sift/" + "sift-result-converted-" + exportId + ".txt"; ktzioProxy.convertBinaryToText(siftTargetPath, ktzioPath); - }*/ + } - System.out.println("Finished."); + System.out.println("[FLATTENER] Finished."); } @@ -202,13 +199,13 @@ public class Main { System.out.println("----------------- REF PLACES -----------------"); for (RefPlace rp : petriNet.allRefPlaces()) { - System.out.println("--- RefPlace: " + rp.getId()); + System.out.println("--- RefPlace: " + rp.getId() + " >> " + rp.getRef().getId()); } System.out.println("----------------- REF TRANSITIONS -----------------"); for (RefTransition rt : petriNet.allRefTransitions()) { - System.out.println("--- RefTransition: " + rt.getId()); + System.out.println("--- RefTransition: " + rt.getId() + " >> " + rt.getRef().getId()); } if (withArcs) { diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/TemplateConstants.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/TemplateConstants.java index 707903472508fca53ad0afc1cdda90318af8b2fc..ebe22c908839622b3362a69f6d3117c9345ae45d 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/TemplateConstants.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/TemplateConstants.java @@ -38,14 +38,14 @@ public final class TemplateConstants { public static final String CHANNEL_TOPIC_PLACE = "ChannelConnectorPlace"; public static final String CHANNEL_TOPIC_TRANSITION = "ChannelConnectorTransition"; public static final String CHANNEL_TOPIC_PAGE_PREFIX = "ChannelTopicPage"; - public static final String CHANNEL_SERVICE_PAGE_PREFIX = "SIGNAL-PAGE-"; + public static final String CHANNEL_SERVICE_PAGE_PREFIX = "CHANNEL-SERVICE-PAGE-"; // signal elements public static final String INPUT_SIGNAL_PLACE_TRUE = "InputSignalTruePlace"; public static final String INPUT_SIGNAL_PLACE_FALSE = "InputSignalFalsePlace"; public static final String INPUT_SIGNAL_TRANSITION_TO_TRUE = "InputSignalToTrueTransition"; public static final String INPUT_SIGNAL_TRANSITION_TO_FALSE = "InputSignalToFalseTransition"; - public static final String INPUT_SIGNAL_PAGE_PREFIX = "InputSignalTruePlace"; + public static final String INPUT_SIGNAL_PAGE_PREFIX = "InputSignalPage"; // services // S3 diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ReferenceFlatter.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ReferenceFlatter.java index 4539aadebf850e725b2590e8936d9fcbfc3a5527..297b7b857d8663619ed0f2b20779db17b8c2ab64 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ReferenceFlatter.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ReferenceFlatter.java @@ -25,12 +25,13 @@ public class ReferenceFlatter { } } - public static void flatReferencesAndPages(PetriNet petriNet){ + public static void flatReferencesAndPages(PetriNet petriNet, Page page){ - excludeAllPages(petriNet); + excludeAllPages(petriNet, page); resolvePlaceReferences(petriNet); resolveTransitionReferences(petriNet); petriNet.flushTreeCache(); + petriNet.flushAttrAndCollectionCache(); } private static void resolvePlaceReferences(PetriNet petriNet){ @@ -66,7 +67,6 @@ public class ReferenceFlatter { for(PlaceNode placeNode : nodesToDelete){ placeNode.removeSelf(); } - // petriNet.flushTreeCache(); } private static void resolveTransitionReferences(PetriNet petriNet){ @@ -102,14 +102,13 @@ public class ReferenceFlatter { for(TransitionNode transitionNode : nodesToDelete){ transitionNode.removeSelf(); } - // petriNet.flushTreeCache(); } /** * Excludes all but the top level page. * @param petriNet */ - private static void excludeAllPages(PetriNet petriNet){ + private static void excludeAllPages(PetriNet petriNet, Page targetPage){ Page topLevelPage = null; @@ -122,17 +121,14 @@ public class ReferenceFlatter { for (PnObject pnObject : petriNet.allObjects()){ assert topLevelPage != null; if(pnObject.ContainingPage() != null && !pnObject.isPageNode()){ - // System.out.println("Moving: " + pnObject.getId()); topLevelPage.addObject(pnObject); } } for (Page p : petriNet.allPages()){ - if(p.ContainingPage() != null){ + if(!p.getId().equals(targetPage.getId())){ p.removeSelf(); } } - - // petriNet.flushTreeCache(); } } diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/TransformationUtils.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/TransformationUtils.java index ca234416f4238a69371498a1034c501dff0e845e..9effaf336c68a1d9db1e0cd1d5a9b61606901537 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/TransformationUtils.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/TransformationUtils.java @@ -40,23 +40,25 @@ public class TransformationUtils { return a; } - public static Map<String, PnObject> includeTemplateInstance(Page page, PetriNet petriNet, PetriNet templateInstance, Map<String, Node> refs) { - return includeTemplateInstance(page, petriNet, templateInstance, "channel", "channel", refs); + public static Map<String, PnObject> includeTemplateInstance(Page page, PetriNet petriNet, PetriNet templateInstance, Map<String, Node> refs, Map<String, PnObject> addedObjects) { + return includeTemplateInstance(page, petriNet, templateInstance, "channel", "channel", refs, addedObjects); } - public static Map<String, PnObject> includeTemplateInstance(Page page, PetriNet petriNet, PetriNet templateInstance) { + public static Map<String, PnObject> includeTemplateInstance(Page page, PetriNet petriNet, PetriNet templateInstance, Map<String, PnObject> addedObjects) { Map<String, Node> refs = new HashMap<>(); - return includeTemplateInstance(page, petriNet, templateInstance, "channel", "channel", refs); + return includeTemplateInstance(page, petriNet, templateInstance, "channel", "channel", refs, addedObjects); } - public static Map<String, PnObject> includeTemplateInstance(Page page, PetriNet petriNet, PetriNet templateInstance, String subnet, String node) { + public static Map<String, PnObject> includeTemplateInstance(Page page, PetriNet petriNet, PetriNet templateInstance, String subnet, String node, Map<String, PnObject> addedObjects) { Map<String, Node> refs = new HashMap<>(); - return includeTemplateInstance(page, petriNet, templateInstance, subnet, node, refs); + return includeTemplateInstance(page, petriNet, templateInstance, subnet, node, refs, addedObjects); } - public static Map<String, PnObject> includeTemplateInstance(Page page, PetriNet petriNet, PetriNet templateInstance, String subnet, String node, Map<String, Node> refs) { + public static Map<String, PnObject> includeTemplateInstance(Page page, PetriNet petriNet, PetriNet templateInstance, String subnet, String node, Map<String, Node> refs, Map<String, PnObject> addedObjects) { - Map<String, PnObject> addedObjects = new HashMap<>(); + if(addedObjects == null){ + addedObjects = new HashMap<>(); + } for(RefTransition rt : templateInstance.allRefTransitions()){ if(refs.containsKey(rt.getId())){ diff --git a/src/main/resources/templates/ServiceMultiPlexerTemplate.pnml b/src/main/resources/templates/ServiceMultiplexerTemplate.pnml similarity index 98% rename from src/main/resources/templates/ServiceMultiPlexerTemplate.pnml rename to src/main/resources/templates/ServiceMultiplexerTemplate.pnml index b928541abb666078c711004c923a2628ed624234..48a7de52e0125f3f330410e6d32655b518877cae 100644 --- a/src/main/resources/templates/ServiceMultiPlexerTemplate.pnml +++ b/src/main/resources/templates/ServiceMultiplexerTemplate.pnml @@ -162,13 +162,13 @@ </graphics> </referencePlace> - <arc id="arc-1" source="ServiceCallMultiCallRefPlace" target="ServiceCallMultiInTransition"> + <arc id="arc-1" source="ServiceCallMultiCallRefPlace" target="ServiceCallMultiEntryTransition"> </arc> <arc id="arc-2" source="ServiceCallMultiEntryTransition" target="ServiceCallMultiActiveRefPlace"> </arc> - <arc id="arc-3" source="ServiceCallMultiActiveRefPlace" target="ServiceCallMultiExitTransition"> + <arc id="arc-3" source="ServiceCallMultiEntryTransition" target="ServiceCallMultiFlagPlace"> </arc> - <arc id="arc-4" source="ServiceCallMultiEntryTransition" target="ServiceCallMultiFlagPlace"> + <arc id="arc-4" source="ServiceCallMultiActiveRefPlace" target="ServiceCallMultiExitTransition"> </arc> <arc id="arc-5" source="ServiceCallMultiFlagPlace" target="ServiceCallMultiExitTransition"> </arc>