diff --git a/src/main/jastadd/base/clauses/expressions.jadd b/src/main/jastadd/base/clauses/expressions.jadd index 0f1967fca191b3c50ec569d7b5240f933737e799..a5bba722a443aafd95d7c63eec14dea3c6c911d0 100644 --- a/src/main/jastadd/base/clauses/expressions.jadd +++ b/src/main/jastadd/base/clauses/expressions.jadd @@ -21,19 +21,18 @@ aspect SignalExpressions { for(Disjunction dj : getDisjunctionList()){ int i = 0; + result += "("; for(Literal l : dj.getLiteralList()){ - result += "("; - if(i < dj.getNumLiteral()){ + if(i < dj.getNumLiteral() - 1){ result += l.printClause() + " OR "; } else { result += l.printClause(); } - - result += ")"; i++; } + result += ")"; - if(j < getNumDisjunction()){ + if(j < getNumDisjunction() - 1){ result += " AND "; } j++; diff --git a/src/main/jastadd/base/distribution/DistributedPN.jadd b/src/main/jastadd/base/distribution/DistributedPN.jadd index ec3670335a08eea549c5b6114ba0bd72f814cb4c..a47045c60f261b5ee9049fa00312a49da0046248 100644 --- a/src/main/jastadd/base/distribution/DistributedPN.jadd +++ b/src/main/jastadd/base/distribution/DistributedPN.jadd @@ -39,8 +39,8 @@ aspect PnDistribution { return ToolSpecificsParser.getSubnetFromToolSpecifics(this.getToolspecificList()); } - syn lazy InputSignalClause DinerosTransition.getInputSignalClause(){ - return ToolSpecificsParser.getClauseFromToolSpecifics(this.getToolspecificList()); + syn lazy InputSignalClause DefaultTransitionInformation.getInputSignalClause(){ + return ToolSpecificsParser.getClauseFromToolSpecifics(this.containingTransition().getToolspecificList()); } syn lazy CommunicatorInformation PetriNet.getCommunicatorInformation(){ diff --git a/src/main/jastadd/base/io/IoPN.jadd b/src/main/jastadd/base/io/IoPN.jadd index eee4bfee05904a089c622c1ac2e371a8437efa7d..fd198879b7f5c00d39a510fe1b5cd5eb2dd11c78 100644 --- a/src/main/jastadd/base/io/IoPN.jadd +++ b/src/main/jastadd/base/io/IoPN.jadd @@ -3,4 +3,11 @@ aspect IoPnExtension{ inh Marking DinerosPlace.marking(); eq PetriNetDoc.getChild().marking() = null; eq Marking.getPetriNet().marking() = this; + + 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 9587cc3cf7d5d9b9e33863fa2ea314e296e2da53..dfaa8d28235f6eb6a8683c06f04240c84a6c9b6e 100644 --- a/src/main/jastadd/base/io/IoPN.relast +++ b/src/main/jastadd/base/io/IoPN.relast @@ -11,12 +11,12 @@ ServiceChannel : Port ::= <RequestPort:String> <ResponsePort:String>; // Transition Information InputSignalBinding ::= <InputSignalId:String>; -abstract TransitionInformation : PnObjectInformation ::= <Type:String> InputSignal:InputSignalBinding*; +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; +DefaultTransitionInformation : TransitionInformation ::= InputSignal:InputSignalBinding* /Clause:InputSignalClause/; /* only normal transition have signals attached */ // Elements -DinerosTransition : Transition ::= /StaticTransitionInformation:TransitionInformation/ [MutableTransitionInformation:TransitionInformation] /Clause:InputSignalClause/; +DinerosTransition : Transition ::= /StaticTransitionInformation:TransitionInformation/ [MutableTransitionInformation:TransitionInformation]; DinerosPlace : Place ::= /StaticPlaceInformation:PlaceInformation/ [MutablePlaceInformation:PlaceInformation]; diff --git a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd index 931d161549602888e1aba13fd46a69cdbce23503..7ecb26fda5370a2bada1e20d685d11b3a0fcd0ed 100644 --- a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd +++ b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd @@ -190,8 +190,8 @@ aspect ToolSpecificsParser{ if (typeList.getLength() > 0 && typeList.item(0) != null) { String type = typeList.item(0).getTextContent(); - if (!type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE) - || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) { + if (!type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE) || !type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE) + || !type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) { return type; } else { logger.error("Error: Invalid transition type configured: " + type + "."); 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 d643589b5e80a572d31eb0378fb22184e7b2468e..fb6a46642c66ef4b47c893d214d8fa635b9d2d16 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,16 +1,101 @@ package de.tudresden.inf.st.pnml.base; -import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; -import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser; - -import java.util.List; - public class Main { public static void main(String[] args) { // Nothing to do here - - List<PetriNet> petriNets = PnmlParser.parsePnml("/src/main/resources/nets/TestNet1.pnml"); + // List<PetriNet> petriNets = PnmlParser.parsePnml("..."); + // printNet(petriNets.get(0), false, false); } + + /*public static void printNet(PetriNet petriNet, boolean withArcs, boolean withToolSpecifics) { + + System.out.println("--------------- STRUCTURE ---------------"); + System.out.println("----------------- PLACES ----------------"); + + for (Place p : petriNet.allPlaces()) { + 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"); + } + } + + System.out.println("-------------- TRANSITIONS --------------"); + + for (Transition t : petriNet.allTransitions()) { + System.out.println("Transition " + t.getId()); + } + + 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.asDinerosTransition().incomingPlaces()) { + + System.out.println("------ Inputplace: " + p.getId() + " subnet: " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet() + " ---------"); + } + + for (Place p : t.asDinerosTransition().outgoingPlaces()) { + + System.out.println("------ Outputplace: " + p.getId() + " subnet: " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet() + " ---------"); + } + } + + System.out.println("----------------- REF PLACES -----------------"); + + for (RefPlace rp : petriNet.allRefPlaces()) { + System.out.println("--- RefPlace: " + rp.getId()); + } + + System.out.println("----------------- REF TRANSITIONS -----------------"); + + for (RefTransition rt : petriNet.allRefTransitions()) { + System.out.println("--- RefTransition: " + rt.getId()); + } + + if (withArcs) { + System.out.println("----------------- ARCS -----------------"); + + for (Arc a : petriNet.allArcs()) { + System.out.println("Arc: " + a.getId() + " -- source: " + a.getSource().getId() + " -- target: " + a.getTarget().getId()); + } + } + + + System.out.println("--------------- T SIGNALS (STATIC)---------------"); + + for (Transition t : petriNet.allTransitions()) { + DinerosTransition ist = t.asDinerosTransition(); + + if (ist != null && ist.getMutableTransitionInformation() == null) { + if(ist.getStaticTransitionInformation().isDefaultTransitionInformation()){ + System.out.println(ist.getStaticTransitionInformation().asDefaultTransitionInformation().getInputSignalClause().printClause()); + } + } + } + + if(withToolSpecifics) { + System.out.println("--------------- TOOL SPECIFIC ---------------"); + + for (Transition t : petriNet.allTransitions()) { + DinerosTransition ist = t.asDinerosTransition(); + if (ist != null && ist.getNumToolspecific() > 0) { + System.out.println("ToolSpecific: (" + ist.getName().getText() + ") " + ist.getToolspecific(0).getFormattedXMLBuffer().toString()); + } + } + } + }*/ } diff --git a/src/main/resources/nets/TestNet2.pnml b/src/main/resources/nets/TestNet2.pnml new file mode 100644 index 0000000000000000000000000000000000000000..995cf0334da084faa950a775a9ec4f2c82db591e --- /dev/null +++ b/src/main/resources/nets/TestNet2.pnml @@ -0,0 +1,110 @@ +<?xml version="1.0" encoding="UTF-8"?> +<pnml + xmlns="http://www.pnml.org/version-2009/grammar/pnml"> + <net id="n-E2D0-BCF46-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> + <name> + <text>ServiceNet</text> + </name> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <communicators> + <communicator> + <cType>serviceClient</cType> + <cSubnet>s1</cSubnet> + </communicator> + <communicator> + <cType>serviceServer</cType> + <cSubnet>s2</cSubnet> + </communicator> + </communicators> + </toolspecific> + <page id="top"> + <page id="sourcePage"> + <place id="req1"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <node>n1</node> + <subnet>s1</subnet> + </toolspecific> + <name> + <text>req1</text> + <graphics> + <offset x="0" y="0" /> + </graphics> + </name> + <graphics> + <position x="0" y="0" /> + </graphics> + </place> + <place id="res1"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <node>n1</node> + <subnet>s1</subnet> + </toolspecific> + <name> + <text>res1</text> + <graphics> + <offset x="0" y="0" /> + </graphics> + </name> + <graphics> + <position x="0" y="0" /> + </graphics> + </place> + </page> + <transition id="serviceTransition"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <type>serviceTransitionType</type> + <serviceName>sampleService</serviceName> + <serverInput>serverIn</serverInput> + <serverOutput>serverOut</serverOutput> + <channels> + <channel> + <request>req1</request> + <response>res1</response> + </channel> + </channels> + </toolspecific> + <name> + <text>serviceTransition</text> + <graphics> + <offset x="0" y="0" /> + </graphics> + </name> + <graphics> + <position x="0" y="0" /> + </graphics> + </transition> + <page id="targetPage"> + <place id="serverIn"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <node>n2</node> + <subnet>s2</subnet> + </toolspecific> + <name> + <text>serverIn</text> + <graphics> + <offset x="0" y="0" /> + </graphics> + </name> + <graphics> + <position x="0" y="0" /> + </graphics> + </place> + <place id="serverOut"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <node>n2</node> + <subnet>s2</subnet> + </toolspecific> + <name> + <text>serverOut</text> + <graphics> + <offset x="0" y="0" /> + </graphics> + </name> + <graphics> + <position x="0" y="0" /> + </graphics> + </place> + </page> + </page> + </net> +</pnml> \ No newline at end of file diff --git a/src/main/resources/nets/TestNet3.pnml b/src/main/resources/nets/TestNet3.pnml new file mode 100644 index 0000000000000000000000000000000000000000..d1a7cc9fa4acfe3b1163705a8f2cee9ba21bd537 --- /dev/null +++ b/src/main/resources/nets/TestNet3.pnml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<pnml + xmlns="http://www.pnml.org/version-2009/grammar/pnml"> + <net id="n-E2D0-BCF46-0" type="http://www.pnml.org/version-2009/grammar/ptnet"> + <name> + <text>SignalNet</text> + </name> + <!-- read via attribute --> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <inputsignals> + <inputsignal> + <inputsignalID>is1</inputsignalID> + <initialvalue>true</initialvalue> + </inputsignal> + <inputsignal> + <inputsignalID>is2</inputsignalID> + <initialvalue>false</initialvalue> + </inputsignal> + </inputsignals> + </toolspecific> + <page id="top"> + <transition id="t1"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1"> + <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> + <text>transition</text> + <graphics> + <offset x="0" y="0" /> + </graphics> + </name> + <graphics> + <position x="285" y="205" /> + </graphics> + </transition> + </page> + </net> +</pnml>