diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java index 3530895e3097224f6a117ebdf451029e2ad9bd61..c9f39d7681204affff227e014a7b2da1eac7d033 100644 --- a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java +++ b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java @@ -39,6 +39,7 @@ public final class PnmlConstants { public static final String TRANSITION_SERVICE_SERVER_OUT_KEY = "serverOutput"; public static final String TRANSITION_SERVICE_CHANNELS_KEY = "channels"; public static final String TRANSITION_SERVICE_CHANNEL_KEY = "channel"; + public static final String TRANSITION_SERVICE_CHANNEL_ID_KEY = "cid"; public static final String TRANSITION_SERVICE_REQUEST_KEY = "request"; public static final String TRANSITION_SERVICE_RESPONSE_KEY = "response"; @@ -48,17 +49,16 @@ public final class PnmlConstants { public static final String SUBNET_KEY = "subnet"; public static final String TOPIC_KEY = "topic"; - // bindings - public static final String INPUT_SIGNAL_BINDING_KEY = "inputsignalbinding"; - public static final String INPUT_SIGNAL_SIGNAL_KEY = "signal"; - + // signal keys public static final String TRANSITION_ID_KEY = "transitionID"; public static final String INPUT_SIGNAL_ID_KEY = "inputsignalID"; public static final String PLACE_ID_KEY = "placeID"; - public static final String OUTPUT_SIGNAL_ID_KEY = "outputsignalID"; public static final String CURRENT_VALUE_KEY = "initialvalue"; - public static final String CLAUSE_KEY = "inputsignalclause"; + public static final String INPUT_SIGNALS_DEF = "inputsignals"; + public static final String INPUT_SIGNAL_DEF = "inputsignal"; + public static final String INPUT_SIGNAL_ID_DEF = "inputsignalID"; + public static final String INPUT_SIGNAL_INIT_VALUE_DEF = "initialvalue"; // structural keys public static final String COMMUNICATORS = "communicators"; @@ -71,11 +71,6 @@ public final class PnmlConstants { public static final String SERVICE_CLIENT = "serviceClient"; public static final String SERVICE_SERVER = "serviceServer"; - public static final String INPUT_SIGNALS_DEF = "inputsignals"; - public static final String INPUT_SIGNAL_DEF = "inputsignal"; - public static final String INPUT_SIGNAL_ID_DEF = "inputsignalID"; - public static final String INPUT_SIGNAL_INIT_VALUE_DEF = "initialvalue"; - // arc types public static final String ARC_TYPE_KEY = "type"; public static final String DEFAULT_ARC = "default"; diff --git a/src/main/jastadd/base/Navigation.jrag b/src/main/jastadd/base/Navigation.jrag index 55d925a693cd688bb5d4ab1243b90b1663c3f720..0003ecb7db49012d64da8eb707dba5fcbec24ba9 100644 --- a/src/main/jastadd/base/Navigation.jrag +++ b/src/main/jastadd/base/Navigation.jrag @@ -78,8 +78,8 @@ aspect Navigation { syn boolean TransitionInformation.isServiceTransitionInformation() = false; eq ServiceTransitionInformation.isServiceTransitionInformation() = true; - syn boolean TransitionInformation.isDefaultTransitionInformation() = false; - eq DefaultTransitionInformation.isDefaultTransitionInformation() = true; + syn boolean TransitionInformation.isSignalTransitionInformation() = false; + eq SignalTransitionInformation.isSignalTransitionInformation() = true; syn boolean TransitionNode.isRefTransition() = false; eq RefTransition.isRefTransition() = true; @@ -129,8 +129,8 @@ aspect Navigation { syn ServiceTransitionInformation TransitionInformation.asServiceTransitionInformation() = null; eq ServiceTransitionInformation.asServiceTransitionInformation() = this; - syn DefaultTransitionInformation TransitionInformation.asDefaultTransitionInformation() = null; - eq DefaultTransitionInformation.asDefaultTransitionInformation() = this; + syn SignalTransitionInformation TransitionInformation.asSignalTransitionInformation() = null; + eq SignalTransitionInformation.asSignalTransitionInformation() = this; syn Place PlaceNode.place(); eq Place.place() = this; diff --git a/src/main/jastadd/base/clauses/expressions.jadd b/src/main/jastadd/base/clauses/expressions.jadd index a5bba722a443aafd95d7c63eec14dea3c6c911d0..589a2cb565709240f591df6941bf9ed78ef05ce2 100644 --- a/src/main/jastadd/base/clauses/expressions.jadd +++ b/src/main/jastadd/base/clauses/expressions.jadd @@ -41,6 +41,27 @@ aspect SignalExpressions { return result; } + syn List<String> InputSignalClause.signals(); + + eq InputSignalClause.signals(){ + + Set<String> literalSet = new HashSet<>(); + + for(Disjunction dj : getDisjunctionList()){ + for(Literal l : dj.getLiteralList()){ + literalSet.add(l.getName()); + } + } + + List<String> retList = new ArrayList<>(); + + for(String s : literalSet){ + retList.add(s); + } + + return retList; + } + syn boolean ASTNode.evalClause(ClauseValuesDefinition defs); eq ASTNode.evalClause(ClauseValuesDefinition defs) = false; diff --git a/src/main/jastadd/base/distribution/DistributedPN.jadd b/src/main/jastadd/base/distribution/DistributedPN.jadd index a47045c60f261b5ee9049fa00312a49da0046248..f1cccb2a51d6a9056a8c71a62cec712b2e2ff303 100644 --- a/src/main/jastadd/base/distribution/DistributedPN.jadd +++ b/src/main/jastadd/base/distribution/DistributedPN.jadd @@ -39,10 +39,6 @@ aspect PnDistribution { return ToolSpecificsParser.getSubnetFromToolSpecifics(this.getToolspecificList()); } - syn lazy InputSignalClause DefaultTransitionInformation.getInputSignalClause(){ - return ToolSpecificsParser.getClauseFromToolSpecifics(this.containingTransition().getToolspecificList()); - } - syn lazy CommunicatorInformation PetriNet.getCommunicatorInformation(){ return ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList()); } diff --git a/src/main/jastadd/base/io/IoPN.jadd b/src/main/jastadd/base/io/IoPN.jadd index fd198879b7f5c00d39a510fe1b5cd5eb2dd11c78..bc1c7bdb42e2141be8c82d7a8dce5c2e1260fede 100644 --- a/src/main/jastadd/base/io/IoPN.jadd +++ b/src/main/jastadd/base/io/IoPN.jadd @@ -7,7 +7,4 @@ aspect IoPnExtension{ inh DinerosTransition TransitionInformation.containingTransition(); eq DinerosTransition.getChild().containingTransition() = this; - syn lazy JastAddList<InputSignalBinding> DefaultTransitionInformation.getInputSignalBinding() { - return PnmlSignalParser.parseInputSignalBindingDefinitions(this.containingTransition().getToolspecificList()); - } } diff --git a/src/main/jastadd/base/io/IoPN.relast b/src/main/jastadd/base/io/IoPN.relast index dfaa8d28235f6eb6a8683c06f04240c84a6c9b6e..f80c79bd4163d0805db12e2c789d7a3bd36bf4f1 100644 --- a/src/main/jastadd/base/io/IoPN.relast +++ b/src/main/jastadd/base/io/IoPN.relast @@ -1,22 +1,20 @@ +// Elements +DinerosTransition : Transition ::= /StaticTransitionInformation:TransitionInformation/ [MutableTransitionInformation:TransitionInformation]; +DinerosPlace : Place ::= /StaticPlaceInformation:PlaceInformation/ [MutablePlaceInformation:PlaceInformation]; + // General Information -abstract PnObjectInformation ::= <Node:String> <SubNet:String> <Instance:String> <TraceInfo:String>; +abstract PnObjectInformation ::= <Node:String> <SubNet:String> <TraceInfo:String>; PlaceInformation : PnObjectInformation; +// Transition Information +abstract TransitionInformation : PnObjectInformation; +TopicTransitionInformation : TransitionInformation ::= <Topic:String> SubscriberPort:SubscriberPort* PublisherPort:PublisherPort*; +ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String> ServerChannel:ServiceChannel ClientChannel:ServiceChannel*; +SignalTransitionInformation : TransitionInformation ::= Clause:InputSignalClause; /* only normal transition have signals attached */ + // Ports abstract Port; abstract TopicPort : Port ::= <PlaceId:String> <Limit:int>; SubscriberPort : TopicPort; PublisherPort : TopicPort; -ServiceChannel : Port ::= <RequestPort:String> <ResponsePort:String>; - -// Transition Information -InputSignalBinding ::= <InputSignalId:String>; -abstract TransitionInformation : PnObjectInformation ::= <Type:String>; -TopicTransitionInformation : TransitionInformation ::= <Topic:String> SubscriberPort:SubscriberPort* PublisherPort:PublisherPort*; -ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String> <ServerInput:String> <ServerOutput:String> ServiceChannel:ServiceChannel*; -DefaultTransitionInformation : TransitionInformation ::= InputSignal:InputSignalBinding* /Clause:InputSignalClause/; /* only normal transition have signals attached */ - -// Elements -DinerosTransition : Transition ::= /StaticTransitionInformation:TransitionInformation/ [MutableTransitionInformation:TransitionInformation]; -DinerosPlace : Place ::= /StaticPlaceInformation:PlaceInformation/ [MutablePlaceInformation:PlaceInformation]; - +ServiceChannel : Port ::= <RequestPlaceId:String> <ResponsePlaceId:String> <Id:String>; \ No newline at end of file diff --git a/src/main/jastadd/base/parsing/PnmlSignalParser.jadd b/src/main/jastadd/base/parsing/PnmlSignalParser.jadd index 23dc214456b333f1fdbeeaa4512a675f3428a466..29dc90ca0621f63431c8048e1b63650317f53872 100644 --- a/src/main/jastadd/base/parsing/PnmlSignalParser.jadd +++ b/src/main/jastadd/base/parsing/PnmlSignalParser.jadd @@ -17,54 +17,6 @@ public class PnmlSignalParser { private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(PnmlSignalParser.class); - public static JastAddList<InputSignalBinding> parseInputSignalBindingDefinitions(JastAddList<ToolInfo> toolInfos) { - - try { - Document doc = parseToolSpecifics(toolInfos); - return parseInputSignalBindingDefinitionsInternal(doc); - - } catch (ParserConfigurationException | SAXException | IOException e) { - logger.error(e.getMessage()); - } - - return null; - } - - private static JastAddList<InputSignalBinding> parseInputSignalBindingDefinitionsInternal(Document doc) { - - if (doc == null) { - return null; - } - - org.w3c.dom.NodeList isBindingDefList = doc.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_BINDING_KEY); - JastAddList<InputSignalBinding> jastAddBindingList = new JastAddList<>(); - - if (isBindingDefList.getLength() > 0 && isBindingDefList.item(0) != null) { - - org.w3c.dom.Node isBindingsNode = isBindingDefList.item(0); - - - if (isBindingsNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) { - - Element isBindingsElement = (Element) isBindingsNode; - - org.w3c.dom.NodeList isBindingNodes = isBindingsElement.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_SIGNAL_KEY); - - for (int i = 0; i < isBindingNodes.getLength(); i++) { - - org.w3c.dom.Node isBindingNode = isBindingNodes.item(i); - Element isBindingElement = (Element) isBindingNode; - - InputSignalBinding isb = new InputSignalBinding(); - isb.setInputSignalId(isBindingElement.getTextContent()); - - jastAddBindingList.add(isb); - } - } - } - return jastAddBindingList; - } - private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException { if (toolInfos == null || toolInfos.getNumChild() == 0) { diff --git a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd index 7ecb26fda5370a2bada1e20d685d11b3a0fcd0ed..d8e1f218ee0202a3df834f8b7eb2ed1f70a5ac85 100644 --- a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd +++ b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd @@ -150,6 +150,10 @@ aspect ToolSpecificsParser{ return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.NODE_KEY); } + public static String getChannelIdFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { + return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_CHANNEL_ID_KEY); + } + public static String getServerInputFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_SERVER_IN_KEY); } @@ -339,8 +343,9 @@ aspect ToolSpecificsParser{ } if(listKey.equals(PnmlConstants.TRANSITION_SERVICE_CHANNELS_KEY)){ ServiceChannel sc = new ServiceChannel(); - sc.setRequestPort(portField1); - sc.setRequestPort(portField2); + sc.setRequestPlaceId(portField1); + sc.setResponsePlaceId(portField2); + sc.setId(pDefElement.getElementsByTagName(PnmlConstants.TRANSITION_SERVICE_CHANNEL_ID_KEY).item(0).getTextContent()); ports.add(sc); } } @@ -358,7 +363,7 @@ aspect ToolSpecificsParser{ if (getTransitionTopicFromToolSpecifics(toolInfos) != null) { TopicTransitionInformation topicTransition = new TopicTransitionInformation(); topicTransition.setNode(getNodeFromToolSpecifics(toolInfos)); - topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); + // topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos)); topicTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); @@ -386,7 +391,7 @@ aspect ToolSpecificsParser{ if (getTransitionServiceNameFromToolSpecifics(toolInfos) != null) { ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation(); serviceTransition.setNode(getNodeFromToolSpecifics(toolInfos)); - serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); + // serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); serviceTransition.setServiceName(getTransitionServiceNameFromToolSpecifics(toolInfos)); serviceTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); @@ -396,15 +401,15 @@ aspect ToolSpecificsParser{ PnmlConstants.TRANSITION_SERVICE_REQUEST_KEY, PnmlConstants.TRANSITION_SERVICE_RESPONSE_KEY); for(Port s : servicePorts){ - serviceTransition.addServiceChannel(s.asServiceChannel()); + serviceTransition.addClientChannel(s.asServiceChannel()); } return serviceTransition; } - DefaultTransitionInformation transitionInformation = new DefaultTransitionInformation(); + SignalTransitionInformation transitionInformation = new SignalTransitionInformation(); transitionInformation.setNode(getNodeFromToolSpecifics(toolInfos)); - transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos)); + //transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos)); transitionInformation.setSubNet(getTransitionSubnetInfo(toolInfos)); return transitionInformation; diff --git a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java index fb6a46642c66ef4b47c893d214d8fa635b9d2d16..ab1fc8bd601ea5c5d2687a2f6bdf3594bc5975b9 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java @@ -1,8 +1,16 @@ package de.tudresden.inf.st.pnml.base; +import beaver.Parser; +import de.tudresden.inf.st.pnml.jastadd.model.InputSignalClause; +import de.tudresden.inf.st.pnml.jastadd.parser.ExpressionParser; +import de.tudresden.inf.st.pnml.jastadd.scanner.ExpressionScanner; + +import java.io.IOException; +import java.io.StringReader; + public class Main { - public static void main(String[] args) { + public static void main(String[] args) throws IOException, Parser.Exception { // Nothing to do here // List<PetriNet> petriNets = PnmlParser.parsePnml("..."); diff --git a/src/main/resources/nets/TestNet2.pnml b/src/main/resources/nets/TestNet2.pnml index 995cf0334da084faa950a775a9ec4f2c82db591e..63df430a0a3f6a1b31a913206a7e1956885c25ff 100644 --- a/src/main/resources/nets/TestNet2.pnml +++ b/src/main/resources/nets/TestNet2.pnml @@ -58,6 +58,7 @@ <serverOutput>serverOut</serverOutput> <channels> <channel> + <cid>c1</cid> <request>req1</request> <response>res1</response> </channel> diff --git a/src/main/resources/nets/TestNet3.pnml b/src/main/resources/nets/TestNet3.pnml index d1a7cc9fa4acfe3b1163705a8f2cee9ba21bd537..15362bcc04e506315fa80a9aa76dc83e6178d864 100644 --- a/src/main/resources/nets/TestNet3.pnml +++ b/src/main/resources/nets/TestNet3.pnml @@ -24,10 +24,6 @@ <node>n1</node> <subnet>s1</subnet> <type>discreteTransitionType</type> - <inputsignalbinding> - <signal>is1</signal> - <signal>is2</signal> - </inputsignalbinding> <inputsignalclause>(is1 OR NOT is2) AND (is1 OR is2)</inputsignalclause> </toolspecific> <name>