diff --git a/src/main/jastadd/Graphviz.jrag b/src/main/jastadd/Graphviz.jrag deleted file mode 100644 index 07ca5fcfd74cf449178e5a55b0a77dbed2074be6..0000000000000000000000000000000000000000 --- a/src/main/jastadd/Graphviz.jrag +++ /dev/null @@ -1,42 +0,0 @@ -aspect Graphviz { - syn String PetriNet.toDot() { - - StringBuffer b = new StringBuffer(); - - b.append("digraph \"").append(name()).append("\" {\n") - .append(" rankdir=LR;\n") - .append(" center=true; margin=1;\n") - .append("\n") - .append(" subgraph places {\n") - .append(" node [shape=circle,fixedsize=true,label=\"\", height=.3,width=.3];\n"); - - for (Place place : allPlaces()) { - b.append(" ").append(place.dotId()).append(" ["); - if (place.hasName()) b.append("xlabel=\"").append(place.name()).append("\", "); - b.append("label=\"").append("0").append("\"];\n"); - } - - b.append(" }\n\n"); - - b.append(" subgraph transitions {\n") - .append(" node [shape=rect,height=0.4,width=.4];\n"); - for (Transition transition : allTransitions()) { - b.append(" ").append(transition.dotId()).append(" ["); - if (transition.hasName()) b.append("label=\"").append(transition.name()).append("\""); - b.append("]\n"); - } - - b.append(" }\n\n"); - - for (Arc arc : allArcs()) { - b.append(" ").append(arc.getSource().dotId()).append("->").append(arc.getTarget().dotId()).append(";\n"); - } - b.append("}\n"); - - return b.toString(); - } - - syn String PetriNet.dotId() = "\"" + getId().replaceAll("\"", "\\\"") + "\""; - syn String PnObject.dotId() = "\"" + getId().replaceAll("\"", "\\\"") + "\""; - -} diff --git a/src/main/jastadd/distribution/DistributedPN.jadd b/src/main/jastadd/distribution/DistributedPN.jadd index 08110b5376eb37090d0f6f6b758a15d967f8ec55..68acb5399392d12dabfb478a362ea71b32ca0033 100644 --- a/src/main/jastadd/distribution/DistributedPN.jadd +++ b/src/main/jastadd/distribution/DistributedPN.jadd @@ -8,6 +8,14 @@ aspect PnDistribution { return de.tudresden.inf.st.pnml.ToolSpecificsParser.getTransitionTypeFromToolSpecifics(this.getToolspecificList()); } + syn lazy String Transition.topic(){ + return de.tudresden.inf.st.pnml.ToolSpecificsParser.getTopic(this.getToolspecificList()); + } + + syn lazy String Transition.subnetInfo(){ + return de.tudresden.inf.st.pnml.ToolSpecificsParser.getTransitionSubnetInfo(this.getToolspecificList()); + } + syn lazy String Place.location() { return de.tudresden.inf.st.pnml.ToolSpecificsParser.getLocationFromToolSpecifics(this.getToolspecificList()); } @@ -16,15 +24,15 @@ aspect PnDistribution { return de.tudresden.inf.st.pnml.ToolSpecificsParser.getPlaceTypeFromToolSpecifics(this.getToolspecificList()); } - syn lazy Boolean Transition.isLimitedChannelTransition() { - return de.tudresden.inf.st.pnml.ToolSpecificsParser.isLimitedChannelTransitionType(this.getToolspecificList()); + syn lazy String Place.subnetInfo(){ + return de.tudresden.inf.st.pnml.ToolSpecificsParser.getPlaceSubnetInfo(this.getToolspecificList()); } - syn lazy int Transition.channelLimit() { - return de.tudresden.inf.st.pnml.ToolSpecificsParser.getLimitedChannelTransitionValue(this.getToolspecificList()); + syn lazy Integer Transition.inputLimit(){ + return de.tudresden.inf.st.pnml.ToolSpecificsParser.getTransitionOutputLimit(this.getToolspecificList()); } - syn lazy String Transition.getTopic(){ - return de.tudresden.inf.st.pnml.ToolSpecificsParser.getTopic(this.getToolspecificList()); + syn lazy Integer Transition.outputLimit(){ + return de.tudresden.inf.st.pnml.ToolSpecificsParser.getTransitionInputLimit(this.getToolspecificList()); } } \ No newline at end of file diff --git a/src/main/jastadd/marking/Execution.jadd b/src/main/jastadd/marking/Execution.jadd deleted file mode 100644 index e6bda62525b76b1f417843802a6ed622ac30ead5..0000000000000000000000000000000000000000 --- a/src/main/jastadd/marking/Execution.jadd +++ /dev/null @@ -1,99 +0,0 @@ -import de.tudresden.inf.st.pnml.PnmlConstants; - -aspect Execution { - - public boolean Marking.fireInPlace() { - return fireInPlace(new Random()); - } - - public boolean Marking.fireInPlace(java.util.Random random) { - return fireInPlace(random, true).isPresent(); - } - - public Optional<Marking> Marking.fireTransition(Transition transition, boolean requireFlush) { - - if(transition.type().equals(PnmlConstants.TRANSITION_TYPE_DISCRETE)){ - - transition.incomingPlaces().forEach(place -> this.resolvePlace(place).setMarking(this.resolvePlace(place).getMarking()-1)); - transition.outgoingPlaces().forEach(place -> this.resolvePlace(place).setMarking(this.resolvePlace(place).getMarking()+1)); - - if (requireFlush) { - this.flushTreeCache(); - } - - return Optional.of(this); - } - return null; - } - - public Optional<Marking> Marking.fireChannelTransitionOutput(Transition transition, boolean requireFlush) { - - if(transition.type().equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_OUT) - || transition.type().equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_UNLIMITED_OUT)){ - - transition.incomingPlaces().forEach(place -> this.resolvePlace(place).setMarking(this.resolvePlace(place).getMarking()-1)); - - if (requireFlush) { - this.flushTreeCache(); - } - - return Optional.of(this); - } - return null; - } - - public Optional<Marking> Marking.fireChannelTransitionInput(Transition transition, boolean requireFlush) { - - if(transition.type().equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_IN) - || transition.type().equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_UNLIMITED_IN)){ - - transition.outgoingPlaces().forEach(place -> this.resolvePlace(place).setMarking(this.resolvePlace(place).getMarking()+1)); - - if (requireFlush) { - this.flushTreeCache(); - } - - return Optional.of(this); - } - return null; - } - - private Optional<Marking> Marking.fireInPlace(java.util.Random random, boolean requireFlush) { - if(enabledTransitions().isEmpty()) return Optional.empty(); - - // select a random transition - Transition transition = enabledTransitions().stream() - .sorted((t1, t2) -> t1.getId().compareTo(t2.getId())) - .skip(random.nextInt(enabledTransitions().size())) - .findFirst().get(); - - // take a token from each incoming place - transition.incomingPlaces().forEach(place -> this.resolvePlace(place).setMarking(this.resolvePlace(place).getMarking()-1)); - - // place a token in each outgoing place - transition.outgoingPlaces().forEach(place -> this.resolvePlace(place).setMarking(this.resolvePlace(place).getMarking()+1)); - - if (requireFlush) { - // flush the entire marking tree - this.flushTreeCache(); - } - - return Optional.of(this); - } - - public java.util.Collection<Place> Marking.collectIncomingPlace(Transition transition){ - return transition.incomingPlaces(); - } - - public java.util.Collection<Place> Marking.collectOutgoingPlace(Transition transition){ - return transition.outgoingPlaces(); - } - - public Optional<Marking> Marking.fire() { - return fire(new Random()); - } - - public Optional<Marking> Marking.fire(java.util.Random random) { - return treeCopyNoTransform().fireInPlace(random, false); - } -} diff --git a/src/main/java/de/tudresden/inf/st/pnml/PnmlConstants.java b/src/main/java/de/tudresden/inf/st/pnml/PnmlConstants.java index 956ffaa8191504651e31b32e462c1bca07102d86..c5bb3e52e7948e69de66b756e1c9b2e4829dde06 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/PnmlConstants.java +++ b/src/main/java/de/tudresden/inf/st/pnml/PnmlConstants.java @@ -5,14 +5,7 @@ public final class PnmlConstants { public static final String TRANSITION_TYPE_DISCRETE = "discreteTransitionType"; public static final String TRANSITION_TYPE_CONTINUOUS = "continuousTransitionType"; - public static final String TRANSITION_TYPE_CHANNEL_AC = "acChannelTransitionType"; - public static final String TRANSITION_TYPE_CHANNEL_NOT_AC = "notAcChannelTransitionType"; - public static final String TRANSITION_TYPE_CHANNEL_ACK_AC = "ackAcChannelTransitionType"; - public static final String TRANSITION_TYPE_CHANNEL_LIMITED_IN = "limitedChannelInType"; - public static final String TRANSITION_TYPE_CHANNEL_UNLIMITED_IN = "unlimitedChannelInType"; - - public static final String TRANSITION_TYPE_CHANNEL_LIMITED_OUT = "limitedChannelOutType"; - public static final String TRANSITION_TYPE_CHANNEL_UNLIMITED_OUT = "unlimitedChannelOutType"; + public static final String TRANSITION_TYPE_TOPIC = "topicTransitionType"; public static final String PLACE_TYPE_DISCRETE = "discretePlaceType"; public static final String PLACE_TYPE_CONTINUOUS = "continuousPlaceType"; diff --git a/src/main/java/de/tudresden/inf/st/pnml/ToolSpecificsParser.java b/src/main/java/de/tudresden/inf/st/pnml/ToolSpecificsParser.java index 3979a5928fdc47c4ad3b5819349c5c16dc20467a..8219bd70c8ea61f6cf975e17ec4fd39c99368319 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/ToolSpecificsParser.java +++ b/src/main/java/de/tudresden/inf/st/pnml/ToolSpecificsParser.java @@ -49,11 +49,7 @@ public class ToolSpecificsParser { if (typeList.getLength() > 0 && typeList.item(0) != null) { String type = typeList.item(0).getTextContent(); - if (type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_AC) || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_ACK_AC) || - type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_NOT_AC) || !type.equals(PnmlConstants.TRANSITION_TYPE_CONTINUOUS) - || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE) || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_IN) - || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_UNLIMITED_IN)|| type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_OUT) - || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_UNLIMITED_OUT)) { + if (!type.equals(PnmlConstants.TRANSITION_TYPE_CONTINUOUS) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE) || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) { return type; } else { logger.error("Error: Invalid transition type configured."); @@ -92,29 +88,6 @@ public class ToolSpecificsParser { return ""; } - public static Boolean isLimitedChannelTransitionType(JastAddList<ToolInfo> toolInfos) { - - if (toolInfos.getNumChild() > 0) { - try { - Document doc = parseToolSpecifics(toolInfos); - NodeList typeList = doc.getElementsByTagName(PnmlConstants.TYPE_KEY); - - if (typeList.getLength() > 0 && typeList.item(0) != null) { - String type = typeList.item(0).getTextContent(); - if ( type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_IN) || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_UNLIMITED_IN) - || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_OUT) || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_UNLIMITED_OUT)) { - return true; - } else { - return false; - } - } - } catch (ParserConfigurationException | SAXException | IOException e) { - logger.error(e.getMessage()); - } - } - return false; - } - public static String getTopic(JastAddList<ToolInfo> toolInfos) { if (toolInfos.getNumChild() > 0) { @@ -128,8 +101,7 @@ public class ToolSpecificsParser { String type = typeList.item(0).getTextContent(); - if ( type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_IN) || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_UNLIMITED_IN) - || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_OUT) || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_UNLIMITED_OUT)) { + if (type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) { return topicList.item(0).getTextContent(); } } @@ -142,28 +114,20 @@ public class ToolSpecificsParser { return null; } - public static int getLimitedChannelTransitionValue(JastAddList<ToolInfo> toolInfos) { + public static String getTransitionSubnetInfo(JastAddList<ToolInfo> toolInfos){ + return ""; + } + + public static String getPlaceSubnetInfo(JastAddList<ToolInfo> toolInfos){ + return ""; + } - if (toolInfos.getNumChild() > 0) { - try { - Document doc = parseToolSpecifics(toolInfos); - NodeList typeList = doc.getElementsByTagName(PnmlConstants.TYPE_KEY); + public static int getTransitionOutputLimit(JastAddList<ToolInfo> toolInfos) { + return 0; + } - if (typeList.getLength() > 0 && typeList.item(0) != null) { - String type = typeList.item(0).getTextContent(); - if (type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_IN) || type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_IN) - ||type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_IN) ||type.equals(PnmlConstants.TRANSITION_TYPE_CHANNEL_LIMITED_IN)) { - NodeList boundList = doc.getElementsByTagName(PnmlConstants.LIMIT_KEY); - return Integer.valueOf(boundList.item(0).getTextContent()); - } else { - return -1; - } - } - } catch (ParserConfigurationException | SAXException | IOException e) { - logger.error(e.getMessage()); - } - } - return -1; + public static int getTransitionInputLimit(JastAddList<ToolInfo> toolInfos) { + return 0; } private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException { diff --git a/src/main/resources/minimal_global.pnml b/src/main/resources/minimal_global.pnml new file mode 100644 index 0000000000000000000000000000000000000000..c6f66792af382d3d536886ef3bfa5462e7106ffe --- /dev/null +++ b/src/main/resources/minimal_global.pnml @@ -0,0 +1,125 @@ +<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>minimal</text> + </name> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.0.1"> + </toolspecific> + <page id="g-E2D0-BCF68-1"> + <place id="p1"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.0.1"> + <location>node-1</location> + <subnet>subnet-1</subnet> + <type>discretePlaceType</type> + <outputsignalbindings> + <outputsignalbinding> + <placeID>p1</placeID> + <outputsignalID>os2</outputsignalID> + <initialvalue>1</initialvalue> <!-- -1 = undefined --> + <outputmappings> + <equal> + <value>1</value> + <result>3</result> + </equal> + <equal> + <value>0</value> + <result>2</result> + </equal> + <threshold> + <value>6</value> + <result>0</result> + </threshold> + <range> + <upperbound>5</upperbound> + <lowerbound>3</lowerbound> + <result>1</result> + </range> + </outputmappings> + </outputsignalbinding> + </outputsignalbindings> + </toolspecific> + <name> + <text>p1</text> + <graphics> + <offset x="0" y="-10" /> + </graphics> + </name> + <initialMarking> + <text>1</text> + </initialMarking> + <graphics> + <position x="30" y="50"/> + </graphics> + </place> + <place id="p2"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.0.1"> + <location>node-1</location> + <subnet>subnet-1</subnet> + <type>discretePlaceType</type> + <outputsignalbindings> + <outputsignalbinding> + <placeID>p2</placeID> + <outputsignalID>os1</outputsignalID> + <initialvalue>4</initialvalue> <!-- -1 = undefined --> + <outputmappings> + <equal> + <value>1</value> + <result>1</result> + </equal> + <threshold> + <value>6</value> + <result>0</result> + </threshold> + <range> + <upperbound>5</upperbound> + <lowerbound>3</lowerbound> + <result>1</result> + </range> + </outputmappings> + </outputsignalbinding> + </outputsignalbindings> + </toolspecific> + <name> + <text>p2</text> + <graphics> + <offset x="0" y="-10" /> + </graphics> + </name> + <initialMarking> + <text>1</text> + </initialMarking> + <graphics> + <position x="635" y="90"/> + </graphics> + </place> + <transition id="t1"> + <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.0.1"> + <location>node-1</location> + <type>topicTransitionType</type> + <inputlimit>10</inputlimit> + <outputlimit>10</outputlimit> + <inputsignalbindings> + <inputsignalbinding> + <transitionID>t1</transitionID> + <inputsignalID>is1</inputsignalID> + <initialvalue>1</initialvalue> + </inputsignalbinding> + </inputsignalbindings> + </toolspecific> + <name> + <text>t1</text> + <graphics> + <offset x="0" y="0" /> + </graphics> + </name> + <graphics> + <position x="300" y="50"/> + </graphics> + </transition> + <arc id="arc-t2-p1" source="p1" target="t1"> + </arc> + <arc id="arc-p2-t2" source="t1" target="p2"> + </arc> + </page> + </net> +</pnml> \ No newline at end of file