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

reworked topic split, optimized grammar

parent fce52076
No related branches found
No related tags found
No related merge requests found
...@@ -37,6 +37,9 @@ aspect Navigation { ...@@ -37,6 +37,9 @@ aspect Navigation {
syn boolean TransitionInformation.isServiceTransitionInformation() = false; syn boolean TransitionInformation.isServiceTransitionInformation() = false;
eq ServiceTransitionInformation.isServiceTransitionInformation() = true; eq ServiceTransitionInformation.isServiceTransitionInformation() = true;
syn boolean TransitionInformation.isDefaultTransitionInformation() = false;
eq DefaultTransitionInformation.isDefaultTransitionInformation() = true;
syn TransitionNode Node.asTransitionNode() = null; syn TransitionNode Node.asTransitionNode() = null;
eq TransitionNode.asTransitionNode() = this; eq TransitionNode.asTransitionNode() = this;
...@@ -52,6 +55,9 @@ aspect Navigation { ...@@ -52,6 +55,9 @@ aspect Navigation {
syn ServiceTransitionInformation TransitionInformation.asServiceTransitionInformation() = null; syn ServiceTransitionInformation TransitionInformation.asServiceTransitionInformation() = null;
eq ServiceTransitionInformation.asServiceTransitionInformation() = this; eq ServiceTransitionInformation.asServiceTransitionInformation() = this;
syn DefaultTransitionInformation TransitionInformation.asDefaultTransitionInformation() = null;
eq DefaultTransitionInformation.asDefaultTransitionInformation() = this;
syn Place PlaceNode.place(); syn Place PlaceNode.place();
eq Place.place() = this; eq Place.place() = this;
eq RefPlace.place() = getRef().place(); eq RefPlace.place() = getRef().place();
......
...@@ -17,7 +17,7 @@ aspect PnDistribution { ...@@ -17,7 +17,7 @@ aspect PnDistribution {
return pInfo; return pInfo;
}*/ }*/
syn lazy PlaceInformation OutputSignalPlace.getStaticTransitionInformation() { syn lazy PlaceInformation OutputSignalPlace.getStaticPlaceInformation() {
if(this.getMutualPlaceInformation() == null){ if(this.getMutualPlaceInformation() == null){
PlaceInformation tInfo = de.tudresden.inf.st.pnml.ToolSpecificsParser.getPlaceInformationInformation(this.getToolspecificList()); PlaceInformation tInfo = de.tudresden.inf.st.pnml.ToolSpecificsParser.getPlaceInformationInformation(this.getToolspecificList());
......
InputSignalBinding : PnObject ::= <TransitionID:String> <InputSignalID:String> <InputSignalValue:int>; InputSignalBinding : PnObject ::= <TransitionID:String> <InputSignalID:String> <InputSignalValue:int>;
OutputSignalBinding : PnObject ::= <PlaceID:String> <OutputSignalID:String> /<OutputSignalValue:String>/ EqualityOM:EqualityOutputMapping* ThresholdOM:ThresholdOutputMapping* RangeOM:RangeOutputMapping*; OutputSignalBinding : PnObject ::= <PlaceID:String> <OutputSignalID:String> /<OutputSignalValue:String>/ EqualityOM:EqualityOutputMapping* ThresholdOM:ThresholdOutputMapping* RangeOM:RangeOutputMapping*;
TransitionInformation ::= <Location:String> <Type:String> <InputLimit:java.lang.Integer> <OutputLimit:java.lang.Integer> <SubNet:String> <Instance:String>; abstract TransitionInformation ::= <Location:String> <Type:String> <InputLimit:java.lang.Integer> <OutputLimit:java.lang.Integer> <SubNet:String> <Instance:String>;
TopicTransitionInformation : TransitionInformation ::= <Topic:String>; TopicTransitionInformation : TransitionInformation ::= <Topic:String>;
ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String>; ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String>;
DefaultTransitionInformation : TransitionInformation;
PlaceInformation ::= <Location:String> <Type:String> <SubNet:String> <Instance:String>; PlaceInformation ::= <Location:String> <Type:String> <SubNet:String> <Instance:String>;
InputSignalTransition : Transition ::= /StaticInputSignalBinding:InputSignalBinding*/ MutualInputSignalBinding:InputSignalBinding* /StaticTransitionInformation:TransitionInformation/ [MutualTransitionInformation:TransitionInformation]; InputSignalTransition : Transition ::= /StaticInputSignalBinding:InputSignalBinding*/ MutualInputSignalBinding:InputSignalBinding* /StaticTransitionInformation:TransitionInformation/ [MutualTransitionInformation:TransitionInformation];
......
package de.tudresden.inf.st.copy;
import de.tudresden.inf.st.pnml.jastadd.model.DefaultTransitionInformation;
import de.tudresden.inf.st.pnml.jastadd.model.InputSignalBinding;
import de.tudresden.inf.st.pnml.jastadd.model.InputSignalTransition;
import de.tudresden.inf.st.pnml.jastadd.model.TransitionInformation;
public class CopyPrimitiveElements {
public static InputSignalTransition copyInputSignalTransition(InputSignalTransition ist, String idPrefix, String instance){
InputSignalTransition istCopy = new InputSignalTransition();
istCopy.setId(idPrefix + ist.getId());
for(InputSignalBinding isb : ist.getStaticInputSignalBindingList()){
istCopy.addMutualInputSignalBinding(copyInputputSignalBinding(isb, idPrefix));
}
istCopy.setMutualTransitionInformation(copyDefaultTransitionInformation(ist.getStaticTransitionInformation(), idPrefix, instance));
return istCopy;
}
public static InputSignalBinding copyInputputSignalBinding(InputSignalBinding isb, String idPrefix){
InputSignalBinding isbCopy = new InputSignalBinding();
isbCopy.setId(idPrefix + isb.getId());
isbCopy.setInputSignalID(isb.getInputSignalID());
isbCopy.setTransitionID(isb.getTransitionID());
isbCopy.setInputSignalValue(isb.getInputSignalValue());
return isbCopy;
}
public static TransitionInformation copyDefaultTransitionInformation (TransitionInformation ti, String idPrefix, String instance){
DefaultTransitionInformation tiCopy = new DefaultTransitionInformation();
tiCopy.setInstance(instance);
tiCopy.setSubNet(ti.getSubNet());
tiCopy.setType(ti.getType());
tiCopy.setLocation(tiCopy.getLocation());
tiCopy.setOutputLimit(ti.getOutputLimit());
tiCopy.setInputLimit(ti.getInputLimit());
return tiCopy;
}
}
package de.tudresden.inf.st.data;
public class Tuple3<K, V, L> {
private K _1;
private V _2;
private L _3;
public Tuple3(K _1, V _2, L _3){
this._1 = _1;
this._2 = _2;
this._3 = _3;
}
public K get_1() {
return _1;
}
public V get_2() {
return _2;
}
public L get_3() {
return _3;
}
}
\ No newline at end of file
...@@ -24,7 +24,7 @@ public class Main { ...@@ -24,7 +24,7 @@ public class Main {
return; return;
}*/ }*/
List<PetriNet> petriNets = PnmlParser.parsePnml("src/main/nets/serviceTestNet1.pnml"); List<PetriNet> petriNets = PnmlParser.parsePnml("src/main/nets/testNet5.pnml");
//List<PetriNet> petriNets = PnmlParser.parsePnml(inputPath); //List<PetriNet> petriNets = PnmlParser.parsePnml(inputPath);
List<List<PetriNet>> disconnectedPetriNets = new ArrayList<>(); List<List<PetriNet>> disconnectedPetriNets = new ArrayList<>();
......
...@@ -210,7 +210,9 @@ public class ToolSpecificsParser { ...@@ -210,7 +210,9 @@ public class ToolSpecificsParser {
topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos)); topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos));
topicTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); topicTransition.setSubNet(getTransitionSubnetInfo(toolInfos));
return topicTransition; return topicTransition;
}else{ }
if(getTransitionServiceNameFromToolSpecifics(toolInfos) != null){
ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation(); ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation();
serviceTransition.setInputLimit(getTransitionInputLimit(toolInfos)); serviceTransition.setInputLimit(getTransitionInputLimit(toolInfos));
serviceTransition.setOutputLimit(getTransitionOutputLimit(toolInfos)); serviceTransition.setOutputLimit(getTransitionOutputLimit(toolInfos));
...@@ -220,6 +222,15 @@ public class ToolSpecificsParser { ...@@ -220,6 +222,15 @@ public class ToolSpecificsParser {
serviceTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); serviceTransition.setSubNet(getTransitionSubnetInfo(toolInfos));
return serviceTransition; return serviceTransition;
} }
DefaultTransitionInformation transitionInformation = new DefaultTransitionInformation();
transitionInformation.setInputLimit(getTransitionInputLimit(toolInfos));
transitionInformation.setOutputLimit(getTransitionOutputLimit(toolInfos));
transitionInformation.setLocation(getLocationFromToolSpecifics(toolInfos));
transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos));
transitionInformation.setSubNet(getTransitionSubnetInfo(toolInfos));
return transitionInformation;
} }
public static PlaceInformation getPlaceInformationInformation(JastAddList<ToolInfo> toolInfos){ public static PlaceInformation getPlaceInformationInformation(JastAddList<ToolInfo> toolInfos){
......
...@@ -26,6 +26,8 @@ import java.util.HashSet; ...@@ -26,6 +26,8 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import static de.tudresden.inf.st.postprocessing.PostProcessingUtils.printNet;
public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
private static final Logger logger = LoggerFactory.getLogger(GlobalToLocalNetsPostProcessor.class); private static final Logger logger = LoggerFactory.getLogger(GlobalToLocalNetsPostProcessor.class);
...@@ -36,16 +38,15 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -36,16 +38,15 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
// init list of distributed nets // init list of distributed nets
List<PetriNet> pns = new ArrayList<>(); List<PetriNet> pns = new ArrayList<>();
// cut the service transitions
PetriNet serviceCuttedNet = cutServiceTransitions(petriNet);
// cut the topic transitions // cut the topic transitions
PetriNet cuttedNet = cutTopicTransitions(serviceCuttedNet); PetriNet topicCuttedNet = cutTopicTransitions(petriNet);
//logger.error("cuttedNet: --------------------------------------------"); // logger.error("topicCuttedNet: --------------------------------------------");
//printNet(cuttedNet); // printNet(topicCuttedNet);
Set<String> locations = getLocations(cuttedNet); // cut the service transitions
//logger.error("LOCATIONS: " + locations); // PetriNet serviceCuttedNet = cutServiceTransitions(topicCuttedNet);
Set<String> locations = getLocations(topicCuttedNet);
// serialize for deep copy // serialize for deep copy
String serializedNetPath = PnmlExporter.serializeToPnmlFile(petriNet, "-pre-split.pnml"); String serializedNetPath = PnmlExporter.serializeToPnmlFile(petriNet, "-pre-split.pnml");
...@@ -60,6 +61,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -60,6 +61,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
for (PetriNet pn : reParsedPetriNets) { for (PetriNet pn : reParsedPetriNets) {
// logger.info("----------------------------------------------------");
PetriNet separatedNet = createdSeparatedNetByLocation(pn, location); PetriNet separatedNet = createdSeparatedNetByLocation(pn, location);
// logger.error("SEPARATED NET"); // logger.error("SEPARATED NET");
// printNet(separatedNet); // printNet(separatedNet);
...@@ -80,8 +82,8 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -80,8 +82,8 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
Set<String> allLocations = new HashSet<>(); Set<String> allLocations = new HashSet<>();
for (Place place : petriNet.allPlaces()) { for (Place place : petriNet.allPlaces()) {
if (place.asOutputSignalPlace().getStaticTransitionInformation().getSubNet() != null) { if (place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() != null) {
allLocations.add(place.asOutputSignalPlace().getStaticTransitionInformation().getSubNet()); allLocations.add(place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet());
} else { } else {
logger.error("Found place without location."); logger.error("Found place without location.");
} }
...@@ -111,14 +113,14 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -111,14 +113,14 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
String outSubNet = null; String outSubNet = null;
for (Place p : channelIst.incomingPlaces()) { for (Place p : channelIst.incomingPlaces()) {
inLocation = p.asOutputSignalPlace().getStaticTransitionInformation().getLocation(); inLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
inSubNet = p.asOutputSignalPlace().getStaticTransitionInformation().getSubNet(); inSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
break; break;
} }
for (Place p : channelIst.outgoingPlaces()) { for (Place p : channelIst.outgoingPlaces()) {
outLocation = p.asOutputSignalPlace().getStaticTransitionInformation().getLocation(); outLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
outSubNet = p.asOutputSignalPlace().getStaticTransitionInformation().getSubNet(); outSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
break; break;
} }
...@@ -132,8 +134,6 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -132,8 +134,6 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
private static PetriNet cutTopicTransitions(PetriNet petriNet) { private static PetriNet cutTopicTransitions(PetriNet petriNet) {
//printNet(petriNet);
Set<Transition> transitionsToAdd = new HashSet<>(); Set<Transition> transitionsToAdd = new HashSet<>();
Set<Transition> transitionsToRemove = new HashSet<>(); Set<Transition> transitionsToRemove = new HashSet<>();
...@@ -145,59 +145,46 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -145,59 +145,46 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
logger.info("Found topic transition: " + transition.getId()); logger.info("Found topic transition: " + transition.getId());
// TODO: handle refs? // TODO: handle refs & multi pages?
// Add to the deprecated transitions
transitionsToRemove.add(transition); transitionsToRemove.add(transition);
// STEP 1: Get location/subnet of source/target - places // Create and integrate new publisher transitions
String inLocation = null; refactorPublisherSide(transitionsToAdd, transition, channelIst);
String outLocation = null;
String inSubNet = null;
String outSubNet = null;
for (Place p : channelIst.incomingPlaces()) { // Create and integrate new subscriber transitions
inLocation = p.asOutputSignalPlace().getStaticTransitionInformation().getLocation(); refactorSubscriberSide(transitionsToAdd, transition, channelIst);
inSubNet = p.asOutputSignalPlace().getStaticTransitionInformation().getSubNet(); }
break;
} }
for (Place p : channelIst.outgoingPlaces()) { // Remove "old transition"
outLocation = p.asOutputSignalPlace().getStaticTransitionInformation().getLocation(); for (Transition t : transitionsToRemove) {
outSubNet = p.asOutputSignalPlace().getStaticTransitionInformation().getSubNet(); t.removeSelf();
break;
} }
// STEP 1: Create new source and target Transition for (Transition t : transitionsToAdd) {
InputSignalTransition sourceIst = new InputSignalTransition(); petriNet.getPage(0).addObject(t);
sourceIst.setName(new Name().setText(channelIst.getName().getText() + "-source")); }
sourceIst.setId(channelIst.getId() + "-source");
TopicTransitionInformation tInfoSource = new TopicTransitionInformation(); //petriNet.flushAttrAndCollectionCache();
tInfoSource.setSubNet(inSubNet); petriNet.flushTreeCache();
tInfoSource.setLocation(inLocation);
tInfoSource.setTopic(channelIst.getStaticTransitionInformation().asTopicTransitionInformation().getTopic());
// attributized infos need to be written back to XML return petriNet;
JastAddList<ToolInfo> inputToolInfoJastAddList = new JastAddList<>(); }
if (channelIst.getStaticTransitionInformation().getInputLimit() >= 0) { private static void refactorSubscriberSide(Set<Transition> transitionsToAdd, Transition transition, InputSignalTransition channelIst) {
tInfoSource.setType(PnmlConstants.TRANSITION_TYPE_TOPIC_LIMITED_OUT); int subscriberCount = 0;
inputToolInfoJastAddList.add(buildToolSpecifics(PnmlConstants.TRANSITION_TYPE_TOPIC_LIMITED_OUT, inLocation, inSubNet, tInfoSource.getTopic(),
channelIst.getStaticTransitionInformation().getInputLimit(), channelIst.getStaticTransitionInformation().getOutputLimit(), channelIst.getStaticInputSignalBindingList()));
} else { for (Place p : channelIst.outgoingPlaces()) {
tInfoSource.setType(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_OUT);
inputToolInfoJastAddList.add(buildToolSpecifics(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_OUT, inLocation, inSubNet, tInfoSource.getTopic(),
channelIst.getStaticTransitionInformation().getInputLimit(), channelIst.getStaticTransitionInformation().getOutputLimit(), channelIst.getStaticInputSignalBindingList()));
}
sourceIst.setToolspecificList(inputToolInfoJastAddList); String outLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
sourceIst.setMutualTransitionInformation(tInfoSource); String outSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition targetIst = new InputSignalTransition(); InputSignalTransition subscriberIst = new InputSignalTransition();
targetIst.setName(new Name().setText(channelIst.getName().getText() + "-target")); subscriberIst.setName(new Name().setText(channelIst.getName().getText() + "-subscriber-" + subscriberCount));
targetIst.setId(channelIst.getId() + "-target"); subscriberIst.setId(channelIst.getId() + "-subscriber-" + subscriberCount);
TopicTransitionInformation tInfoTarget = new TopicTransitionInformation(); TopicTransitionInformation tInfoTarget = new TopicTransitionInformation();
tInfoTarget.setSubNet(outSubNet); tInfoTarget.setSubNet(outSubNet);
...@@ -217,10 +204,61 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -217,10 +204,61 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
channelIst.getStaticTransitionInformation().getInputLimit(), channelIst.getStaticTransitionInformation().getOutputLimit(), null)); channelIst.getStaticTransitionInformation().getInputLimit(), channelIst.getStaticTransitionInformation().getOutputLimit(), null));
} }
targetIst.setToolspecificList(outputToolInfoJastAddList); subscriberIst.setToolspecificList(outputToolInfoJastAddList);
targetIst.setMutualTransitionInformation(tInfoTarget); subscriberIst.setMutualTransitionInformation(tInfoTarget);
// Gel all outgoing arcs and connect them to new input transition
for(Arc arc : p.asOutputSignalPlace().getInArcList().toArray(new Arc[0])){
if(arc.getSource().getId().equals(transition.getId())){
arc.setSource(subscriberIst);
}
}
// Add new transitions to net
transitionsToAdd.add(subscriberIst);
subscriberCount++;
}
}
private static void refactorPublisherSide(Set<Transition> transitionsToAdd, Transition transition, InputSignalTransition channelIst) {
int publisherCount = 0;
// STEP 2: Reconnect Input Signals for (Place p : channelIst.incomingPlaces()) {
String inLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
String inSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition publisherIst = new InputSignalTransition();
publisherIst.setName(new Name().setText(channelIst.getName().getText() + "-publisher-" + publisherCount));
publisherIst.setId(channelIst.getId() + "-publisher-" + publisherCount);
TopicTransitionInformation tInfoSource = new TopicTransitionInformation();
tInfoSource.setSubNet(inSubNet);
tInfoSource.setLocation(inLocation);
tInfoSource.setTopic(channelIst.getStaticTransitionInformation().asTopicTransitionInformation().getTopic());
// attributized infos need to be written back to XML
JastAddList<ToolInfo> inputToolInfoJastAddList = new JastAddList<>();
if (channelIst.getStaticTransitionInformation().getInputLimit() >= 0) {
tInfoSource.setType(PnmlConstants.TRANSITION_TYPE_TOPIC_LIMITED_OUT);
inputToolInfoJastAddList.add(buildToolSpecifics(PnmlConstants.TRANSITION_TYPE_TOPIC_LIMITED_OUT, inLocation, inSubNet, tInfoSource.getTopic(),
channelIst.getStaticTransitionInformation().getInputLimit(), channelIst.getStaticTransitionInformation().getOutputLimit(), channelIst.getStaticInputSignalBindingList()));
} else {
tInfoSource.setType(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_OUT);
inputToolInfoJastAddList.add(buildToolSpecifics(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_OUT, inLocation, inSubNet, tInfoSource.getTopic(),
channelIst.getStaticTransitionInformation().getInputLimit(), channelIst.getStaticTransitionInformation().getOutputLimit(), channelIst.getStaticInputSignalBindingList()));
}
publisherIst.setToolspecificList(inputToolInfoJastAddList);
publisherIst.setMutualTransitionInformation(tInfoSource);
// Reconnect Input Signals
for (InputSignalBinding isb : channelIst.getStaticInputSignalBindingList()) { for (InputSignalBinding isb : channelIst.getStaticInputSignalBindingList()) {
InputSignalBinding newIsb = new InputSignalBinding(); InputSignalBinding newIsb = new InputSignalBinding();
...@@ -229,41 +267,22 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -229,41 +267,22 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
newIsb.setId(isb.getId()); newIsb.setId(isb.getId());
newIsb.setInputSignalID(isb.getInputSignalID()); newIsb.setInputSignalID(isb.getInputSignalID());
sourceIst.addMutualInputSignalBinding(newIsb); publisherIst.addMutualInputSignalBinding(newIsb);
} }
// STEP 3: Get all incoming arcs and connect them to new output transition // Get all incoming arcs and connect them to new output transition
for (Arc arc : channelIst.getInArcList().toArray(new Arc[0])) { for(Arc arc : p.asOutputSignalPlace().getOutArcList().toArray(new Arc[0])){
arc.setTarget(sourceIst);
}
// STEP 4: Gel all outgoing arcs and connect them to new input transition
for (Arc arc : channelIst.getOutArcList().toArray(new Arc[0])) {
arc.setSource(targetIst);
}
// STEP 5: Add new transitions to net if(arc.getTarget().getId().equals(transition.getId())){
transitionsToAdd.add(sourceIst); arc.setTarget(publisherIst);
transitionsToAdd.add(targetIst);
} }
} }
// STEP 6: Remove "old transition" // Add new transitions to net
for (Transition t : transitionsToRemove) { transitionsToAdd.add(publisherIst);
t.removeSelf();
}
//petriNet.allTransitions().removeAll(transitionsToRemove); publisherCount++;
for (Transition t : transitionsToAdd) {
petriNet.getPage(0).addObject(t);
} }
//petriNet.flushAttrAndCollectionCache();
petriNet.flushTreeCache();
//printNet(petriNet);
return petriNet;
} }
private static PetriNet createdSeparatedNetByLocation(PetriNet petriNet, String location) { private static PetriNet createdSeparatedNetByLocation(PetriNet petriNet, String location) {
...@@ -273,7 +292,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -273,7 +292,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
Set<String> removePlaceIds = new HashSet<>(); Set<String> removePlaceIds = new HashSet<>();
for (Place place : separatedNet.allPlaces()) { for (Place place : separatedNet.allPlaces()) {
if (!place.asOutputSignalPlace().getStaticTransitionInformation().getSubNet().equals(location)) { if (!place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(location)) {
removePlaceIds.add(place.getId()); removePlaceIds.add(place.getId());
} }
} }
...@@ -293,14 +312,14 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -293,14 +312,14 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
} }
for (Place place : separatedNet.allPlaces()) { for (Place place : separatedNet.allPlaces()) {
if (!place.asOutputSignalPlace().getStaticTransitionInformation().getSubNet().equals(location)) { if (!place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(location)) {
logger.info("removing place " + place.getId() + " from net"); logger.info("removing place " + place.getId() + " from net");
place.removeSelf(); place.removeSelf();
} }
} }
for (Transition transition : separatedNet.allTransitions()) { for (Transition transition : separatedNet.allTransitions()) {
if (!transition.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic().equals(location)) { if (!transition.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getSubNet().equals(location)) {
logger.info("removing transition " + transition.getId() + " from net"); logger.info("removing transition " + transition.getId() + " from net");
transition.removeSelf(); transition.removeSelf();
} }
......
package de.tudresden.inf.st.postprocessing; package de.tudresden.inf.st.postprocessing;
import de.tudresden.inf.st.constants.PnmlConstants; import de.tudresden.inf.st.constants.PnmlConstants;
import de.tudresden.inf.st.copy.CopyPrimitiveElements;
import de.tudresden.inf.st.data.Tuple3;
import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -48,7 +50,7 @@ public class PostProcessingUtils { ...@@ -48,7 +50,7 @@ public class PostProcessingUtils {
private static Set<Place> getPlacesBySubnet(String subNet, PetriNet petriNet) { private static Set<Place> getPlacesBySubnet(String subNet, PetriNet petriNet) {
return petriNet.allPlaces().stream().filter(t -> t.asOutputSignalPlace() return petriNet.allPlaces().stream().filter(t -> t.asOutputSignalPlace()
.getStaticTransitionInformation().getSubNet().equals(subNet)).collect(Collectors.toSet()); .getStaticPlaceInformation().getSubNet().equals(subNet)).collect(Collectors.toSet());
} }
private static Set<Arc> getInternalArcsBySubnet(String subNet, PetriNet petriNet) { private static Set<Arc> getInternalArcsBySubnet(String subNet, PetriNet petriNet) {
...@@ -88,45 +90,93 @@ public class PostProcessingUtils { ...@@ -88,45 +90,93 @@ public class PostProcessingUtils {
// NET MANIPULATION /////////// // NET MANIPULATION ///////////
/////////////////////////////// ///////////////////////////////
/**
* Updates the mutual instance ids, and (if not already existing creates a nre mutual information, based on the static one.
* @param petriNet
* @param subNet
* @param instanceId
*/
public static void setSubNetInstanceId(PetriNet petriNet, String subNet, String instanceId) { public static void setSubNetInstanceId(PetriNet petriNet, String subNet, String instanceId) {
Set<Transition> subNetTransitions = getTransitionsBySubnet(subNet, petriNet); Set<Transition> subNetTransitions = getTransitionsBySubnet(subNet, petriNet);
Set<Place> subNetPlaces = getPlacesBySubnet(subNet, petriNet); Set<Place> subNetPlaces = getPlacesBySubnet(subNet, petriNet);
// update transition instance ids
subNetTransitions.forEach(t -> { subNetTransitions.forEach(t -> {
if (t.asInputSignalTransition().getMutualTransitionInformation() == null) { if (t.asInputSignalTransition().getMutualTransitionInformation() == null) {
// todo
if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()) {
ServiceTransitionInformation oldSti = t.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation();
t.asInputSignalTransition().setMutualTransitionInformation(new ServiceTransitionInformation(oldSti.getLocation(), oldSti.getType(),
oldSti.getInputLimit(), oldSti.getOutputLimit(), oldSti.getSubNet(), instanceId, oldSti.getServiceName()));
} else if (t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()) {
TopicTransitionInformation oldTti = t.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation();
t.asInputSignalTransition().setMutualTransitionInformation(new TopicTransitionInformation(oldTti.getLocation(), oldTti.getType(),
oldTti.getInputLimit(), oldTti.getOutputLimit(), oldTti.getSubNet(), instanceId, oldTti.getTopic()));
} else if (t.asInputSignalTransition().getStaticTransitionInformation().isDefaultTransitionInformation()) {
TransitionInformation oldTi = t.asInputSignalTransition().getStaticTransitionInformation();
t.asInputSignalTransition().setMutualTransitionInformation(new DefaultTransitionInformation(oldTi.getLocation(), oldTi.getType(),
oldTi.getInputLimit(), oldTi.getOutputLimit(), oldTi.getSubNet(), instanceId));
}
} else {
t.asInputSignalTransition().getMutualTransitionInformation().setInstance(instanceId); t.asInputSignalTransition().getMutualTransitionInformation().setInstance(instanceId);
} }
}); });
//subNetPlaces.forEach(p -> p.asOutputSignalPlace());
} // update place instance ids
subNetPlaces.forEach(p -> {
public static PetriNet copySubNet(PetriNet petriNet, String subNet, String instanceId){ if (p.asOutputSignalPlace().getMutualPlaceInformation() == null) {
Set<Transition> transitionsToAdd = new HashSet<>(); PlaceInformation oldPi = p.asOutputSignalPlace().getStaticPlaceInformation();
Set<Place> placesToRemove = new HashSet<>(); p.asOutputSignalPlace().setMutualPlaceInformation(new PlaceInformation(oldPi.getLocation(), oldPi.getType(), oldPi.getSubNet(), instanceId));
Set<Arc> arcsToRemove = new HashSet<>();
}else{
p.asOutputSignalPlace().getMutualPlaceInformation().setInstance(instanceId);
}
});
}
public static Tuple3<Set<Transition>, Set<Place>, Set<Arc>> copyServiceSubNet(PetriNet petriNet, String subNet, Page parentPage, String instanceId, String templateNetInstanceId) {
// new elements
Set<Transition> transitionsToAdd = new HashSet<>();
Set<Place> placesToAdd = new HashSet<>();
Set<Arc> arcsToAdd = new HashSet<>();
Set<Place> placesToRemove = new HashSet<>();
Set<Arc> arcsToRemove = new HashSet<>();
for (Transition transition : petriNet.allTransitions()) { for (Transition transition : petriNet.allTransitions()) {
InputSignalTransition channelIst = transition.asInputSignalTransition(); InputSignalTransition channelIst = transition.asInputSignalTransition();
// just process service transitions // just process "subnets" of service transitions
if (channelIst.getStaticTransitionInformation().isServiceTransitionInformation() if (channelIst.getStaticTransitionInformation().isServiceTransitionInformation()
&& channelIst.getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)) { && channelIst.getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)) {
int numInArcs = channelIst.getInArcList().toArray(new Arc[0]).length; int numInArcs = channelIst.getInArcList().toArray(new Arc[0]).length;
String iterSubnet = channelIst.getStaticTransitionInformation().getSubNet();
// create deep copies of the transitions
for(Transition t: petriNet.allTransitions()){
if(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(iterSubnet)) {
transitionsToAdd.add(CopyPrimitiveElements.copyInputSignalTransition(t.asInputSignalTransition(), instanceId + "-", instanceId));
}
}
} }
} }
return null;
return new Tuple3<>(transitionsToAdd, placesToAdd, arcsToAdd);
} }
/////////////////////////////// ///////////////////////////////
...@@ -139,7 +189,7 @@ public class PostProcessingUtils { ...@@ -139,7 +189,7 @@ public class PostProcessingUtils {
logger.info("----------------- PLACES ----------------"); logger.info("----------------- PLACES ----------------");
for (Place p : petriNet.allPlaces()) { for (Place p : petriNet.allPlaces()) {
logger.info("Place " + p.asOutputSignalPlace().getName().getText() + " -- " + p.asOutputSignalPlace().getStaticTransitionInformation().getSubNet()); logger.info("Place " + p.asOutputSignalPlace().getName().getText() + " -- " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet());
} }
logger.info("-------------- TRANSITIONS --------------"); logger.info("-------------- TRANSITIONS --------------");
...@@ -156,12 +206,12 @@ public class PostProcessingUtils { ...@@ -156,12 +206,12 @@ public class PostProcessingUtils {
for (Place p : t.asInputSignalTransition().incomingPlaces()) { for (Place p : t.asInputSignalTransition().incomingPlaces()) {
logger.info("------ Inputplace: " + p.getName().getText() + " subnet: " + p.asOutputSignalPlace().getStaticTransitionInformation().getSubNet() + " ---------"); logger.info("------ Inputplace: " + p.getName().getText() + " subnet: " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() + " ---------");
} }
for (Place p : t.asInputSignalTransition().outgoingPlaces()) { for (Place p : t.asInputSignalTransition().outgoingPlaces()) {
logger.info("------ Outputplace: " + p.getName().getText() + " subnet: " + p.asOutputSignalPlace().getStaticTransitionInformation().getSubNet() + " ---------"); logger.info("------ Outputplace: " + p.getName().getText() + " subnet: " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() + " ---------");
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment