diff --git a/src/main/jastadd/flatter/rewrites/ServiceRewrites.jadd b/src/main/jastadd/flatter/rewrites/ServiceRewrites.jadd new file mode 100644 index 0000000000000000000000000000000000000000..1702d88e9bb1acc15e0914b1a564e40953ed5b73 --- /dev/null +++ b/src/main/jastadd/flatter/rewrites/ServiceRewrites.jadd @@ -0,0 +1,33 @@ +aspect ServiceRewrites { + + rewrite Page { + when ( getType() != null && getType().equals(PnmlConstants.PAGE_TYPE_SERVER) && !getId().endsWith(PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX) ) + to Page { + + int serverCapacity = 0; + for(DinerosTransition dt : petriNet().allDinerosTransitions()){ + if(dt.getStaticTransitionInformation().isServiceTransitionInformation()){ + serverCapacity = dt.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getCapacity(); + break; + } + } + + Page containerPage = new Page(); + containerPage.setId(this.getId() + "-" + PnmlConstants.PAGE_SERVER_CONTAINER_SUFFIX); + + for( int i = 0; i < serverCapacity; i++){ + Page serverInstancePage = this.treeCopyNoTransform(); + serverInstancePage.setId(serverInstancePage.getId() + "-" + i + "-" + PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX); + + for(PnObject pnObject : serverInstancePage.getObjectList()){ + pnObject.setId(pnObject.getId() + "-" + i + "-" + PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX); + pnObject.getName().setText(pnObject.getId()); + } + + containerPage.addObject(serverInstancePage); + } + + return containerPage; + } + } +} \ No newline at end of file diff --git a/src/main/jastadd/flatter/rewrites/SignalRewrites.jadd b/src/main/jastadd/flatter/rewrites/SignalRewrites.jadd new file mode 100644 index 0000000000000000000000000000000000000000..497b7487343da42906f06f918458a258e38b2809 --- /dev/null +++ b/src/main/jastadd/flatter/rewrites/SignalRewrites.jadd @@ -0,0 +1,4 @@ +aspect SignalRewrites { + + +} \ No newline at end of file diff --git a/src/main/jastadd/flatter/rewrites/TopicRewrites.jadd b/src/main/jastadd/flatter/rewrites/TopicRewrites.jadd new file mode 100644 index 0000000000000000000000000000000000000000..ab6613b587b4530e486e3b0ff0e80edf871424f9 --- /dev/null +++ b/src/main/jastadd/flatter/rewrites/TopicRewrites.jadd @@ -0,0 +1,3 @@ +aspect TopicRewrites { + +} \ No newline at end of file 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 495eb3e298925d2389e385ddff5acd3a486956e4..8af6b0f61e0627c92b1234a9085faf8a5db8973c 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 @@ -4,9 +4,6 @@ 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.ChannelFlatter; -import de.tudresden.inf.st.pnml.flatter.transform.ReferenceFlatter; -import de.tudresden.inf.st.pnml.flatter.transform.SignalFlatter; import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser; import fr.lip6.move.pnml.framework.utils.exception.InvalidIDException; @@ -21,23 +18,23 @@ public class Main { public static void main(String[] args) throws IOException, InvalidIDException, InterruptedException { - String configPath = (args.length > 1) ? args[1] : null; + /* 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 = "../pnml-relast-nets/src/main/resources/useCaseNets/Paper/RoboticUseCase-AllLayers.pnml"; + String pnmlPath = "/home/sebastian/git/dineros/dineros-v2/dineros/pnml-relast-base/src/main/resources/nets/TestNet2.pnml"; // configPath = "src/main/config/siftConfig.json"; PetriNet petriNet = PnmlParser.parsePnml(pnmlPath).get(0); // read config for analyzer from file - ConfigReader cr = new ConfigReader(configPath); + /* ConfigReader cr = new ConfigReader(configPath); String[] tinaConfig = cr.getTinaConfigParams(); - String[] siftConfig = cr.getSiftConfigParams(); + String[] siftConfig = cr.getSiftConfigParams();*/ // make sure that we have a valid marking System.out.println("[FLATTER] Checking marking."); @@ -50,54 +47,53 @@ public class Main { } } + /* // remove references / pages System.out.println("[FLATTER] Breaking references and pages."); ReferenceFlatter.flatReferencesAndPages(petriNet); - // printNet(petriNet); // flat topic publishers / subscribers to instance based semantics System.out.println("[FLATTER] Breaking down topic channels."); PetriNet topicFlattedPetriNet = ChannelFlatter.flatTopicChannels(petriNet); - // printNet(petriNet); // flat service clients / servers to instance based semantics System.out.println("[FLATTER] Breaking down service channels."); PetriNet serviceFlattedPetriNet = ChannelFlatter.flatServiceChannels(topicFlattedPetriNet); - // printNet(serviceFlattedPetriNet); // flat input signals System.out.println("[FLATTER] Breaking down signals."); PetriNet signalFlattedPetriNet = SignalFlatter.flatSignals(serviceFlattedPetriNet); - printNet(signalFlattedPetriNet); + printNet(signalFlattedPetriNet);*/ // export flatted net to pnml + printNet(petriNet, true, false); System.out.println("[FLATTER] 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("[FLATTER] 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("[FLATTER] 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);*/ // insert into tina - if (tinaConfig.length > 1) { + /* if (tinaConfig.length > 1) { System.out.println("[FLATTER] 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) { + /* if (siftConfig.length > 1) { System.out.println("[FLATTER] Inserting into sift."); SiftProxy siftProxy = new SiftProxy(); String siftTargetPath = homeDirectory + "/temp/sift/" + "sift-result-" + exportId + ".ktz"; @@ -107,7 +103,7 @@ public class Main { KtzioProxy ktzioProxy = new KtzioProxy(); String ktzioPath = homeDirectory + "/temp/sift/" + "sift-result-converted-" + exportId + ".txt"; ktzioProxy.convertBinaryToText(siftTargetPath, ktzioPath); - } + }*/ // insert into struct // TODO in v2 @@ -122,13 +118,13 @@ public class Main { } - public static void printNet(PetriNet petriNet) { + public static void printNet(PetriNet petriNet, boolean withArcs, boolean withToolSpecifics) { System.out.println("--------------- STRUCTURE ---------------"); System.out.println("----------------- PLACES ----------------"); for (Place p : petriNet.allPlaces()) { - System.out.println("Place " + p.asOutputSignalPlace().getId() + " -- " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet()); + System.out.println("Place " + p.asDinerosPlace().getId() + " -- " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet()); if (p.getInitialMarking() != null) { System.out.println("--- Marking: " + p.getInitialMarking().getText()); } else { @@ -146,31 +142,24 @@ public class Main { for (Transition t : petriNet.allTransitions()) { - if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()) { - System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() - + " service: " + t.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName() + " ---------"); - } else if (t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()) { - System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() - + " topic: " + t.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic() + " ---------"); + if (t.asDinerosTransition().getStaticTransitionInformation().isServiceTransitionInformation()) { + System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asDinerosTransition().getStaticTransitionInformation().getSubNet() + + " service: " + t.asDinerosTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName() + " ---------"); + } else if (t.asDinerosTransition().getStaticTransitionInformation().isTopicTransitionInformation()) { + System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asDinerosTransition().getStaticTransitionInformation().getSubNet() + + " topic: " + t.asDinerosTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic() + " ---------"); } else { - System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + " --- name: " + t.getName().getText()); + System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asDinerosTransition().getStaticTransitionInformation().getSubNet() + " --- name: " + t.getName().getText()); } - // for(Arc a : t.getInArcs()){ - // System.out.println("incomming arc: " + a.getId()); - // } - // if(t.asInputSignalTransition().getInputSignalClause() != null && t.asInputSignalTransition().getInputSignalClause().getNumChild() > 0){ - // System.out.println("------ Clause: " + t.asInputSignalTransition().getInputSignalClause().printExp()); - // } + for (Place p : t.asDinerosTransition().incomingPlaces()) { - for (Place p : t.asInputSignalTransition().incomingPlaces()) { - - System.out.println("------ Inputplace: " + p.getId() + " subnet: " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() + " ---------"); + System.out.println("------ Inputplace: " + p.getId() + " subnet: " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet() + " ---------"); } - for (Place p : t.asInputSignalTransition().outgoingPlaces()) { + for (Place p : t.asDinerosTransition().outgoingPlaces()) { - System.out.println("------ Outputplace: " + p.getId() + " subnet: " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() + " ---------"); + System.out.println("------ Outputplace: " + p.getId() + " subnet: " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet() + " ---------"); } } @@ -186,39 +175,36 @@ public class Main { System.out.println("--- RefTransition: " + rt.getId()); } - System.out.println("----------------- ARCS -----------------"); + if (withArcs) { + System.out.println("----------------- ARCS -----------------"); - for (Arc a : petriNet.allArcs()) { - System.out.println("Arc: " + a.getId() + " -- source: " + a.getSource().getId() + " -- target: " + a.getTarget().getId()); + for (Arc a : petriNet.allArcs()) { + System.out.println("Arc: " + a.getId() + " -- source: " + a.getSource().getId() + " -- target: " + a.getTarget().getId()); + } } + System.out.println("--------------- T SIGNALS (STATIC)---------------"); for (Transition t : petriNet.allTransitions()) { - InputSignalTransition ist = t.asInputSignalTransition(); + DinerosTransition ist = t.asDinerosTransition(); - if (ist != null && ist.getStaticInputSignalBindingList() != null) { - ist.getStaticInputSignalBindingList().forEach(inputSignalBinding -> System.out.println(" (" + t.getName().getText() + ") Signal: " + inputSignalBinding.getInputSignalID())); + if (ist != null && ist.getMutableTransitionInformation() == null) { + if(ist.getStaticTransitionInformation().isSignalTransitionInformation()){ + System.out.println(ist.getStaticTransitionInformation().asSignalTransitionInformation().getClause().printClause()); + } } } - System.out.println("--------------- T SIGNALS (MUTUAL)---------------"); - - for (Transition t : petriNet.allTransitions()) { - InputSignalTransition ist = t.asInputSignalTransition(); + if(withToolSpecifics) { + System.out.println("--------------- TOOL SPECIFIC ---------------"); - if (ist != null && ist.getMutualInputSignalBindingList() != null) { - ist.getMutualInputSignalBindingList().forEach(inputSignalBinding -> System.out.println(" (" + t.getName().getText() + ") Signal: " + inputSignalBinding.getInputSignalID())); + for (Transition t : petriNet.allTransitions()) { + DinerosTransition ist = t.asDinerosTransition(); + if (ist != null && ist.getNumToolspecific() > 0) { + System.out.println("ToolSpecific: (" + ist.getName().getText() + ") " + ist.getToolspecific(0).getFormattedXMLBuffer().toString()); + } } } - - // System.out.println("--------------- TOOL SPECIFIC ---------------"); - - /* for (Transition t : petriNet.allTransitions()) { - InputSignalTransition ist = t.asInputSignalTransition(); - if (ist != null && ist.getNumToolspecific() > 0) { - System.out.println("ToolSpecific: (" + ist.getName().getText() + ") " + ist.getToolspecific(0).getFormattedXMLBuffer().toString()); - } - }*/ } } \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java index 454ed9b8235cba59632bdb4fc634426acd629a48..7190bb7314dda1ae64fe1ec1b2d5ebe2e1ac902b 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java @@ -4,26 +4,26 @@ import de.tudresden.inf.st.pnml.jastadd.model.*; public class PrimitiveTemplates extends PnmlTemplate{ - public static InputSignalTransition getInputSignalTransition(){ + public static DinerosTransition getDinerosTransition(){ - PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/InputSignalTransition.pnml").get(0); + PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/DinerosTransition.pnml").get(0); for(Transition t : templateNet.allTransitions()){ - if(t.getId().equals("InputSignalTransition")){ - return t.asInputSignalTransition(); + if(t.getId().equals("DinerosTransition")){ + return t.asDinerosTransition(); } } return null; } - public static OutputSignalPlace getOutputSignalPlace(){ + public static DinerosPlace getDinerosPlace(){ - PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/OutputSignalPlace.pnml").get(0); + PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/DinerosPlace.pnml").get(0); for(Place p : templateNet.allPlaces()){ - if(p.getId().equals("OutputSignalPlace")){ - return p.asOutputSignalPlace(); + if(p.getId().equals("DinerosPlace")){ + return p.asDinerosPlace(); } } diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ChannelFlatter.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ChannelFlatter.java index e9cf70a4152588e3ba25a59d7ddc4d010b407255..14141ab5855a7411828ce3ae26831046fdf8bc3a 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ChannelFlatter.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ChannelFlatter.java @@ -1,8 +1,5 @@ package de.tudresden.inf.st.pnml.flatter.transform; -import de.tudresden.inf.st.pnml.base.constants.PnmlConstants; -import de.tudresden.inf.st.pnml.base.data.CommunicatorInformation; -import de.tudresden.inf.st.pnml.flatter.template.*; import de.tudresden.inf.st.pnml.jastadd.model.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,740 +13,6 @@ public class ChannelFlatter extends Flatter { private static final Logger logger = LoggerFactory.getLogger(ChannelFlatter.class); - public static PetriNet flatTopicChannels(PetriNet petriNet) { - - int publisherCount = 0; - int dispatcherCount = 0; - int callbackCount = 0; - int channelCount = 0; - - List<Arc> arcsToRemove = new ArrayList<>(); - List<Transition> transitionsToRemove = new ArrayList<>(); - - // process topic transitions - for (Transition t : petriNet.allTransitions()) { - - if (t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()) { - - logger.error("Found topic transition: " + t.getId()); - int senderCapacity = t.asInputSignalTransition().getStaticTransitionInformation().getInputLimit(); - int receiverCapacity = t.asInputSignalTransition().getStaticTransitionInformation().getOutputLimit(); - - // collect inputs and outputs - Map<String, Place> inputMapping = new HashMap<>(); - Map<String, List<Place>> outputMapping = new HashMap<>(); - - // get needed input information - for (Arc a : t.getInArcs()) { - Place p = (Place) a.getSource().asPlaceNode(); - inputMapping.put(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet(), p); - } - - // get needed output information - for (Arc a : t.getOutArcs()) { - Place p = (Place) a.getTarget().asPlaceNode(); - - if (outputMapping.containsKey(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) { - outputMapping.get(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet()).add(p); - } else { - List<Place> pList = new ArrayList<>(); - pList.add(p); - outputMapping.put(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet(), pList); - } - } - - // create und insert "the channel" elements - insertChannelElements(petriNet, channelCount); - - Page topPage = petriNet.getPage(0); - - for (Map.Entry<String, Place> entry : inputMapping.entrySet()) { - - // include the template publisher - PetriNet publisherPetriNet = TopicTemplates.getTopicPublisherPetriNet(String.valueOf(publisherCount), senderCapacity); - includeTemplateInstance(petriNet, publisherPetriNet, entry.getKey(), entry.getValue().asOutputSignalPlace().getStaticPlaceInformation().getLocation()); - - // connect the publisher inputs - Arc inputArc = new Arc(); - Arc overFlowArc = new Arc(); - Arc outArc = new Arc(); - inputArc.setId("pub-inputArc-" + publisherCount); - overFlowArc.setId("pub-overFlowArc-" + publisherCount); - outArc.setId("pub-outArc-" + publisherCount); - - - inputArc.setSource(entry.getValue()); - inputArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_INPUT_TRANSITION + "-" + publisherCount)); - - overFlowArc.setSource(entry.getValue()); - overFlowArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_OVERFLOW_TRANSITION + "-" + publisherCount)); - - outArc.setSource((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_OUTPUT_TRANSITION + "-" + publisherCount)); - outArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.CHANNEL_CONNECTOR_PLACE + "-" + channelCount)); - - topPage.addObject(inputArc); - topPage.addObject(overFlowArc); - topPage.addObject(outArc); - - // increase for unique ids - publisherCount++; - } - - petriNet.flushTreeCache(); - - // subscribers - for (Map.Entry<String, List<Place>> entry : outputMapping.entrySet()) { - - // include dispatcher queues - PetriNet dispatcherNet = TopicTemplates.getTopicDispatcherPetriNet(String.valueOf(dispatcherCount), 16); - includeTemplateInstance(petriNet, dispatcherNet, entry.getKey(), entry.getValue().get(0).asOutputSignalPlace().getStaticPlaceInformation().getLocation()); - - Arc channelToDispatcherArc = new Arc(); - channelToDispatcherArc.setId("channelToDispatcherArc-" + dispatcherCount); - channelToDispatcherArc.setSource((Node) getPnObjectByID(petriNet, TemplateConstants.CHANNEL_CONNECTOR_TRANSITION + "-" + channelCount)); - channelToDispatcherArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.DISPATCHER_INPUT_PLACE + "-" + dispatcherCount)); - topPage.addObject(channelToDispatcherArc); - - petriNet.flushTreeCache(); - - // include subscriber queues - for (Place p : entry.getValue()) { - - PetriNet subscriberNet = TopicTemplates.getTopicCallbackQueuePetriNet(String.valueOf(callbackCount), receiverCapacity); - includeTemplateInstance(petriNet, subscriberNet, entry.getKey(), p.asOutputSignalPlace().getStaticPlaceInformation().getLocation()); - - // callbackInputArc - createAndIncludeArc(topPage, "callbackInputArc-" + dispatcherCount, (Node) getPnObjectByID(petriNet, TemplateConstants.DISPATCHER_OUTPUT_TRANSITION + "-" + dispatcherCount), - (Node) getPnObjectByID(petriNet, TemplateConstants.CALLBACK_INPUT_PLACE + "-" + callbackCount)); - - // callbackOverFlowArc - createAndIncludeArc(topPage, "callbackOverFlowArc-" + dispatcherCount, (Node) getPnObjectByID(petriNet, TemplateConstants.CALLBACK_INPUT_PLACE + "-" + dispatcherCount), - (Node) getPnObjectByID(petriNet, TemplateConstants.CALLBACK_OVERFLOW_TRANSITION + "-" + callbackCount)); - - // callbackOutArc - createAndIncludeArc(topPage, "callbackOutArc-" + dispatcherCount, (Node) getPnObjectByID(petriNet, TemplateConstants.CALLBACK_OUTPUT_TRANSITION + "-" + dispatcherCount), p); - - callbackCount++; - } - - dispatcherCount++; - } - - petriNet.flushTreeCache(); - - // objects to be cleaned up - arcsToRemove.addAll(t.getInArcs()); - arcsToRemove.addAll(t.getOutArcs()); - transitionsToRemove.add(t); - - } - - channelCount++; - } - - // clean up old channel data - for (Arc a : arcsToRemove) { - a.removeSelf(); - } - - for (Transition t : transitionsToRemove) { - t.removeSelf(); - } - - petriNet.flushTreeCache(); - - return petriNet; - } - - private static PlaceInformation generateChannelPlaceInformation() { - - PlaceInformation newPi = new PlaceInformation(); - newPi.setLocation("channel"); - newPi.setSubNet("channel"); - newPi.setType(PnmlConstants.PLACE_TYPE_DISCRETE); - - return newPi; - } - - private static void insertChannelElements(PetriNet petriNet, int channelCount) { - - OutputSignalPlace channelPlace = new OutputSignalPlace(); - channelPlace.setMutualPlaceInformation(generateChannelPlaceInformation()); - - InputSignalTransition channelTransition = new InputSignalTransition(); - TransitionInformation newTi = new DefaultTransitionInformation(); - newTi.setLocation("channel"); - newTi.setSubNet("channel"); - newTi.setType(PnmlConstants.TRANSITION_TYPE_DISCRETE); - channelTransition.setMutualTransitionInformation(newTi); - - Name nChannelPlace = new Name(); - nChannelPlace.setText(TemplateConstants.CHANNEL_CONNECTOR_PLACE + "-" + channelCount); - channelPlace.setName(nChannelPlace); - channelPlace.setId(TemplateConstants.CHANNEL_CONNECTOR_PLACE + "-" + channelCount); - - Name nChannelTransition = new Name(); - nChannelTransition.setText(TemplateConstants.CHANNEL_CONNECTOR_TRANSITION + "-" + channelCount); - channelTransition.setName(nChannelTransition); - channelTransition.setId(TemplateConstants.CHANNEL_CONNECTOR_TRANSITION + "-" + channelCount); - - Page topPage = petriNet.getPage(0); - topPage.addObject(channelPlace); - topPage.addObject(channelTransition); - - Arc channelArc = new Arc(); - channelArc.setId("ChannelArc-" + channelCount); - channelArc.setTarget(channelTransition); - channelArc.setSource(channelPlace); - topPage.addObject(channelArc); - - petriNet.flushTreeCache(); - } - - /** - * Get the service call trees leaves. Works only with a net without references and only a single top level page. - * - * @param petriNet the unflatted net - * @return set of leave subnets - */ - private static Set<InputSignalTransition> getUnflattedServiceCallLeaves(PetriNet petriNet, Set<String> resolved) { - - Set<InputSignalTransition> leaves = new HashSet<>(); - - for (Transition t : petriNet.allTransitions()) { - - if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation() - && t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)) { - - int inCount = t.incomingPlaces().size(); - int inLeafCount = 0; - - for (Place p : t.incomingPlaces()) { - String sourceSubnet = p.asOutputSignalPlace().getSubnet(); - - CommunicatorInformation cInfo = petriNet.getCommunicatorInformation(resolved); - - for (Map.Entry<String, String> entry : cInfo.getCommunicatorMapping().entries()) { - - boolean isClient = false; - boolean isServer = false; - - if (entry.getValue().equals(PnmlConstants.SERVICE_CLIENT) && entry.getKey().equals(sourceSubnet)) { - isClient = true; - } - - for (Map.Entry<String, String> entry2 : cInfo.getCommunicatorMapping().entries()) { - - if (entry2.getValue().equals(PnmlConstants.SERVICE_SERVER) && entry2.getKey().equals(sourceSubnet)) { - isServer = true; - break; - } - } - - if (isClient && !isServer) { - inLeafCount++; - } - } - } - - if (inCount == inLeafCount) { - leaves.add(t.asInputSignalTransition()); - } - } - } - return leaves; - } - - /** - * Flattening of service constructs, important: circular service calls are not allowed! - * - * @param petriNet petriNet the unflatted net - * @return the service flatted net - */ - public static PetriNet flatServiceChannels(PetriNet petriNet) { - - Set<String> resolvedSubnets = new HashSet<>(); - Set<String> reconnectedClients = new HashSet<>(); - - Set<InputSignalTransition> unflattedLeaves = getUnflattedServiceCallLeaves(petriNet, resolvedSubnets); - - int serverInstanceCount = 0; - - // flat everything but the final service calls - while (unflattedLeaves.size() > 0) { - - for (InputSignalTransition t : unflattedLeaves) { - flatServiceChannelsInternal(petriNet, serverInstanceCount, t, reconnectedClients); - - for (Place p : t.outgoingPlaces()) { - resolvedSubnets.add(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet()); - break; - } - - unflattedLeaves = getUnflattedServiceCallLeaves(petriNet, resolvedSubnets); - serverInstanceCount++; - break; - } - } - - // flat the final service calls - for (Transition t : petriNet.allTransitions()) { - if (t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)) { - System.out.println("Flatting a root service transition: " + t.getId()); - flatServiceChannelsInternal(petriNet, serverInstanceCount, t.asInputSignalTransition(), reconnectedClients); - serverInstanceCount++; - } - } - - return petriNet; - } - - private static PetriNet flatServiceChannelsInternal(PetriNet petriNet, int serverInstanceCount, InputSignalTransition requestTransitionPnObject, Set<String> reconnectedClients) { - - Page topPage = petriNet.getPage(0); - - // get response and request transition - InputSignalTransition requestTransition = requestTransitionPnObject.asInputSignalTransition(); - InputSignalTransition responseTransition = Objects.requireNonNull(getResponseTransition(petriNet, requestTransition)).asInputSignalTransition(); - - // get elements of server subnet - Set<Place> serverPlaces = new HashSet<>(); - Set<Transition> serverInTransitions = new HashSet<>(); - Set<Transition> serverOutTransitions = new HashSet<>(); - Set<Transition> serverTransitions = new HashSet<>(); - Set<RefPlace> serverRefPlaces = new HashSet<>(); - Set<RefTransition> serverRefTransitions = new HashSet<>(); - Set<Arc> innerArcs = null; - Set<PnObject> serverObjectsWithoutArcs = null; - Set<PnObject> copiedObjects = new HashSet<>(); - - String serverSubnet = null; - for (Place p : requestTransition.outgoingPlaces()) { - serverSubnet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet(); - getObjectsBySubnet(petriNet, serverSubnet, serverPlaces, serverTransitions, serverRefPlaces, serverRefTransitions); - innerArcs = getSubnetArcs(petriNet, serverSubnet); - serverObjectsWithoutArcs = getObjectsBySubnet(petriNet, serverSubnet); - break; - } - - // create clones of the server - - // insert channel queue template - String queue_suffix = "serverInstance-" + serverInstanceCount; - OutputSignalPlace queueCapacityPlace = PrimitiveTemplates.getOutputSignalPlace(); - assert queueCapacityPlace != null; - queueCapacityPlace.setId(TemplateConstants.SERVICE_QUEUE_CAPACITY_PLACE + "-" + queue_suffix); - - PlaceInformation pi = new PlaceInformation(); - pi.setSubNet("channel"); - pi.setLocation("channel"); - pi.setType(PnmlConstants.PLACE_TYPE_DISCRETE); - queueCapacityPlace.setMutualPlaceInformation(pi); - queueCapacityPlace.getInitialMarking().setText(16); - Name qCapName = new Name(); - qCapName.setText(TemplateConstants.SERVICE_QUEUE_CAPACITY_PLACE + "-" + queue_suffix); - queueCapacityPlace.setName(qCapName); - topPage.addObject(queueCapacityPlace); - - int clientCount = 0; - - List<Tuple2<Node, Node>> externalElementsToReconnect = new ArrayList<>(); // true -> element is source - List<Arc> oldConnectorArcs = getDirectlyConnectedElements(petriNet, serverSubnet, externalElementsToReconnect); - - for (Place incomingPlace : requestTransition.incomingPlaces()) { - - // create clone for each client - Set<OutputSignalPlace> topicInputPlaces = new HashSet<>(); - - System.out.println("[FLATTER] Copying server net: " + serverSubnet); - Pair<OutputSignalPlace, OutputSignalPlace> ioPlacePair = copyServerNet(petriNet, serverPlaces, serverTransitions, topicInputPlaces, - serverInstanceCount + "-" + clientCount, serverSubnet, copiedObjects, externalElementsToReconnect); - - // new needed publisher nets (reason: publishers are potentially also cloned) - int topicInputPlaceCount = 0; - - for (OutputSignalPlace topicInputPlace : topicInputPlaces) { - - String suffix = "serverInstance-" + serverInstanceCount + "-clientCount-" + clientCount + "-topicInput-" + topicInputPlaceCount; - - int capacity = 0; - for (Arc a : topicInputPlace.getOutArcList()) { - for (Place p : a.getTarget().asTransitionNode().asTransition().incomingPlaces()) { - if (p.getId().contains(TemplateConstants.PUBLISHER_CAPACITY_PLACE)) { - capacity = p.getInitialMarking().getText(); - } - } - } - - PetriNet publisherPetriNet = TopicTemplates.getTopicPublisherPetriNet(suffix, capacity); - includeTemplateInstance(petriNet, publisherPetriNet, topicInputPlace.getStaticPlaceInformation().getSubNet(), topicInputPlace.getStaticPlaceInformation().getLocation()); - - // connect the publisher inputs - Arc inputArc = new Arc(); - Arc overFlowArc = new Arc(); - inputArc.setId("pub-inputArc-" + suffix); - overFlowArc.setId("pub-overFlowArc-" + suffix); - - inputArc.setSource(topicInputPlace); - inputArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_INPUT_TRANSITION + "-" + suffix)); - - overFlowArc.setSource(topicInputPlace); - overFlowArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_OVERFLOW_TRANSITION + "-" + suffix)); - - topPage.addObject(inputArc); - topPage.addObject(overFlowArc); - - topicInputPlaceCount++; - } - - petriNet.flushTreeCache(); - - // insert channel connection template - String channel_suffix = "serverInstance-" + serverInstanceCount + "-clientCount-" + clientCount; - PetriNet serviceChannelPetriNet = ServiceTemplates.getServiceConnectionTemplate(channel_suffix); - includeTemplateInstance(petriNet, serviceChannelPetriNet, "channel", "channel"); - - // link the template instance to the net via arcs - OutputSignalPlace inPlace = null; - - // is null if newly created (by cloning) by flatter - if (getPlaceByID(petriNet, incomingPlace.getId()) == null) { - - for(Place p : petriNet.allPlaces()){ - if (p.asOutputSignalPlace().getMutualPlaceInformation() != null) { - if (p.asOutputSignalPlace().getMutualPlaceInformation().getTraceInfo().equals(incomingPlace.getId())) { - - System.out.println("Reconnecting client to server: " + p.getId() + " --> " + TemplateConstants.SERVICE_CLIENT_INPUT_TRANSITION + "-" + channel_suffix); - createAndIncludeArc(topPage, "channel-client-input-arc-" + channel_suffix, p, - getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_INPUT_TRANSITION + "-" + channel_suffix)); - reconnectedClients.add(p.getId()); - inPlace = p.asOutputSignalPlace(); - break; - } - } - } - } else { - createAndIncludeArc(topPage, "channel-client-input-arc-" + channel_suffix, incomingPlace, - getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_INPUT_TRANSITION + "-" + channel_suffix)); - } - - // works currently only with one service client per subnet - if (getPlaceByID(petriNet, responseTransition.getOutArcs().get(clientCount).getTarget().getId()) == null) { - - for (Place p : petriNet.allPlaces()) { - if (p.asOutputSignalPlace().getMutualPlaceInformation() != null) { - if (p.asOutputSignalPlace().getMutualPlaceInformation().getSubNet().equals(inPlace.getMutualPlaceInformation().getSubNet()) - && !p.getId().equals(inPlace.getId())) { - - for (Arc a : responseTransition.getOutArcs()) { - - if (p.asOutputSignalPlace().getMutualPlaceInformation().getTraceInfo().equals(a.getTarget().getId())) { - System.out.println("Reconnecting server to client: " + TemplateConstants.SERVICE_CLIENT_OUTPUT_TRANSITION + "-" + channel_suffix + " --> " + p.getId()); - - createAndIncludeArc(topPage, "channel-client-output-arc-" + - channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_OUTPUT_TRANSITION + "-" + channel_suffix), p); - reconnectedClients.add(p.getId()); - break; - } - } - } - } - } - } else { - createAndIncludeArc(topPage, "channel-client-output-arc-" + channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_OUTPUT_TRANSITION + "-" + channel_suffix), - responseTransition.getOutArcs().get(clientCount).getTarget()); - } - - // service instance input transition -> service input place - createAndIncludeArc(topPage, "channel-server-input-arc-" + channel_suffix, - getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix), ioPlacePair._1); - - // service instance output place -> service instance output transition - createAndIncludeArc(topPage, "channel-server-output-arc-" + channel_suffix, ioPlacePair._2, - getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix)); - - createAndIncludeArc(topPage, "queue-to-server-place-arc-" + channel_suffix, getPlaceByID(petriNet, TemplateConstants.SERVICE_QUEUE_TO_SERVER_PLACE + "-" + channel_suffix), - getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix)); - createAndIncludeArc(topPage, "server-output-to-queue-cap-arc-" + channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix), - getPlaceByID(petriNet, TemplateConstants.SERVICE_QUEUE_CAPACITY_PLACE + "-" + queue_suffix)); - createAndIncludeArc(topPage, "client-connector-to-service-to-queue-arc-" + channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_CONNECTOR_TRANSITION + "-" + channel_suffix), - getPlaceByID(petriNet, TemplateConstants.SERVICE_TO_QUEUE_PLACE + "-" + channel_suffix)); - - // Arcs integrating the capacity place - createAndIncludeInhibitorArc(topPage, "server-cap-to-overflow-arc-" + channel_suffix, - queueCapacityPlace, getTransitionByID(petriNet, TemplateConstants.SERVICE_QUEUE_OVERFLOW_TRANSITION + "-" + channel_suffix)); - createAndIncludeArc(topPage, "server-to-queue-arc-" + channel_suffix, - queueCapacityPlace, getTransitionByID(petriNet, TemplateConstants.SERVICE_QUEUE_CONNECTOR_TRANSITION + "-" + channel_suffix)); - createAndIncludeArc(topPage, "serveroutput-to-capacity-arc-" + channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix), - queueCapacityPlace); - - serverOutTransitions.add(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix)); - serverInTransitions.add(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix)); - - // FeedbackPlace Integration - OutputSignalPlace serverFeedbackPlace = PrimitiveTemplates.getOutputSignalPlace(); - serverFeedbackPlace.setId(TemplateConstants.SERVICE_FEEDBACK_PLACE + "-" + channel_suffix); - Place capPlace = getPlaceByID(petriNet, TemplateConstants.SERVICE_QUEUE_CAPACITY_PLACE + "-" + queue_suffix); - assert capPlace != null; - serverFeedbackPlace.setToolspecificList(capPlace.getToolspecificList().treeCopy()); - serverFeedbackPlace.getName().setText(TemplateConstants.SERVICE_FEEDBACK_PLACE + "-" + channel_suffix); - serverFeedbackPlace.setNodeGraphics(capPlace.getNodeGraphics().treeCopy()); - serverFeedbackPlace.getInitialMarking().setText(1); - - Name sFeedbackPlaceName = new Name(); - sFeedbackPlaceName.setText(TemplateConstants.SERVICE_FEEDBACK_PLACE + "-" + channel_suffix); - serverFeedbackPlace.setName(sFeedbackPlaceName); - topPage.addObject(serverFeedbackPlace); - - createAndIncludeArc(topPage, "feedbackplace-to-inputtransition-arc-" + channel_suffix, serverFeedbackPlace, - getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix)); - createAndIncludeArc(topPage, "outputtransition-to-feedbackplace-arc-" + channel_suffix, - getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix), serverFeedbackPlace); - - // flush - petriNet.flushTreeCache(); - clientCount++; - } - - petriNet.flushTreeCache(); - - for (PnObject po : copiedObjects) { - po.removeSelf(); - } - - for (Arc a : innerArcs) { - a.removeSelf(); - } - - for( Arc oldArc : oldConnectorArcs){ - oldArc.removeSelf(); - } - - for (PnObject po : serverObjectsWithoutArcs) { - po.removeSelf(); - } - - petriNet.flushTreeCache(); - serverInstanceCount++; - - for (Arc a : requestTransition.getOutArcs()) { - // System.out.println("REMOVING ARC: " + a.getId()); - a.removeSelf(); - } - - for (Arc a : requestTransition.getInArcs()) { - // System.out.println("REMOVING ARC: " + a.getId()); - a.removeSelf(); - } - - for (Arc a : responseTransition.getOutArcs()) { - // System.out.println("REMOVING ARC: " + a.getId()); - a.removeSelf(); - } - - for (Arc a : responseTransition.getInArcs()) { - // System.out.println("REMOVING ARC: " + a.getId()); - a.removeSelf(); - } - - //System.out.println("REMOVING REQ: " + requestTransition.getId()); - requestTransition.removeSelf(); - //System.out.println("REMOVING RES: " + responseTransition.getId()); - responseTransition.removeSelf(); - - petriNet.flushTreeCache(); - - return petriNet; - } - - private static List<Arc> getDirectlyConnectedElements(PetriNet petriNet, String serverSubnet, List<Tuple2<Node, Node>> externalElementsToReconnect) { - - List<Arc> connectingArcs = new ArrayList<>(); - - for (Place p : petriNet.allPlaces()){ - - for(Arc a : p.getInArcList()){ - if(a.getSource().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet() - .equals(serverSubnet) && !p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(serverSubnet)){ - - String tType = a.getSource().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getType(); - if(!tType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST) && !tType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)){ - externalElementsToReconnect.add(new Tuple2<>(a.getSource(), p)); - connectingArcs.add(a); - break; - } - } - } - - for(Arc a : p.getOutArcList()){ - if(a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet() - .equals(serverSubnet) && !p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(serverSubnet)){ - - String tType = a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getType(); - if(!tType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST) && !tType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) { - externalElementsToReconnect.add(new Tuple2<>(p, a.getTarget())); - connectingArcs.add(a); - break; - } - } - } - } - - for (Transition t : petriNet.allTransitions()){ - - - if(!t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST) - && !t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) { - for (Arc a : t.getInArcList()) { - if (a.getSource().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet() - .equals(serverSubnet) && !t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(serverSubnet)) { - externalElementsToReconnect.add(new Tuple2<>(a.getSource(), t)); - connectingArcs.add(a); - break; - } - } - - for (Arc a : t.getOutArcList()) { - if (a.getTarget().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet() - .equals(serverSubnet) && !t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(serverSubnet)) { - externalElementsToReconnect.add(new Tuple2<>(t, a.getTarget())); - connectingArcs.add(a); - break; - } - } - } - } - - return connectingArcs; - } - - private static Pair<OutputSignalPlace, OutputSignalPlace> copyServerNet(PetriNet petriNet, Set<Place> serverPlaces, - Set<Transition> serverTransitions, Set<OutputSignalPlace> topicInputPlaces, - String suffix, String serverSubnet, Set<PnObject> copiedObjects, - List<Tuple2<Node, Node>> externalElementsToReconnect) { - - petriNet.flushTreeCache(); - - final String instanceId = "server-instance-" + UUID.randomUUID().toString(); - - Page topPage = petriNet.getPage(0); - OutputSignalPlace serverInPlace = null; - OutputSignalPlace serverOutPlace = null; - - copiedObjects.addAll(serverPlaces); - copiedObjects.addAll(serverTransitions); - - // Elements - for (Place p : serverPlaces) { - OutputSignalPlace copy = PrimitiveTemplates.getOutputSignalPlace(); - assert copy != null; - copy.setId(p.getId() + "-" + suffix); - Name copyName = new Name(); - copyName.setText(copy.getId()); - copy.setName(copyName); - - copy.setToolspecificList(p.getToolspecificList().treeCopy()); - copy.getName().setText(p.getName().getText() + "-" + suffix); - copy.setNodeGraphics(p.getNodeGraphics().treeCopy()); - - // copy initial marking of places - PTMarking m = new PTMarking(); - m.setText(p.getInitialMarking().getText()); - - PlaceInformation pi = new PlaceInformation(); - pi.setSubNet(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() + "-" + suffix); - pi.setLocation(p.asOutputSignalPlace().getStaticPlaceInformation().getLocation()); - pi.setInstance(instanceId); - pi.setType(p.asOutputSignalPlace().getStaticPlaceInformation().getType()); - pi.setTraceInfo(p.getId()); - - copy.setMutualPlaceInformation(pi); - - topPage.addObject(copy); - - for (Arc a : p.getOutArcList()) { - if (!a.getTarget().getSubnet().equals(serverSubnet)) { - - if (!a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE) - && !a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getLocation().equals("channel")) { - logger.error("Found topic input place which needs to be re-flatted: " + copy.getId()); - topicInputPlaces.add(petriNet.getPlaceFromPlaceNode(copy.asPlaceNode()).asOutputSignalPlace()); - } - } - - if (petriNet.getTransitionFromTransitionNode(a.getTarget().asTransitionNode()). - asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) { - serverOutPlace = copy.asOutputSignalPlace(); - } - } - - for (Arc a : p.getInArcList()) { - if (petriNet.getTransitionFromTransitionNode(a.getSource().asTransitionNode()).asInputSignalTransition(). - getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)) { - serverInPlace = copy.asOutputSignalPlace(); - } - } - } - - petriNet.flushTreeCache(); - - for (Transition t : serverTransitions) { - InputSignalTransition copy = PrimitiveTemplates.getInputSignalTransition(); - assert copy != null; - copy.setId(t.getId() + "-" + suffix); - copy.getName().setText(t.getName().getText()); - copy.setMutualInputSignalBindingList(t.asInputSignalTransition().getMutualInputSignalBindingList().treeCopy()); - copy.getName().setText(t.getName().getText() + "-" + suffix); - copy.setToolspecificList(t.getToolspecificList().treeCopy()); - copy.setNodeGraphics(t.getNodeGraphics().treeCopy()); - - TransitionInformation ti = new DefaultTransitionInformation(); - ti.setType(t.asInputSignalTransition().getStaticTransitionInformation().getType()); - ti.setSubNet(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + "-" + suffix); - ti.setLocation(t.asInputSignalTransition().getStaticTransitionInformation().getLocation()); - ti.setInstance(instanceId); - ti.setTraceInfo(t.getId()); - - copy.setMutualTransitionInformation(ti); - - topPage.addObject(copy); - - for(Tuple2<Node, Node> tuple : externalElementsToReconnect){ - - //System.out.println("--1: " + tuple.get_1().getId() + ", 2: " + tuple.get_2().getId() + " ,t: " + t.getId()); - if(t.getId().equals(tuple.get_1().getId())){ - createAndIncludeArc(topPage, "ext-" + copy.getId() + "-to-" + tuple.get_2().getId(), copy, tuple.get_2()); - } - if(t.getId().equals(tuple.get_2().getId())){ - createAndIncludeArc(topPage, "ext-" + tuple.get_1().getId() + "-to-" + copy.getId(), tuple.get_1(), copy); - } - } - } - - petriNet.flushTreeCache(); - - // we removed refs in step one, so no need to copy them - - // Arcs - for (Arc a : getInnerSubnetArcs(petriNet, serverSubnet)) { - - Arc newArc = a.treeCopy(); - - String sourceId = a.getSource().getId() + "-" + suffix; - newArc.setSource((Node) getPnObjectByID(petriNet, sourceId)); - String targetId = a.getTarget().getId() + "-" + suffix; - newArc.setTarget((Node) getPnObjectByID(petriNet, targetId)); - newArc.setId(sourceId + "-to-" + targetId); - - topPage.addObject(newArc); - copiedObjects.add(a); - } - - petriNet.flushTreeCache(); - - return new Pair<>(serverInPlace, serverOutPlace); - } - private static Set<Arc> getInnerSubnetArcs(PetriNet petriNet, String subnet) { Set<Arc> arcs = new HashSet<>(); @@ -758,13 +21,13 @@ public class ChannelFlatter extends Flatter { if (a.getTarget().isTransitionNode() && a.getSource().isPlaceNode()) { - if (a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(subnet) && - a.getSource().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) { + if (a.getTarget().asTransitionNode().asTransition().asDinerosTransition().getStaticTransitionInformation().getSubNet().equals(subnet) && + a.getSource().asPlaceNode().asPlace().asDinerosPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) { arcs.add(a); } } else { - if (a.getSource().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(subnet) && - a.getTarget().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) { + if (a.getSource().asTransitionNode().asTransition().asDinerosTransition().getStaticTransitionInformation().getSubNet().equals(subnet) && + a.getTarget().asPlaceNode().asPlace().asDinerosPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) { arcs.add(a); } } @@ -791,47 +54,32 @@ public class ChannelFlatter extends Flatter { private static String getArcTargetSubnet(Arc arc) { if (arc.getTarget().isTransitionNode()) { - return arc.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet(); + return arc.getTarget().asTransitionNode().asTransition().asDinerosTransition().getStaticTransitionInformation().getSubNet(); } else { - return arc.getTarget().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet(); + return arc.getTarget().asPlaceNode().asPlace().asDinerosPlace().getStaticPlaceInformation().getSubNet(); } } private static String getArcSourceSubnet(Arc arc) { if (arc.getSource().isTransitionNode()) { - return arc.getSource().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet(); + return arc.getSource().asTransitionNode().asTransition().asDinerosTransition().getStaticTransitionInformation().getSubNet(); } else { - return arc.getSource().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet(); + return arc.getSource().asPlaceNode().asPlace().asDinerosPlace().getStaticPlaceInformation().getSubNet(); } } - private static Transition getResponseTransition(PetriNet petriNet, Transition requestTransition) { - - for (Transition t : petriNet.allTransitions()) { - if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation() - && t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) { - if(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() - .equals(requestTransition.asInputSignalTransition().getStaticTransitionInformation().getSubNet())){ - return t; - } - } - } - - return null; - } - private static void getObjectsBySubnet(PetriNet petriNet, String subnet, Set<Place> serverPlaces, Set<Transition> serverTransitions, Set<RefPlace> serverRefPlaces, Set<RefTransition> serverRefTransitions) { for (Transition t : petriNet.allTransitions()) { - if (t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(subnet)) { + if (t.asDinerosTransition().getStaticTransitionInformation().getSubNet().equals(subnet)) { serverTransitions.add(t); } } for (Place p : petriNet.allPlaces()) { - if (p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) { + if (p.asDinerosPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) { serverPlaces.add(p); } } @@ -854,13 +102,13 @@ public class ChannelFlatter extends Flatter { Set<PnObject> pnObjects = new HashSet<>(); for (Transition t : petriNet.allTransitions()) { - if (t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(subnet)) { + if (t.asDinerosTransition().getStaticTransitionInformation().getSubNet().equals(subnet)) { pnObjects.add(t); } } for (Place p : petriNet.allPlaces()) { - if (p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) { + if (p.asDinerosPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) { pnObjects.add(p); } } diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/Flatter.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/Flatter.java index 5b18bc4658c12bdb8a4675132e37501a6fdef900..1f97368f2006c3569af01104a8bd5de72b95b5fa 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/Flatter.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/Flatter.java @@ -35,7 +35,7 @@ public abstract class Flatter { return a; } - protected static void includeTemplateInstance(PetriNet petriNet, PetriNet templateInstance, String subnet, String location) { + /* protected static void includeTemplateInstance(PetriNet petriNet, PetriNet templateInstance, String subnet, String location) { // after tina-flat we do only have on page Page topPage = petriNet.getPage(0); @@ -85,7 +85,7 @@ public abstract class Flatter { } petriNet.flushTreeCache(); - } + }*/ protected static Place getPlaceByID(PetriNet petriNet, String Id) { diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/SignalFlatter.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/SignalFlatter.java index 4fc260e1d65c9e7addac571d944d95190a2651c6..a6345ae7310bf55aceb09ee04b80f3efb7916eb0 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/SignalFlatter.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/SignalFlatter.java @@ -9,7 +9,7 @@ import java.util.*; public class SignalFlatter extends Flatter{ - public static PetriNet flatSignals(PetriNet petriNet) { + /*public static PetriNet flatSignals(PetriNet petriNet) { Page topPage = petriNet.getPage(0); @@ -245,5 +245,5 @@ public class SignalFlatter extends Flatter{ iOsp.setId(TemplateConstants.INPUT_SIGNAL_PLACE_INACTIVE + "-" + signalId + "-" + count); aOsp.getName().setText(TemplateConstants.INPUT_SIGNAL_PLACE_ACTIVE + "-" + signalId + "-" + count); iOsp.getName().setText(TemplateConstants.INPUT_SIGNAL_PLACE_INACTIVE + "-" + signalId + "-" + count); - } + }*/ } diff --git a/src/main/resources/elements/OutputSignalPlace.pnml b/src/main/resources/elements/DinerosPlace.pnml similarity index 92% rename from src/main/resources/elements/OutputSignalPlace.pnml rename to src/main/resources/elements/DinerosPlace.pnml index fad5346fee469c303d071cb8b3f06446d90d5c36..31985f25f730ee7bcdfe5ab2e84de73d64e68e1a 100644 --- a/src/main/resources/elements/OutputSignalPlace.pnml +++ b/src/main/resources/elements/DinerosPlace.pnml @@ -3,8 +3,8 @@ <name> <text>OutputSignalPlaceNet</text> </name> - <page id="OutputSignalPlacePage"> - <place id="OutputSignalPlace"> + <page id="DinerosPlacePage"> + <place id="DinerosPlace"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <location>none</location> <subnet>none</subnet> diff --git a/src/main/resources/elements/InputSignalTransition.pnml b/src/main/resources/elements/DinerosTransition.pnml similarity index 91% rename from src/main/resources/elements/InputSignalTransition.pnml rename to src/main/resources/elements/DinerosTransition.pnml index a94aa6357fc39220731bd5c0bf20164f8ec48496..02e0d36bd0abde969c83c679906f0a60cbe02ff6 100644 --- a/src/main/resources/elements/InputSignalTransition.pnml +++ b/src/main/resources/elements/DinerosTransition.pnml @@ -3,8 +3,8 @@ <name> <text>InputSignalTransitionNet</text> </name> - <page id="InputSignalTransitionPage"> - <transition id="InputSignalTransition"> + <page id="DinerosTransitionPage"> + <transition id="DinerosTransition"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <location>none</location> <subnet>none</subnet>