From a1d86068d189da9c65e0951fda8a6fa2d70c75f4 Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Fri, 23 Sep 2022 16:41:19 +0200 Subject: [PATCH] fixed service modelling --- .../tudresden/inf/st/pnml/flatter/Main.java | 9 +++-- .../flatter/template/TemplateConstants.java | 1 + .../flatter/transform/ChannelFlatter.java | 38 +++++++++++++++---- 3 files changed, 36 insertions(+), 12 deletions(-) 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 d43bd9b..17b1c03 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 feeff02..b1b6119 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 3fc9256..3aaee99 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++; -- GitLab