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

removed now obsolete code, changed transformation, todo: export of...

removed now obsolete code, changed transformation, todo: export of pub/sub/service mapping in toolspecifics
parent 9b133c42
No related branches found
No related tags found
No related merge requests found
......@@ -27,9 +27,10 @@ public class Main {
List<PetriNet> petriNets = PnmlParser.parsePnml(inputPath);
List<List<PetriNet>> disconnectedPetriNets = new ArrayList<>();
GlobalToLocalNetsPostProcessor processor = new GlobalToLocalNetsPostProcessor();
for (PetriNet pn : petriNets) {
List<PetriNet> pnl = GlobalToLocalNetsPostProcessor.disconnectNets(pn);
List<PetriNet> pnl = processor.disconnectNets(pn);
disconnectedPetriNets.add(pnl);
}
......@@ -44,8 +45,8 @@ public class Main {
for (int i = 0; i < disconnectedPetriNets.size(); i++) {
for (int j = 0; j < disconnectedPetriNets.get(i).size(); j++) {
logger.info("Exporting splitted Petri net containing: ");
PostProcessingUtils.printNet(disconnectedPetriNets.get(i).get(j));
logger.info("Exporting split Petri net containing: ");
PostProcessingUtils.printNet(disconnectedPetriNets.get(i).get(j), true, false);
try {
PnmlExporter.serializeToPnmlFile(disconnectedPetriNets.get(i).get(j), "-pnml-net-" + i + "-" + j);
......
......@@ -3,7 +3,7 @@ package de.tudresden.inf.st.pnml.splitter.constants;
public final class SplitterPnmlConstants {
public static final String SPLITTER_TOOL_VERSION = "0.0.1";
public static final String SPLITTER_TOOL_NAME = "de.tudresden.inf.st.pnml.distributedPN";
public static final String SPLITTER_TOOL_NAME = "de.tudresden.inf.st.pnml.splitter";
public static final String TOOL_KEY = "tool";
public static final String VERSION_KEY = "version";
......
package de.tudresden.inf.st.pnml.splitter.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;
import de.tudresden.inf.st.pnml.jastadd.model.*;
public class CopyPrimitiveElements {
public static InputSignalTransition copyInputSignalTransition(InputSignalTransition ist, String idPrefix, String instance){
InputSignalTransition istCopy = new InputSignalTransition();
public static DinerosTransition copySignalTransition(DinerosTransition ist, String idPrefix){
DinerosTransition istCopy = new DinerosTransition();
istCopy.setId(idPrefix + ist.getId());
for(InputSignalBinding isb : ist.getStaticInputSignalBindingList()){
istCopy.addMutualInputSignalBinding(copyInputputSignalBinding(isb, idPrefix));
}
istCopy.setMutualTransitionInformation(copyDefaultTransitionInformation(ist.getStaticTransitionInformation(), idPrefix, instance));
istCopy.setMutableTransitionInformation(
copySignalTransitionInformation(ist.getStaticTransitionInformation()
.asSignalTransitionInformation()));
return istCopy;
}
public static InputSignalBinding copyInputputSignalBinding(InputSignalBinding isb, String idPrefix){
InputSignalBinding isbCopy = new InputSignalBinding();
public static TransitionInformation copySignalTransitionInformation (SignalTransitionInformation ti){
isbCopy.setId(idPrefix + isb.getId());
isbCopy.setInputSignalID(isb.getInputSignalID());
isbCopy.setTransitionID(isb.getTransitionID());
isbCopy.setInputSignalValue(isb.getInputSignalValue());
return isbCopy;
}
SignalTransitionInformation tiCopy = new SignalTransitionInformation();
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());
tiCopy.setNode(tiCopy.getNode());
tiCopy.setTraceInfo(ti.getTraceInfo());
tiCopy.setClause(copyClause(ti.getClause()));
return tiCopy;
}
private static InputSignalClause copyClause(InputSignalClause clause){
InputSignalClause copy = new InputSignalClause();
for(Disjunction d : clause.getDisjunctions()){
Disjunction dCopy = new Disjunction();
for(Literal l : d.getLiterals()){
if(l.isNegativeLiteral()){
NegativeLiteral nl = new NegativeLiteral();
nl.setName(l.getName());
dCopy.addLiteral(nl);
}else {
PositiveLiteral pl = new PositiveLiteral();
pl.setName(l.getName());
dCopy.addLiteral(pl);
}
}
copy.addDisjunction(dCopy);
}
return copy;
}
}
package de.tudresden.inf.st.pnml.splitter.postprocessing;
import de.tudresden.inf.st.pnml.splitter.constants.SplitterPnmlConstants;
import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import de.tudresden.inf.st.pnml.splitter.constants.SplitterPnmlConstants;
import fr.lip6.move.pnml.framework.utils.exception.InvalidIDException;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
......@@ -19,6 +18,7 @@ import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;
import java.util.*;
......@@ -26,25 +26,32 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
private static final Logger logger = LoggerFactory.getLogger(GlobalToLocalNetsPostProcessor.class);
public static List<PetriNet> disconnectNets(PetriNet petriNet) {
private final Map<String, List<DinerosPlace>> topicSubscriberPlaces = new HashMap<>();
private final Map<String, List<DinerosPlace>> topicPublisherPlaces = new HashMap<>();
private final Map<String, List<DinerosPlace>> serviceClientResPlaces = new HashMap<>();
private final Map<String, List<DinerosPlace>> serviceClientReqPlaces = new HashMap<>();
private final Map<String, DinerosPlace> serviceServerResPlaces = new HashMap<>();
private final Map<String, DinerosPlace> serviceServerReqPlaces = new HashMap<>();
public List<PetriNet> disconnectNets(PetriNet petriNet) {
try {
// init list of distributed nets
List<PetriNet> pns = new ArrayList<>();
// cut the topic transitions
PetriNet topicCuttedNet = cutTopicTransitions(petriNet);
PetriNet topicCutNet = cutTopicTransitions(petriNet);
// cut the service transitions
PetriNet serviceCuttedNet = cutServiceTransitions(topicCuttedNet);
PetriNet serviceCutNet = cutServiceTransitions(topicCutNet);
Set<String> locations = getLocations(serviceCuttedNet);
Set<String> locations = getNodes(serviceCutNet);
logger.info("##############################################################################################");
PostProcessingUtils.printNet(serviceCuttedNet);
PostProcessingUtils.printNet(serviceCutNet, true, false);
// serialize for deep copy
String serializedNetPath = PnmlExporter.serializeToPnmlFile(serviceCuttedNet, "-pre-split.pnml");
String serializedNetPath = PnmlExporter.serializeToPnmlFile(serviceCutNet, "-pre-split.pnml");
int netSuffix = 0;
......@@ -53,7 +60,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
List<PetriNet> reParsedPetriNets = PnmlParser.parsePnml(serializedNetPath);
for (PetriNet pn : reParsedPetriNets) {
PetriNet separatedNet = createdSeparatedNetByLocation(pn, location);
PetriNet separatedNet = createdSeparatedNetByNode(pn, location);
separatedNet.setId(separatedNet.getType() + "-" + netSuffix);
pns.add(separatedNet);
}
......@@ -67,66 +74,63 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
}
}
private static Set<String> getLocations(PetriNet petriNet) {
private static Set<String> getNodes(PetriNet petriNet) {
Set<String> allLocations = new HashSet<>();
for (Place place : petriNet.allPlaces()) {
if (place.asOutputSignalPlace().getStaticPlaceInformation().getLocation() != null) {
allLocations.add(place.asOutputSignalPlace().getStaticPlaceInformation().getLocation());
if (place.asDinerosPlace().getStaticPlaceInformation().getNode() != null) {
allLocations.add(place.asDinerosPlace().getStaticPlaceInformation().getNode());
} else {
logger.error("Found place without location.");
}
}
for (RefPlace rp : petriNet.allRefPlaces()) {
if (rp.getLocation() != null) {
allLocations.add(rp.getLocation());
if (rp.getNode() != null) {
allLocations.add(rp.getNode());
} else {
logger.error("Found reference place without location.");
logger.error("Found reference place without node.");
}
}
return allLocations;
}
private static PetriNet cutServiceTransitions(PetriNet petriNet) {
private PetriNet cutServiceTransitions(PetriNet petriNet) {
Set<Transition> transitionsToAdd = new HashSet<>();
Set<Transition> transitionsToRemove = new HashSet<>();
Map<String, Page> transitionToContainingPageMapping = new HashMap<>();
for (Transition transition : petriNet.allTransitions()) {
InputSignalTransition ist = transition.asInputSignalTransition();
int serviceTargetCount = 0;
int serviceSourceCount = 0;
Set<String> processedRequestTargetSubnets = new HashSet<>();
Set<String> processedResponseTargetSubnets = new HashSet<>();
Set<String> processedRequestSourceSubnets = new HashSet<>();
Set<String> processedResponseSourceSubnets = new HashSet<>();
DinerosTransition serviceTransition = transition.asDinerosTransition();
if (ist.getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)) {
if (serviceTransition.getStaticTransitionInformation().isServiceTransitionInformation()) {
logger.info("Processing service transition: " + transition.getId());
// target transitions
refactorServiceTransitionTargets(transitionsToAdd, transitionToContainingPageMapping, transition, ist, serviceTargetCount, processedRequestTargetSubnets, PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST_OUT, "-service-req-target-");
// source transitions
refactorServiceTransitionSources(transitionsToAdd, transitionToContainingPageMapping, transition, ist, serviceSourceCount, processedRequestSourceSubnets, PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST_IN, "-service-req-source-");
String serviceName = serviceTransition.getStaticTransitionInformation()
.asServiceTransitionInformation().getServiceName();
// Add to the deprecated transitions
transitionsToRemove.add(transition);
}
if (ist.getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) {
// target transitions
refactorServiceTransitionTargets(transitionsToAdd, transitionToContainingPageMapping, transition, ist, serviceTargetCount, processedResponseTargetSubnets, PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE_OUT, "-service-res-target-");
for (ServiceChannel sc : serviceTransition.getStaticTransitionInformation().
asServiceTransitionInformation().getClientChannelList()) {
// source transitions
refactorServiceTransitionSources(transitionsToAdd, transitionToContainingPageMapping, transition, ist, serviceSourceCount, processedResponseSourceSubnets, PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE_IN, "-service-res-source-");
if (!serviceClientResPlaces.containsKey(serviceName)) {
serviceClientResPlaces.put(serviceName, new ArrayList<>());
}
if (!serviceClientReqPlaces.containsKey(serviceName)) {
serviceClientReqPlaces.put(serviceName, new ArrayList<>());
}
serviceClientReqPlaces.get(serviceName).add(petriNet.getPlaceById(sc.getRequestPlaceId()).asDinerosPlace());
serviceClientResPlaces.get(serviceName).add(petriNet.getPlaceById(sc.getResponsePlaceId()).asDinerosPlace());
}
transitionsToRemove.add(transition);
serviceServerReqPlaces.put(serviceName, petriNet.getPlaceById(serviceTransition.
getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getRequestPlaceId()).asDinerosPlace());
serviceServerResPlaces.put(serviceName, petriNet.getPlaceById(serviceTransition.
getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getResponsePlaceId()).asDinerosPlace());
}
}
......@@ -135,274 +139,61 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
t.removeSelf();
}
for (Transition t : transitionsToAdd) {
transitionToContainingPageMapping.get(t.getId()).addObject(t);
}
petriNet.flushTreeCache();
return petriNet;
}
private static void refactorServiceTransitionSources(Set<Transition> transitionsToAdd, Map<String, Page> transitionToContainingPageMapping , Transition transition, InputSignalTransition ist, int serviceCount, Set<String> processedSubnets, String targetType, String sufix) {
for (Place p : ist.incomingPlaces()) {
if (!processedSubnets.contains(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) {
String inLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
String inSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition sourceIst = createRosTransition(ist, serviceCount, sufix);
ServiceTransitionInformation tInfoSource = copyServiceTransitionInformation(ist, inLocation, inSubNet);
// attributized infos need to be written back to XML
JastAddList<ToolInfo> inputToolInfoJastAddList = new JastAddList<>();
tInfoSource.setType(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_OUT);
inputToolInfoJastAddList.add(buildServiceToolSpecifics(targetType, inLocation, inSubNet, tInfoSource.getServiceName(), ist.getStaticInputSignalBindingList()));
sourceIst.setToolspecificList(inputToolInfoJastAddList);
sourceIst.setMutualTransitionInformation(tInfoSource);
reconnectSourceTransitionSignalsAndArcs(transition, ist, p, sourceIst);
// Add new transitions to net
transitionsToAdd.add(sourceIst);
transitionToContainingPageMapping.put(sourceIst.getId(), transition.ContainingPage());
serviceCount++;
processedSubnets.add(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet());
} else {
for (Transition t : transitionsToAdd) {
if (t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) {
// Get all incoming arcs and connect them to new output transition
for (Arc arc : p.asOutputSignalPlace().getOutArcList().toArray(new Arc[0])) {
arc.setTarget(t);
}
}
}
}
}
}
private static void refactorServiceTransitionTargets(Set<Transition> transitionsToAdd, Map<String, Page> transitionToContainingPageMapping , Transition transition, InputSignalTransition ist, int serviceCount, Set<String> processedSubnets, String targetType, String sufix) {
private PetriNet cutTopicTransitions(PetriNet petriNet) {
for (Place p : ist.outgoingPlaces()) {
if (!processedSubnets.contains(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) {
String outLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
String outSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition targetIst = createRosTransition(ist, serviceCount, sufix);
ServiceTransitionInformation tInfoTarget = copyServiceTransitionInformation(ist, outLocation, outSubNet);
// attribute infos need to be written back to XML
JastAddList<ToolInfo> outputToolInfoJastAddList = new JastAddList<>();
tInfoTarget.setType(targetType);
outputToolInfoJastAddList.add(buildServiceToolSpecifics(targetType, outLocation, outSubNet, tInfoTarget.getServiceName(), null));
targetIst.setToolspecificList(outputToolInfoJastAddList);
targetIst.setMutualTransitionInformation(tInfoTarget);
// Gel all outgoing arcs and connect them to new input transition
// for (Arc arc : p.asOutputSignalPlace().getInArcList().toArray(new Arc[0])) {
for(Arc arc : ist.asInputSignalTransition().getOutArcList().toArray(new Arc[0])){
if (arc.getSource().getId().equals(transition.getId())) {
arc.setSource(targetIst);
}
}
// Add new transitions to net
transitionsToAdd.add(targetIst);
transitionToContainingPageMapping.put(targetIst.getId(), transition.ContainingPage());
serviceCount++;
processedSubnets.add(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet());
} else {
for (Transition t : transitionsToAdd) {
if (t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) {
// Get all incoming arcs and connect them to new output transition
for (Arc arc : p.asOutputSignalPlace().getInArcList().toArray(new Arc[0])) {
arc.setSource(t);
}
}
}
}
}
}
private static PetriNet cutTopicTransitions(PetriNet petriNet) {
Set<Transition> transitionsToAdd = new HashSet<>();
Set<Transition> transitionsToRemove = new HashSet<>();
Map<String, Page> transitionToContainingPageMapping = new HashMap<>();
for (Transition transition : petriNet.allTransitions()) {
InputSignalTransition channelIst = transition.asInputSignalTransition();
DinerosTransition topicTransition = transition.asDinerosTransition();
if (channelIst.getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) {
if (topicTransition.getStaticTransitionInformation().isTopicTransitionInformation()) {
logger.info("Processing topic transition: " + transition.getId());
logger.info("Found topic transition: " + transition.getId());
// TODO: handle refs & multi pages?
String topic = topicTransition.getStaticTransitionInformation().asTopicTransitionInformation().getTopic();
// Add to the deprecated transitions
transitionsToRemove.add(transition);
// Create and integrate new publisher transitions
refactorPublisherSide(transitionsToAdd, transitionToContainingPageMapping, transition, channelIst);
for (SubscriberPort subscriberPort : topicTransition.getStaticTransitionInformation()
.asTopicTransitionInformation().getSubscriberPorts()) {
// Create and integrate new subscriber transitions
refactorSubscriberSide(transitionsToAdd, transitionToContainingPageMapping, transition, channelIst);
}
Place outPlace = petriNet.getPlaceById(subscriberPort.getPlaceId());
if (!topicSubscriberPlaces.containsKey(topic)) {
topicSubscriberPlaces.put(topic, new ArrayList<>());
}
// Remove "old transition"
for (Transition t : transitionsToRemove) {
t.removeSelf();
topicSubscriberPlaces.get(topic).add(outPlace.asDinerosPlace());
}
for (Transition t : transitionsToAdd) {
transitionToContainingPageMapping.get(t.getId()).addObject(t);
}
for (PublisherPort publisherPort : topicTransition.getStaticTransitionInformation()
.asTopicTransitionInformation().getPublisherPorts()) {
//petriNet.flushAttrAndCollectionCache();
petriNet.flushTreeCache();
return petriNet;
Place inPlace = petriNet.getPlaceById(publisherPort.getPlaceId());
if (!topicPublisherPlaces.containsKey(topic)) {
topicPublisherPlaces.put(topic, new ArrayList<>());
}
private static void refactorSubscriberSide(Set<Transition> transitionsToAdd, Map<String, Page> transitionToContainingPageMapping, Transition transition, InputSignalTransition channelIst) {
int subscriberCount = 0;
Set<String> processedSubnets = new HashSet<>();
for (Place p : channelIst.outgoingPlaces()) {
if (!processedSubnets.contains(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) {
String outLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
String outSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition subscriberIst = createRosTransition(channelIst, subscriberCount, "-subscriber-");
TopicTransitionInformation tInfoTarget = new TopicTransitionInformation();
tInfoTarget.setSubNet(outSubNet);
tInfoTarget.setLocation(outLocation);
tInfoTarget.setTopic(channelIst.getStaticTransitionInformation().asTopicTransitionInformation().getTopic());
// attributized infos need to be written back to XML
JastAddList<ToolInfo> outputToolInfoJastAddList = new JastAddList<>();
if (channelIst.getStaticTransitionInformation().getOutputLimit() >= 0) {
tInfoTarget.setType(PnmlConstants.TRANSITION_TYPE_TOPIC_LIMITED_IN);
outputToolInfoJastAddList.add(buildTopicToolSpecifics(PnmlConstants.TRANSITION_TYPE_TOPIC_LIMITED_IN, outLocation, outSubNet, tInfoTarget.getTopic(),
channelIst.getStaticTransitionInformation().getInputLimit(), channelIst.getStaticTransitionInformation().getOutputLimit(), null));
} else {
tInfoTarget.setType(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_IN);
outputToolInfoJastAddList.add(buildTopicToolSpecifics(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_IN, outLocation, outSubNet, tInfoTarget.getTopic(),
channelIst.getStaticTransitionInformation().getInputLimit(), channelIst.getStaticTransitionInformation().getOutputLimit(), null));
}
subscriberIst.setToolspecificList(outputToolInfoJastAddList);
subscriberIst.setMutualTransitionInformation(tInfoTarget);
// Gel all outgoing arcs and connect them to new input transition
// for (Arc arc : p.asOutputSignalPlace().getInArcList().toArray(new Arc[0])) {
for(Arc arc : channelIst.asInputSignalTransition().getOutArcList().toArray(new Arc[0])){
if (arc.getSource().getId().equals(transition.getId())) {
arc.setSource(subscriberIst);
}
}
// Add new transitions to net
transitionsToAdd.add(subscriberIst);
transitionToContainingPageMapping.put(subscriberIst.getId(), transition.ContainingPage());
subscriberCount++;
processedSubnets.add(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet());
} else {
for (Transition t : transitionsToAdd) {
if (t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) {
// Get all incoming arcs and connect them to new output transition
for (Arc arc : p.asOutputSignalPlace().getInArcList().toArray(new Arc[0])) {
arc.setSource(t);
}
topicPublisherPlaces.get(topic).add(inPlace.asDinerosPlace());
}
}
}
}
}
private static void refactorPublisherSide(Set<Transition> transitionsToAdd, Map<String, Page> transitionToContainingPageMapping, Transition transition, InputSignalTransition channelIst) {
int publisherCount = 0;
Set<String> processedSubnets = new HashSet<>();
for (Place p : channelIst.incomingPlaces()) {
if (!processedSubnets.contains(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) {
String inLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
String inSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition publisherIst = createRosTransition(channelIst, publisherCount, "-publisher-");
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(buildTopicToolSpecifics(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(buildTopicToolSpecifics(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_OUT, inLocation, inSubNet, tInfoSource.getTopic(),
channelIst.getStaticTransitionInformation().getInputLimit(), channelIst.getStaticTransitionInformation().getOutputLimit(), channelIst.getStaticInputSignalBindingList()));
// Remove "old transition"
for (Transition t : transitionsToRemove) {
t.removeSelf();
}
publisherIst.setToolspecificList(inputToolInfoJastAddList);
publisherIst.setMutualTransitionInformation(tInfoSource);
// Reconnect Input Signals
reconnectSourceTransitionSignalsAndArcs(transition, channelIst, p, publisherIst);
// Add new transitions to net
transitionsToAdd.add(publisherIst);
transitionToContainingPageMapping.put(publisherIst.getId(), transition.ContainingPage());
petriNet.flushTreeCache();
publisherCount++;
processedSubnets.add(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet());
} else {
for (Transition t : transitionsToAdd) {
if (t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) {
// Get all incoming arcs and connect them to new output transition
for (Arc arc : p.asOutputSignalPlace().getOutArcList().toArray(new Arc[0])) {
arc.setTarget(t);
}
}
}
}
}
return petriNet;
}
private static PetriNet createdSeparatedNetByLocation(PetriNet petriNet, String location) {
logger.info(">>> REMOVING ELEMENTS WITHOUT: " + location + " <<<");
private static PetriNet createdSeparatedNetByNode(PetriNet petriNet, String node) {
Set<String> removedTransitionIds = new HashSet<>();
Set<String> removedPlaceIds = new HashSet<>();
......@@ -410,25 +201,25 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
Set<String> removeRefPlaceIds = new HashSet<>();
for (Place place : petriNet.allPlaces()) {
if (!place.asOutputSignalPlace().getStaticPlaceInformation().getLocation().equals(location)) {
if (!place.asDinerosPlace().getStaticPlaceInformation().getNode().equals(node)) {
removedPlaceIds.add(place.getId());
}
}
for (Transition transition : petriNet.allTransitions()) {
if (!transition.asInputSignalTransition().getStaticTransitionInformation().getLocation().equals(location)) {
if (!transition.asDinerosTransition().getStaticTransitionInformation().getNode().equals(node)) {
removedTransitionIds.add(transition.getId());
}
}
for (RefPlace place : petriNet.allRefPlaces()) {
if (!place.getLocation().equals(location)) {
if (!place.getNode().equals(node)) {
removeRefPlaceIds.add(place.getId());
}
}
for (RefTransition transition : petriNet.allRefTransitions()) {
if (!transition.getLocation().equals(location)) {
if (!transition.getNode().equals(node)) {
removedRefTransitionIds.add(transition.getId());
}
}
......@@ -444,21 +235,21 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
}
for (Place place : petriNet.allPlaces()) {
if (!place.asOutputSignalPlace().getStaticPlaceInformation().getLocation().equals(location)) {
if (!place.asDinerosPlace().getStaticPlaceInformation().getNode().equals(node)) {
logger.info("REMOVING PLACE " + place.getId() + " from net");
place.removeSelf();
}
}
for (RefPlace place : petriNet.allRefPlaces()) {
if (!place.getLocation().equals(location)) {
if (!place.getNode().equals(node)) {
logger.info("REMOVING REF PLACE " + place.getId() + " from net");
place.removeSelf();
}
}
for (RefTransition transition : petriNet.allRefTransitions()) {
if (!transition.getLocation().equals(location)) {
if (!transition.getNode().equals(node)) {
logger.info("REMOVING REF TRANSITION " + transition.getId() + " from net");
transition.removeSelf();
}
......@@ -466,20 +257,20 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
for (Transition transition : petriNet.allTransitions()) {
if (!transition.asInputSignalTransition().getStaticTransitionInformation().getLocation().equals(location)) {
if (!transition.asDinerosTransition().getStaticTransitionInformation().getNode().equals(node)) {
logger.info("REMOVING TRANSITION " + transition.getId() + " from net");
transition.removeSelf();
}
if(transition.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()){
if (!transition.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getLocation().equals(location)) {
if (transition.asDinerosTransition().getStaticTransitionInformation().isTopicTransitionInformation()) {
if (!transition.asDinerosTransition().getStaticTransitionInformation().asTopicTransitionInformation().getNode().equals(node)) {
logger.info("REMOVING OLD TOPIC TRANSITION " + transition.getId() + " from net");
transition.removeSelf();
}
}
if(transition.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()){
if (!transition.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getLocation().equals(location)) {
if (transition.asDinerosTransition().getStaticTransitionInformation().isServiceTransitionInformation()) {
if (!transition.asDinerosTransition().getStaticTransitionInformation().asServiceTransitionInformation().getNode().equals(node)) {
logger.info("REMOVING OLD SERVICE TRANSITION " + transition.getId() + " from net");
transition.removeSelf();
}
......@@ -492,15 +283,14 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
return petriNet;
}
private static ToolInfo buildTopicToolSpecifics(String type, String location, String subnet, String topic, int inputLimit, int outputLimit, JastAddList<InputSignalBinding> inputSignalBindings) {
return buildToolSpecificsInternal(type, location, subnet, topic, null, inputLimit, outputLimit, inputSignalBindings);
}
private ToolInfo updateToolSpecificsWithPlaceInfos(ToolInfo oldToolInfo) {
private static ToolInfo buildServiceToolSpecifics(String type, String location, String subnet, String serviceName, JastAddList<InputSignalBinding> inputSignalBindings) {
return buildToolSpecificsInternal(type, location, subnet, null, serviceName, 0, 0, inputSignalBindings);
return null;
}
private static ToolInfo buildToolSpecificsInternal(String type, String location, String subnet, String topic, String serviceName, int inputLimit, int outputLimit, JastAddList<InputSignalBinding> inputSignalBindings) {
private ToolInfo buildToolSpecifics(ToolInfo oldToolInfo) {
StringBuffer oldXMLContent = oldToolInfo.getFormattedXMLBuffer();
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
......@@ -512,52 +302,16 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
rootElement.setAttribute(SplitterPnmlConstants.VERSION_KEY, SplitterPnmlConstants.SPLITTER_TOOL_VERSION);
doc.appendChild(rootElement);
if (location != null) {
Element loc = doc.createElement(PnmlConstants.LOCATION_KEY);
loc.appendChild(doc.createTextNode(location));
rootElement.appendChild(loc);
}
if (type != null) {
Element ctype = doc.createElement(PnmlConstants.TYPE_KEY);
ctype.appendChild(doc.createTextNode(type));
rootElement.appendChild(ctype);
}
if (subnet != null) {
Element net = doc.createElement(PnmlConstants.SUBNET_KEY);
net.appendChild(doc.createTextNode(subnet));
rootElement.appendChild(net);
}
if (topic != null) {
Element tc = doc.createElement(PnmlConstants.TOPIC_KEY);
tc.appendChild(doc.createTextNode(topic));
rootElement.appendChild(tc);
}
Element pubPlaces = doc.createElement("publisherPlaces");
Element subPlaces = doc.createElement("publisherPlaces");
if (serviceName != null) {
Element tc = doc.createElement(PnmlConstants.SERVICE_NAME);
tc.appendChild(doc.createTextNode(serviceName));
rootElement.appendChild(tc);
}
if(inputLimit > 0){
Element inLimit = doc.createElement(PnmlConstants.INPUT_LIMIT_KEY);
inLimit.appendChild(doc.createTextNode(String.valueOf(inputLimit)));
rootElement.appendChild(inLimit);
}
for (Map.Entry<String, List<DinerosPlace>> entry : topicPublisherPlaces.entrySet()) {
if(outputLimit > 0){
Element outLimit = doc.createElement(PnmlConstants.OUTPUT_LIMIT_KEY);
outLimit.appendChild(doc.createTextNode(String.valueOf(outputLimit)));
rootElement.appendChild(outLimit);
}
Element bindings = doc.createElement(PnmlConstants.INPUT_SIGNAL_BINDINGS_KEY);
if (inputSignalBindings != null) {
for (InputSignalBinding isb : inputSignalBindings) {
/* for (InputSignalBinding isb : inputSignalBindings) {
Element binding = doc.createElement(PnmlConstants.INPUT_SIGNAL_BINDING_KEY);
......@@ -575,7 +329,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
bindings.appendChild(binding);
}
}
rootElement.appendChild(bindings);
......@@ -589,57 +343,12 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
toolInfo.setVersion(SplitterPnmlConstants.SPLITTER_TOOL_VERSION);
toolInfo.setTool(SplitterPnmlConstants.SPLITTER_TOOL_NAME);
//System.out.println("ToolInfo: " + toolInfo.getFormattedXMLBuffer().toString());
return toolInfo;
} catch (ParserConfigurationException | TransformerConfigurationException pce) {
return toolInfo;*/
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
return null;
}
private static void reconnectInputSignals(InputSignalTransition sourceIst, InputSignalBinding isb) {
InputSignalBinding newIsb = new InputSignalBinding();
newIsb.setInputSignalValue(isb.getInputSignalValue());
newIsb.setTransitionID(isb.getTransitionID());
newIsb.setId(isb.getId());
newIsb.setInputSignalID(isb.getInputSignalID());
sourceIst.addMutualInputSignalBinding(newIsb);
}
@NotNull
private static InputSignalTransition createRosTransition(InputSignalTransition ist, int serviceCount, String sufix) {
InputSignalTransition sourceIst = new InputSignalTransition();
sourceIst.setName(new Name().setText(ist.getName().getText() + sufix + serviceCount));
sourceIst.setId(ist.getId() + sufix + serviceCount);
return sourceIst;
}
@NotNull
private static ServiceTransitionInformation copyServiceTransitionInformation(InputSignalTransition ist, String inLocation, String inSubNet) {
ServiceTransitionInformation tInfoSource = new ServiceTransitionInformation();
tInfoSource.setSubNet(inSubNet);
tInfoSource.setLocation(inLocation);
tInfoSource.setServiceName(ist.getStaticTransitionInformation().asServiceTransitionInformation().getServiceName());
return tInfoSource;
}
private static void reconnectSourceTransitionSignalsAndArcs(Transition transition, InputSignalTransition ist, Place p, InputSignalTransition sourceIst) {
// Reconnect Input Signals
for (InputSignalBinding isb : ist.getStaticInputSignalBindingList()) {
reconnectInputSignals(sourceIst, isb);
}
// Get all incoming arcs and connect them to new output transition
for (Arc arc : p.asOutputSignalPlace().getOutArcList().toArray(new Arc[0])) {
if (arc.getTarget().getId().equals(transition.getId())) {
arc.setTarget(sourceIst);
}
}
}
}
\ No newline at end of file
......@@ -22,7 +22,7 @@ public class PostProcessingUtils {
private static Set<Transition> getTransitionsBySubnet(String subNet, PetriNet petriNet) {
return petriNet.allTransitions().stream().filter(t -> t.asInputSignalTransition()
return petriNet.allTransitions().stream().filter(t -> t.asDinerosTransition()
.getStaticTransitionInformation().getSubNet().equals(subNet)).collect(Collectors.toSet());
}
......@@ -50,7 +50,7 @@ public class PostProcessingUtils {
private static Set<Place> getPlacesBySubnet(String subNet, PetriNet petriNet) {
return petriNet.allPlaces().stream().filter(t -> t.asOutputSignalPlace()
return petriNet.allPlaces().stream().filter(t -> t.asDinerosPlace()
.getStaticPlaceInformation().getSubNet().equals(subNet)).collect(Collectors.toSet());
}
......@@ -105,12 +105,8 @@ public class PostProcessingUtils {
}
/**
* 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) {
Set<Transition> subNetTransitions = getTransitionsBySubnet(subNet, petriNet);
......@@ -157,9 +153,9 @@ public class PostProcessingUtils {
}
});
}
}*/
public static Tuple3<Set<Transition>, Set<Place>, Set<Arc>> copyServiceSubNet(PetriNet petriNet, String subNet, Page parentPage, String instanceId, String templateNetInstanceId) {
/* 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<>();
......@@ -183,7 +179,7 @@ public class PostProcessingUtils {
// 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));
transitionsToAdd.add(CopyPrimitiveElements.copySignalTransition(t.asDinerosTransition(), instanceId + "-", instanceId));
}
}
}
......@@ -192,98 +188,98 @@ public class PostProcessingUtils {
return new Tuple3<>(transitionsToAdd, placesToAdd, arcsToAdd);
}
}*/
///////////////////////////////
// LOGGING ////////////////////
///////////////////////////////
public static void printNet(PetriNet petriNet) {
public static void printNet(PetriNet petriNet, boolean withArcs, boolean withToolSpecifics) {
logger.info("--------------- STRUCTURE ---------------");
logger.info("----------------- PLACES ----------------");
System.out.println("--------------- STRUCTURE ---------------");
System.out.println("----------------- PLACES ----------------");
for (Place p : petriNet.allPlaces()) {
logger.info("Place " + p.asOutputSignalPlace().getName().getText() + " -- " + 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 {
System.out.println("--- Marking: NULL");
}
}
logger.info("-------------- TRANSITIONS --------------");
System.out.println("-------------- TRANSITIONS --------------");
for (Transition t : petriNet.allTransitions()) {
if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()) {
logger.info("--- Transition: " + t.getName().getText() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet()
+ " location: " + t.asInputSignalTransition().getStaticTransitionInformation().getLocation()
+ " service: " + t.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName() + " ---------");
} else if(t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()){
logger.info("--- Transition: " + t.getName().getText() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet()
+ " location: " + t.asInputSignalTransition().getStaticTransitionInformation().getLocation()
+ " topic: " + t.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic() + " ---------");
}else{
logger.info("--- Transition: " + t.getId() + " location: " + t.asInputSignalTransition().getStaticTransitionInformation().getLocation());
System.out.println("Transition " + t.getId());
}
if(t.asInputSignalTransition().getInputSignalClause() != null && t.asInputSignalTransition().getInputSignalClause().getNumChild() > 0){
logger.info("------ Clause: " + t.asInputSignalTransition().getInputSignalClause().printExp());
System.out.println("-------------- TRANSITION DETAILS --------------");
for (Transition t : petriNet.allTransitions()) {
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.asDinerosTransition().getStaticTransitionInformation().getSubNet() + " --- name: " + t.getName().getText());
}
for (Place p : t.asInputSignalTransition().incomingPlaces()) {
for (Place p : t.asDinerosTransition().incomingPlaces()) {
logger.info("------ Inputplace: " + p.getName().getText() + " subnet: " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet()
+ " location: " + p.asOutputSignalPlace().getStaticPlaceInformation().getLocation() + " ---------");
System.out.println("------ Inputplace: " + p.getId() + " subnet: " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet() + " ---------");
}
for (Place p : t.asInputSignalTransition().outgoingPlaces()) {
for (Place p : t.asDinerosTransition().outgoingPlaces()) {
logger.info("------ Outputplace: " + p.getName().getText() + " subnet: " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet()
+ " location: " + p.asOutputSignalPlace().getStaticPlaceInformation().getLocation() + " ---------");
System.out.println("------ Outputplace: " + p.getId() + " subnet: " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet() + " ---------");
}
}
logger.info("----------------- REF PLACES -----------------");
System.out.println("----------------- REF PLACES -----------------");
for (RefPlace rp : petriNet.allRefPlaces()) {
logger.info("--- RefPlace: " + rp.getId());
System.out.println("--- RefPlace: " + rp.getId());
}
logger.info("----------------- REF TRANSITIONS -----------------");
System.out.println("----------------- REF TRANSITIONS -----------------");
for (RefTransition rt : petriNet.allRefTransitions()) {
logger.info("--- RefTransition: " + rt.getId());
System.out.println("--- RefTransition: " + rt.getId());
}
logger.info("----------------- ARCS -----------------");
if (withArcs) {
System.out.println("----------------- ARCS -----------------");
for (Arc a : petriNet.allArcs()) {
logger.info("Arc: " + a.getId() + " -- source: " + a.getSource().getId() + " -- target: " + a.getTarget().getId());
}
logger.info("--------------- T SIGNALS (STATIC)---------------");
for (Transition t : petriNet.allTransitions()) {
InputSignalTransition ist = t.asInputSignalTransition();
if (ist != null && ist.getStaticInputSignalBindingList() != null) {
ist.getStaticInputSignalBindingList().forEach(inputSignalBinding -> logger.info(" (" + t.getName().getText() + ") Signal: " + inputSignalBinding.getInputSignalID()));
System.out.println("Arc: " + a.getId() + " -- source: " + a.getSource().getId() + " -- target: " + a.getTarget().getId());
}
}
logger.info("--------------- T SIGNALS (MUTUAL)---------------");
System.out.println("--------------- T SIGNALS (STATIC)---------------");
for (Transition t : petriNet.allTransitions()) {
InputSignalTransition ist = t.asInputSignalTransition();
DinerosTransition ist = t.asDinerosTransition();
if (ist != null && ist.getMutualInputSignalBindingList() != null) {
ist.getMutualInputSignalBindingList().forEach(inputSignalBinding -> logger.info(" (" + t.getName().getText() + ") Signal: " + inputSignalBinding.getInputSignalID()));
if (ist != null && ist.getMutableTransitionInformation() == null) {
if(ist.getStaticTransitionInformation().isSignalTransitionInformation()){
System.out.println(ist.getStaticTransitionInformation().asSignalTransitionInformation().getClause().printClause());
}
}
}
logger.info("--------------- TOOL SPECIFIC ---------------");
if(withToolSpecifics) {
System.out.println("--------------- TOOL SPECIFIC ---------------");
for (Transition t : petriNet.allTransitions()) {
InputSignalTransition ist = t.asInputSignalTransition();
DinerosTransition ist = t.asDinerosTransition();
if (ist != null && ist.getNumToolspecific() > 0) {
// logger.info("ToolSpecific: (" + ist.getName().getText() + ") " + ist.getToolspecific(0).getFormattedXMLBuffer().toString());
System.out.println("ToolSpecific: (" + ist.getName().getText() + ") " + ist.getToolspecific(0).getFormattedXMLBuffer().toString());
}
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment