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

refactoring on the transformation processes

parent 4e295d54
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,7 @@ import de.tudresden.inf.st.export.PnmlExporter; ...@@ -6,6 +6,7 @@ import de.tudresden.inf.st.export.PnmlExporter;
import de.tudresden.inf.st.pnml.PnmlParser; import de.tudresden.inf.st.pnml.PnmlParser;
import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.*;
import fr.lip6.move.pnml.framework.utils.exception.InvalidIDException; import fr.lip6.move.pnml.framework.utils.exception.InvalidIDException;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.w3c.dom.Document; import org.w3c.dom.Document;
...@@ -146,14 +147,9 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -146,14 +147,9 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
String inLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation(); String inLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
String inSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet(); String inSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition sourceIst = new InputSignalTransition(); InputSignalTransition sourceIst = createRosInputTransition(ist, serviceCount, sufix);
sourceIst.setName(new Name().setText(ist.getName().getText() + sufix + serviceCount));
sourceIst.setId(ist.getId() + sufix + serviceCount);
ServiceTransitionInformation tInfoSource = new ServiceTransitionInformation(); ServiceTransitionInformation tInfoSource = copyServiceTransitionInformation(ist, inLocation, inSubNet);
tInfoSource.setSubNet(inSubNet);
tInfoSource.setLocation(inLocation);
tInfoSource.setServiceName(ist.getStaticTransitionInformation().asServiceTransitionInformation().getServiceName());
// attributized infos need to be written back to XML // attributized infos need to be written back to XML
JastAddList<ToolInfo> inputToolInfoJastAddList = new JastAddList<>(); JastAddList<ToolInfo> inputToolInfoJastAddList = new JastAddList<>();
...@@ -163,26 +159,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -163,26 +159,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
sourceIst.setToolspecificList(inputToolInfoJastAddList); sourceIst.setToolspecificList(inputToolInfoJastAddList);
sourceIst.setMutualTransitionInformation(tInfoSource); sourceIst.setMutualTransitionInformation(tInfoSource);
reconnectSourceTransitionSignalsAndArcs(transition, ist, p, sourceIst);
// Reconnect Input Signals
for (InputSignalBinding isb : ist.getStaticInputSignalBindingList()) {
InputSignalBinding newIsb = new InputSignalBinding();
newIsb.setInputSignalValue(isb.getInputSignalValue());
newIsb.setTransitionID(isb.getTransitionID());
newIsb.setId(isb.getId());
newIsb.setInputSignalID(isb.getInputSignalID());
sourceIst.addMutualInputSignalBinding(newIsb);
}
// 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);
}
}
// Add new transitions to net // Add new transitions to net
transitionsToAdd.add(sourceIst); transitionsToAdd.add(sourceIst);
...@@ -212,22 +189,16 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -212,22 +189,16 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
String outLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation(); String outLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
String outSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet(); String outSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition requestServerIst = new InputSignalTransition(); InputSignalTransition requestServerIst = createRosInputTransition(ist, serviceCount, sufix);
requestServerIst.setName(new Name().setText(ist.getName().getText() + sufix + serviceCount));
requestServerIst.setId(ist.getId() + sufix + serviceCount);
ServiceTransitionInformation tInfoTarget = new ServiceTransitionInformation(); ServiceTransitionInformation tInfoTarget = copyServiceTransitionInformation(ist, outLocation, outSubNet);
tInfoTarget.setSubNet(outSubNet);
tInfoTarget.setLocation(outLocation);
tInfoTarget.setServiceName(ist.getStaticTransitionInformation().asServiceTransitionInformation().getServiceName());
// attributized infos need to be written back to XML // attribute infos need to be written back to XML
JastAddList<ToolInfo> outputToolInfoJastAddList = new JastAddList<>(); JastAddList<ToolInfo> outputToolInfoJastAddList = new JastAddList<>();
tInfoTarget.setType(targetType); tInfoTarget.setType(targetType);
outputToolInfoJastAddList.add(buildServiceToolSpecifics(targetType, outLocation, outSubNet, tInfoTarget.getServiceName(), null)); outputToolInfoJastAddList.add(buildServiceToolSpecifics(targetType, outLocation, outSubNet, tInfoTarget.getServiceName(), null));
requestServerIst.setToolspecificList(outputToolInfoJastAddList); requestServerIst.setToolspecificList(outputToolInfoJastAddList);
requestServerIst.setMutualTransitionInformation(tInfoTarget); requestServerIst.setMutualTransitionInformation(tInfoTarget);
...@@ -309,9 +280,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -309,9 +280,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
String outLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation(); String outLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
String outSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet(); String outSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition subscriberIst = new InputSignalTransition(); InputSignalTransition subscriberIst = createRosInputTransition(channelIst, subscriberCount, "-subscriber-");
subscriberIst.setName(new Name().setText(channelIst.getName().getText() + "-subscriber-" + subscriberCount));
subscriberIst.setId(channelIst.getId() + "-subscriber-" + subscriberCount);
TopicTransitionInformation tInfoTarget = new TopicTransitionInformation(); TopicTransitionInformation tInfoTarget = new TopicTransitionInformation();
tInfoTarget.setSubNet(outSubNet); tInfoTarget.setSubNet(outSubNet);
...@@ -373,9 +342,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -373,9 +342,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
String inLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation(); String inLocation = p.asOutputSignalPlace().getStaticPlaceInformation().getLocation();
String inSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet(); String inSubNet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
InputSignalTransition publisherIst = new InputSignalTransition(); InputSignalTransition publisherIst = createRosInputTransition(channelIst, publisherCount, "-publisher-");
publisherIst.setName(new Name().setText(channelIst.getName().getText() + "-publisher-" + publisherCount));
publisherIst.setId(channelIst.getId() + "-publisher-" + publisherCount);
TopicTransitionInformation tInfoSource = new TopicTransitionInformation(); TopicTransitionInformation tInfoSource = new TopicTransitionInformation();
tInfoSource.setSubNet(inSubNet); tInfoSource.setSubNet(inSubNet);
...@@ -401,24 +368,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -401,24 +368,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
publisherIst.setMutualTransitionInformation(tInfoSource); publisherIst.setMutualTransitionInformation(tInfoSource);
// Reconnect Input Signals // Reconnect Input Signals
for (InputSignalBinding isb : channelIst.getStaticInputSignalBindingList()) { reconnectSourceTransitionSignalsAndArcs(transition, channelIst, p, publisherIst);
InputSignalBinding newIsb = new InputSignalBinding();
newIsb.setInputSignalValue(isb.getInputSignalValue());
newIsb.setTransitionID(isb.getTransitionID());
newIsb.setId(isb.getId());
newIsb.setInputSignalID(isb.getInputSignalID());
publisherIst.addMutualInputSignalBinding(newIsb);
}
// 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(publisherIst);
}
}
// Add new transitions to net // Add new transitions to net
transitionsToAdd.add(publisherIst); transitionsToAdd.add(publisherIst);
...@@ -441,23 +391,22 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -441,23 +391,22 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
private static PetriNet createdSeparatedNetByLocation(PetriNet petriNet, String location) { private static PetriNet createdSeparatedNetByLocation(PetriNet petriNet, String location) {
PetriNet separatedNet = petriNet;
Set<String> removedTransitionIds = new HashSet<>(); Set<String> removedTransitionIds = new HashSet<>();
Set<String> removePlaceIds = new HashSet<>(); Set<String> removePlaceIds = new HashSet<>();
for (Place place : separatedNet.allPlaces()) { for (Place place : petriNet.allPlaces()) {
if (!place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(location)) { if (!place.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(location)) {
removePlaceIds.add(place.getId()); removePlaceIds.add(place.getId());
} }
} }
for (Transition transition : separatedNet.allTransitions()) { for (Transition transition : petriNet.allTransitions()) {
if (!transition.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(location)) { if (!transition.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(location)) {
removedTransitionIds.add(transition.getId()); removedTransitionIds.add(transition.getId());
} }
} }
for (Arc arc : separatedNet.allArcs()) { for (Arc arc : petriNet.allArcs()) {
if (removedTransitionIds.contains(arc.getSource().getId()) || removedTransitionIds.contains(arc.getTarget().getId()) if (removedTransitionIds.contains(arc.getSource().getId()) || removedTransitionIds.contains(arc.getTarget().getId())
|| removePlaceIds.contains(arc.getSource().getId()) || removePlaceIds.contains(arc.getTarget().getId())) { || removePlaceIds.contains(arc.getSource().getId()) || removePlaceIds.contains(arc.getTarget().getId())) {
logger.info("removing arc " + arc.getId() + " from net"); logger.info("removing arc " + arc.getId() + " from net");
...@@ -465,14 +414,14 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -465,14 +414,14 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
} }
} }
for (Place place : separatedNet.allPlaces()) { for (Place place : petriNet.allPlaces()) {
if (!place.asOutputSignalPlace().getStaticPlaceInformation().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 : petriNet.allTransitions()) {
if(transition.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()){ if(transition.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()){
if (!transition.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getSubNet().equals(location)) { if (!transition.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getSubNet().equals(location)) {
...@@ -489,10 +438,10 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -489,10 +438,10 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
} }
} }
separatedNet.flushTreeCache(); petriNet.flushTreeCache();
separatedNet.flushAttrAndCollectionCache(); petriNet.flushAttrAndCollectionCache();
return separatedNet; return petriNet;
} }
private static ToolInfo buildTopicToolSpecifics(String type, String location, String subnet, String topic, int inputLimit, int outputLimit, JastAddList<InputSignalBinding> inputSignalBindings) { private static ToolInfo buildTopicToolSpecifics(String type, String location, String subnet, String topic, int inputLimit, int outputLimit, JastAddList<InputSignalBinding> inputSignalBindings) {
...@@ -603,4 +552,46 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -603,4 +552,46 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
return null; 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 createRosInputTransition(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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment