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

extended grammar and input processing for services

parent 65d2c740
No related branches found
No related tags found
No related merge requests found
...@@ -31,6 +31,12 @@ aspect Navigation { ...@@ -31,6 +31,12 @@ aspect Navigation {
syn boolean Node.isTransitionNode() = false; syn boolean Node.isTransitionNode() = false;
eq TransitionNode.isTransitionNode() = true; eq TransitionNode.isTransitionNode() = true;
syn boolean TransitionInformation.isTopicTransitionInformation() = false;
eq TopicTransitionInformation.isTopicTransitionInformation() = true;
syn boolean TransitionInformation.isServiceTransitionInformation() = false;
eq ServiceTransitionInformation.isServiceTransitionInformation() = true;
syn TransitionNode Node.asTransitionNode() = null; syn TransitionNode Node.asTransitionNode() = null;
eq TransitionNode.asTransitionNode() = this; eq TransitionNode.asTransitionNode() = this;
...@@ -40,6 +46,12 @@ aspect Navigation { ...@@ -40,6 +46,12 @@ aspect Navigation {
syn OutputSignalPlace Place.asOutputSignalPlace() = null; syn OutputSignalPlace Place.asOutputSignalPlace() = null;
eq OutputSignalPlace.asOutputSignalPlace() = this; eq OutputSignalPlace.asOutputSignalPlace() = this;
syn TopicTransitionInformation TransitionInformation.asTopicTransitionInformation() = null;
eq TopicTransitionInformation.asTopicTransitionInformation() = this;
syn ServiceTransitionInformation TransitionInformation.asServiceTransitionInformation() = null;
eq ServiceTransitionInformation.asServiceTransitionInformation() = 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();
......
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> <Topic:String> <SubNet:String>;
TransitionInformation ::= <Location:String> <Type:String> <InputLimit:java.lang.Integer> <OutputLimit:java.lang.Integer> <SubNet:String>;
TopicTransitionInformation : TransitionInformation ::= <Topic:String>;
ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String>;
PlaceInformation ::= <Location:String> <Type:String> <SubNet:String>; PlaceInformation ::= <Location:String> <Type:String> <SubNet:String>;
InputSignalTransition : Transition ::= /StaticInputSignalBinding:InputSignalBinding*/ MutualInputSignalBinding:InputSignalBinding* /StaticTransitionInformation:TransitionInformation/ [MutualTransitionInformation:TransitionInformation]; InputSignalTransition : Transition ::= /StaticInputSignalBinding:InputSignalBinding*/ MutualInputSignalBinding:InputSignalBinding* /StaticTransitionInformation:TransitionInformation/ [MutualTransitionInformation:TransitionInformation];
......
...@@ -18,13 +18,13 @@ public class Main { ...@@ -18,13 +18,13 @@ public class Main {
String inputPath = (args.length > 0) ? args[0] : null; String inputPath = (args.length > 0) ? args[0] : null;
if(inputPath == null){ /* if(inputPath == null){
logger.error("No model found on given input path."); logger.error("No model found on given input path.");
return; return;
} }*/
//List<PetriNet> petriNets = PnmlParser.parsePnml("src/main/resources/minimal_global.pnml"); List<PetriNet> petriNets = PnmlParser.parsePnml("src/main/nets/serviceTestNet1.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<>();
......
package de.tudresden.inf.st.pnml; package de.tudresden.inf.st.pnml;
import de.tudresden.inf.st.constants.PnmlConstants; import de.tudresden.inf.st.constants.PnmlConstants;
import de.tudresden.inf.st.pnml.jastadd.model.JastAddList; import de.tudresden.inf.st.pnml.jastadd.model.*;
import de.tudresden.inf.st.pnml.jastadd.model.PlaceInformation;
import de.tudresden.inf.st.pnml.jastadd.model.ToolInfo;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import de.tudresden.inf.st.pnml.jastadd.model.TransitionInformation;
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;
...@@ -53,7 +50,8 @@ public class ToolSpecificsParser { ...@@ -53,7 +50,8 @@ public class ToolSpecificsParser {
if (typeList.getLength() > 0 && typeList.item(0) != null) { if (typeList.getLength() > 0 && typeList.item(0) != null) {
String type = typeList.item(0).getTextContent(); String type = typeList.item(0).getTextContent();
if (!type.equals(PnmlConstants.TRANSITION_TYPE_CONTINUOUS) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE) if (!type.equals(PnmlConstants.TRANSITION_TYPE_CONTINUOUS) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE)
|| type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) { || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC) || !type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)
|| !type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) {
return type; return type;
} else { } else {
logger.error("Error: Invalid transition type configured: " + type + "."); logger.error("Error: Invalid transition type configured: " + type + ".");
...@@ -95,6 +93,27 @@ public class ToolSpecificsParser { ...@@ -95,6 +93,27 @@ public class ToolSpecificsParser {
return null; return null;
} }
public static String getTransitionServiceNameFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
if (toolInfos.getNumChild() > 0) {
try {
Document doc = parseToolSpecifics(toolInfos);
NodeList typeList = doc.getElementsByTagName(PnmlConstants.SERVICE_NAME);
if (typeList.getLength() > 0 && typeList.item(0) != null) {
String type = typeList.item(0).getTextContent();
if (!type.equals("") && type != null){
return type;
}
}
} catch (ParserConfigurationException | SAXException | IOException e) {
logger.error(e.getMessage());
}
}
return null;
}
private static String getPlaceTypeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { private static String getPlaceTypeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
if (toolInfos.getNumChild() > 0) { if (toolInfos.getNumChild() > 0) {
...@@ -182,15 +201,25 @@ public class ToolSpecificsParser { ...@@ -182,15 +201,25 @@ public class ToolSpecificsParser {
public static TransitionInformation getTransitionInformation(JastAddList<ToolInfo> toolInfos) { public static TransitionInformation getTransitionInformation(JastAddList<ToolInfo> toolInfos) {
TransitionInformation ti = new TransitionInformation(); if(getTransitionTopicFromToolSpecifics(toolInfos) != null){
ti.setInputLimit(getTransitionInputLimit(toolInfos)); TopicTransitionInformation topicTransition = new TopicTransitionInformation();
ti.setOutputLimit(getTransitionOutputLimit(toolInfos)); topicTransition.setInputLimit(getTransitionInputLimit(toolInfos));
ti.setLocation(getLocationFromToolSpecifics(toolInfos)); topicTransition.setOutputLimit(getTransitionOutputLimit(toolInfos));
ti.setType(getTransitionTypeFromToolSpecifics(toolInfos)); topicTransition.setLocation(getLocationFromToolSpecifics(toolInfos));
ti.setTopic(getTransitionTopicFromToolSpecifics(toolInfos)); topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos));
ti.setSubNet(getTransitionSubnetInfo(toolInfos)); topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos));
topicTransition.setSubNet(getTransitionSubnetInfo(toolInfos));
return ti; return topicTransition;
}else{
ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation();
serviceTransition.setInputLimit(getTransitionInputLimit(toolInfos));
serviceTransition.setOutputLimit(getTransitionOutputLimit(toolInfos));
serviceTransition.setLocation(getLocationFromToolSpecifics(toolInfos));
serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos));
serviceTransition.setServiceName(getTransitionServiceNameFromToolSpecifics(toolInfos));
serviceTransition.setSubNet(getTransitionSubnetInfo(toolInfos));
return serviceTransition;
}
} }
public static PlaceInformation getPlaceInformation(JastAddList<ToolInfo> toolInfos) { public static PlaceInformation getPlaceInformation(JastAddList<ToolInfo> toolInfos) {
......
...@@ -128,10 +128,10 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -128,10 +128,10 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
sourceIst.setName(new Name().setText(channelIst.getName().getText() + "-source")); sourceIst.setName(new Name().setText(channelIst.getName().getText() + "-source"));
sourceIst.setId(channelIst.getId() + "-source"); sourceIst.setId(channelIst.getId() + "-source");
TransitionInformation tInfoSource = new TransitionInformation(); TopicTransitionInformation tInfoSource = new TopicTransitionInformation();
tInfoSource.setSubNet(inSubNet); tInfoSource.setSubNet(inSubNet);
tInfoSource.setLocation(inLocation); tInfoSource.setLocation(inLocation);
tInfoSource.setTopic(channelIst.getStaticTransitionInformation().getTopic()); tInfoSource.setTopic(channelIst.getStaticTransitionInformation().asTopicTransitionInformation().getTopic());
// 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<>();
...@@ -155,10 +155,10 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -155,10 +155,10 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
targetIst.setName(new Name().setText(channelIst.getName().getText() + "-target")); targetIst.setName(new Name().setText(channelIst.getName().getText() + "-target"));
targetIst.setId(channelIst.getId() + "-target"); targetIst.setId(channelIst.getId() + "-target");
TransitionInformation tInfoTarget = new TransitionInformation(); TopicTransitionInformation tInfoTarget = new TopicTransitionInformation();
tInfoTarget.setSubNet(outSubNet); tInfoTarget.setSubNet(outSubNet);
tInfoTarget.setLocation(outLocation); tInfoTarget.setLocation(outLocation);
tInfoTarget.setTopic(channelIst.getStaticTransitionInformation().getTopic()); tInfoTarget.setTopic(channelIst.getStaticTransitionInformation().asTopicTransitionInformation().getTopic());
// attributized infos need to be written back to XML // attributized infos need to be written back to XML
JastAddList<ToolInfo> outputToolInfoJastAddList = new JastAddList<>(); JastAddList<ToolInfo> outputToolInfoJastAddList = new JastAddList<>();
...@@ -256,7 +256,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -256,7 +256,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
} }
for (Transition transition : separatedNet.allTransitions()) { for (Transition transition : separatedNet.allTransitions()) {
if (!transition.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(location)) { if (!transition.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic().equals(location)) {
logger.info("removing transition " + transition.getId() + " from net"); logger.info("removing transition " + transition.getId() + " from net");
transition.removeSelf(); transition.removeSelf();
} }
...@@ -268,6 +268,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -268,6 +268,7 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
return separatedNet; return separatedNet;
} }
// todo: extend with service name
private static ToolInfo buildToolSpecifics(String type, String location, String subnet, String topic, int inputLimit, int outputLimit, JastAddList<InputSignalBinding> inputSignalBindings) { private static ToolInfo buildToolSpecifics(String type, String location, String subnet, String topic, int inputLimit, int outputLimit, JastAddList<InputSignalBinding> inputSignalBindings) {
try { try {
...@@ -372,8 +373,13 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { ...@@ -372,8 +373,13 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
for (Transition t : petriNet.allTransitions()) { for (Transition t : petriNet.allTransitions()) {
if(t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()) {
logger.info("--- Transition: " + t.getName().getText() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet()
+ " service: " + t.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName() + " ---------");
}else{
logger.info("--- Transition: " + t.getName().getText() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() logger.info("--- Transition: " + t.getName().getText() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet()
+ " topic: " + t.asInputSignalTransition().getStaticTransitionInformation().getTopic() + " ---------"); + " topic: " + t.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic() + " ---------");
}
for (Place p : t.asInputSignalTransition().incomingPlaces()) { for (Place p : t.asInputSignalTransition().incomingPlaces()) {
......
...@@ -104,7 +104,7 @@ ...@@ -104,7 +104,7 @@
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
</toolspecific> </toolspecific>
<name> <name>
<text>p2</text> <text>p3</text>
<graphics> <graphics>
<offset x="0" y="-10" /> <offset x="0" y="-10" />
</graphics> </graphics>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment