Skip to content
Snippets Groups Projects
Commit 30d93711 authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

rewriting of service instances

parent 948ee90f
Branches
No related tags found
No related merge requests found
Showing
with 115 additions and 841 deletions
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
aspect SignalRewrites {
}
\ No newline at end of file
aspect TopicRewrites {
}
\ No newline at end of file
......@@ -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.asInputSignalTransition().incomingPlaces()) {
for (Place p : t.asDinerosTransition().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());
}
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());
}
}
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 (ist != null && ist.getMutualInputSignalBindingList() != null) {
ist.getMutualInputSignalBindingList().forEach(inputSignalBinding -> System.out.println(" (" + t.getName().getText() + ") Signal: " + inputSignalBinding.getInputSignalID()));
}
}
// System.out.println("--------------- TOOL SPECIFIC ---------------");
if(withToolSpecifics) {
System.out.println("--------------- TOOL SPECIFIC ---------------");
/* for (Transition t : petriNet.allTransitions()) {
InputSignalTransition ist = t.asInputSignalTransition();
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());
}
}*/
}
}
}
}
\ No newline at end of file
......@@ -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();
}
}
......
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);
}
}
......
......@@ -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) {
......
......@@ -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);
}
}*/
}
......@@ -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>
......
......@@ -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>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment