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

fixes on clause parser, fixes on pn model

parent 07a23b0b
No related branches found
No related tags found
No related merge requests found
......@@ -21,19 +21,18 @@ aspect SignalExpressions {
for(Disjunction dj : getDisjunctionList()){
int i = 0;
for(Literal l : dj.getLiteralList()){
result += "(";
if(i < dj.getNumLiteral()){
for(Literal l : dj.getLiteralList()){
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++;
......
......@@ -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(){
......
......@@ -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());
}
}
......@@ -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];
......@@ -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 + ".");
......
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("...");
// 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());
}
}
List<PetriNet> petriNets = PnmlParser.parsePnml("/src/main/resources/nets/TestNet1.pnml");
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());
}
}
}
}*/
}
<?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
<?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>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment