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 d43bd9bdcd31ef320ec26305cf92f607b127ace8..17b1c03fa73331ffe95bb72f6faecd69afca4227 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 @@ -33,8 +33,8 @@ public class Main { // parse the global not flatted petri net // pnmlPath = "../pnml-relast-nets/src/main/resources/signalFlatteningTestNets/inputsignal-simple-3.pnml"; - //pnmlPath = "../pnml-relast-nets/src/main/resources/serviceTestNets/structureTestNets/service-structure-correct.pnml"; - //configPath = "src/main/config/config.json"; + // String pnmlPath = "../pnml-relast-nets/src/main/resources/serviceTestNets/structureTestNets/service-structure-correct.pnml"; + // String configPath = "src/main/config/config.json"; PetriNet petriNet = PnmlParser.parsePnml(pnmlPath).get(0); // read config for analyzer from file @@ -64,12 +64,12 @@ public class Main { // flat service clients / servers to instance based semantics logger.error("[FLATTER] Breaking down service channels."); PetriNet serviceFlattedPetriNet = ChannelFlatter.flatServiceChannels(topicFlattedPetriNet); - printNet(serviceFlattedPetriNet); + // printNet(serviceFlattedPetriNet); // flat input signals logger.error("[FLATTER] Breaking down signals."); PetriNet signalFlattedPetriNet = ChannelFlatter.flatSignals(serviceFlattedPetriNet); - // printNet(signalFlattedPetriNet); + printNet(signalFlattedPetriNet); // export flatted net to pnml logger.error("[FLATTER] Exporting to pnml."); @@ -171,6 +171,7 @@ public class Main { logger.error("----------------- ARCS -----------------"); for (Arc a : petriNet.allArcs()) { + logger.error("Arc: " + a.getId()); logger.error("Arc: " + a.getId() + " -- source: " + a.getSource().getId() + " -- target: " + a.getTarget().getId()); if(a.getNumToolspecific() > 0){ 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 feeff020b88f82102cff27b99db18ae98543ad65..b1b6119e2dce6ad83416f5266f6776628b9b44ea 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 @@ -60,4 +60,5 @@ public final class TemplateConstants { public static final String SERVICE_CLIENT_CONNECTOR_TRANSITION = "ServiceClientConnectorTransition"; public static final String SERVICE_QUEUE_OUTPUT_PLACE = "ServiceQueueOutputPlace"; public static final String SERVICE_QUEUE_CAPACITY_PLACE = "ServiceQueueCapacityPlace"; + public static final String SERVICE_FEEDBACK_PLACE = "ServiceFeedbackPlace"; } 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 3fc9256fa4a0aba494c9562b620e67fc2bbf3464..3aaee99b6ee1ac140294c292d360ea7414666185 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 @@ -84,7 +84,7 @@ public class ChannelFlatter { petriNet.flushTreeCache(); } else { attachANDSignalNetToBaseSignalNet(petriNet, entry.getValue().get(i), - getTransitionByID(petriNet, actToInActId).asInputSignalTransition(), + Objects.requireNonNull(getTransitionByID(petriNet, actToInActId)).asInputSignalTransition(), getTransitionByID(petriNet, inActToActId).asInputSignalTransition(), i, entry.getKey(), isActiveSignal); } @@ -648,44 +648,44 @@ public class ChannelFlatter { // link the template instance to the net via arcs Arc channelClientInputArc = new Arc(); - channelClientInputArc.setId("channel-client-input-arc" + channel_suffix); + channelClientInputArc.setId("channel-client-input-arc-" + channel_suffix); channelClientInputArc.setSource(incomingPlace); channelClientInputArc.setTarget(getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_INPUT_TRANSITION + "-" + channel_suffix)); topPage.addObject(channelClientInputArc); Arc channelClientOutputArc = new Arc(); - channelClientOutputArc.setId("channel-client-output-arc" + channel_suffix); + channelClientOutputArc.setId("channel-client-output-arc-" + channel_suffix); channelClientOutputArc.setSource(getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_OUTPUT_TRANSITION + "-" + channel_suffix)); channelClientOutputArc.setTarget(responseTransition.getOutArcs().get(clientCount).getTarget()); topPage.addObject(channelClientOutputArc); Arc channelServerInputArc = new Arc(); - channelServerInputArc.setId("channel-server-input-arc" + channel_suffix); + channelServerInputArc.setId("channel-server-input-arc-" + channel_suffix); channelServerInputArc.setSource(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix)); channelServerInputArc.setTarget(ioPlacePair._1); topPage.addObject(channelServerInputArc); Arc channelServerOutputArc = new Arc(); - channelServerOutputArc.setId("channel-server-output-arc" + channel_suffix); + channelServerOutputArc.setId("channel-server-output-arc-" + channel_suffix); channelServerOutputArc.setSource(ioPlacePair._2); channelServerOutputArc.setTarget(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix)); topPage.addObject(channelServerOutputArc); // new arcs in service v3 Arc serviceQueueInputArc = new Arc(); - serviceQueueInputArc.setId("channel-server-queue-input-arc" + channel_suffix); + serviceQueueInputArc.setId("channel-server-queue-input-arc-" + channel_suffix); serviceQueueInputArc.setSource(getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_CONNECTOR_TRANSITION + "-" + channel_suffix)); serviceQueueInputArc.setTarget(getPlaceByID(petriNet, TemplateConstants.SERVICE_QUEUE_INPUT_PLACE + "-" + queue_suffix)); topPage.addObject(serviceQueueInputArc); Arc queueToServerArc = new Arc(); - queueToServerArc.setId("queue-to-server-arc" + channel_suffix); + queueToServerArc.setId("queue-to-server-arc-" + channel_suffix); queueToServerArc.setSource(getPlaceByID(petriNet, TemplateConstants.SERVICE_QUEUE_OUTPUT_PLACE + "-" + queue_suffix)); queueToServerArc.setTarget(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix)); topPage.addObject(queueToServerArc); Arc serverToQueueArc = new Arc(); - serverToQueueArc.setId("server-to-queue-arc" + channel_suffix); + serverToQueueArc.setId("server-to-queue-arc-" + channel_suffix); serverToQueueArc.setSource(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix)); serverToQueueArc.setTarget(getPlaceByID(petriNet, TemplateConstants.SERVICE_QUEUE_CAPACITY_PLACE + "-" + queue_suffix)); topPage.addObject(serverToQueueArc); @@ -693,6 +693,28 @@ public class ChannelFlatter { 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); + serverFeedbackPlace.setToolspecificList(capPlace.getToolspecificList().treeCopy()); + serverFeedbackPlace.getName().setText(TemplateConstants.SERVICE_FEEDBACK_PLACE + "-" + channel_suffix); + serverFeedbackPlace.setNodeGraphics(capPlace.getNodeGraphics().treeCopy()); + serverFeedbackPlace.getInitialMarking().setText(1); + topPage.addObject(serverFeedbackPlace); + + Arc feedbackToInputArc = new Arc(); + feedbackToInputArc.setId("feedbackplace-to-inputtransition-arc-" + channel_suffix); + feedbackToInputArc.setSource(serverFeedbackPlace); + feedbackToInputArc.setTarget(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix)); + topPage.addObject(feedbackToInputArc); + + Arc outputToFeedbackArc = new Arc(); + outputToFeedbackArc.setId("outputtransition-to-feedbackplace-arc-" + channel_suffix); + outputToFeedbackArc.setSource(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix)); + outputToFeedbackArc.setTarget(serverFeedbackPlace); + topPage.addObject(outputToFeedbackArc); + // flush petriNet.flushTreeCache(); clientCount++;