diff --git a/build.gradle b/build.gradle index fae5d2b811356606b494c85b5f92261b2d3a9376..5d9812f293ba26725ba2642f75f78ec80493487b 100644 --- a/build.gradle +++ b/build.gradle @@ -84,9 +84,10 @@ task relastToJastAdd(type: JavaExec) { "--jastAddList=JastAddList", "--resolverHelper", "--file", - relastFile + relastFile, + "./src/main/jastadd/marking/Marking.relast" - inputs.files relastFile + inputs.files relastFile, file("./src/main/jastadd/marking/Marking.relast") outputs.files file("./src/gen/jastadd/placeTransition.ast"), file("./src/gen/jastadd/placeTransition.jadd") } diff --git a/src/main/jastadd/marking/Marking.jrag b/src/main/jastadd/marking/Marking.jrag new file mode 100644 index 0000000000000000000000000000000000000000..93a7ec3f2b1691c48798cdd33be12d144ca8fd6e --- /dev/null +++ b/src/main/jastadd/marking/Marking.jrag @@ -0,0 +1,27 @@ +aspect Marking { + public Marking PetriNet.initialMarking() { + Marking marking = new Marking(); + marking.setPetriNet(this); + for (Place place : allPlaces()) { + MarkedPlace markedPlace = new MarkedPlace(); + markedPlace.setPlace(place); + if (place.hasInitialMarking() && place.getInitialMarking().getText() != null) { + markedPlace.setMarking(place.getInitialMarking().getText()); + } else { + markedPlace.setMarking(0); + } + marking.addPlace(markedPlace); + } + return marking; + } + + syn MarkedPlace Marking.resolvePlace(Place place) = placeMap().get(place); + + syn lazy java.util.Map<Place, MarkedPlace> Marking.placeMap() { + java.util.Map<Place, MarkedPlace> map = new java.util.HashMap<>(); + for (MarkedPlace markedPlace : getPlaceList()) { + map.put(markedPlace.getPlace(), markedPlace); + } + return map; + } +} diff --git a/src/main/jastadd/marking/Marking.relast b/src/main/jastadd/marking/Marking.relast new file mode 100644 index 0000000000000000000000000000000000000000..335ed8c6513a9b8faa033f60c38e9b41ac516b05 --- /dev/null +++ b/src/main/jastadd/marking/Marking.relast @@ -0,0 +1,5 @@ +Marking ::= Place:MarkedPlace*; +MarkedPlace ::= <Marking:int>; + +rel Marking.PetriNet -> PetriNet; +rel MarkedPlace.Place -> Place; diff --git a/src/main/jastadd/marking/Printing.jrag b/src/main/jastadd/marking/Printing.jrag new file mode 100644 index 0000000000000000000000000000000000000000..66bd662a6cf90e48c7f4bbd3842aced901391157 --- /dev/null +++ b/src/main/jastadd/marking/Printing.jrag @@ -0,0 +1,10 @@ +aspect Printing { + syn String Marking.print() { + StringBuilder b = new StringBuilder(); + b.append("Marking for Petri net '").append(getPetriNet().getId()).append("':\n"); + for (MarkedPlace place : getPlaceList()) { + b.append(" ").append(place.getPlace().getId()).append(": ").append(place.getMarking()).append("\n"); + } + return b.toString(); + } +} diff --git a/src/main/java/de/tudresden/inf/st/pnml/Main.java b/src/main/java/de/tudresden/inf/st/pnml/Main.java index 91a499f4fbea71db4661573153d55415f285e22a..25690ef3d799b00128b1c54b5b6a9f14e37e3145 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/Main.java @@ -24,6 +24,14 @@ public class Main { String fileName = "src/main/resources/minimal.pnml"; + List<PetriNet> petriNets = parsePnml(fileName); + + for (PetriNet petriNet : petriNets) { + logger.info(petriNet.initialMarking().print()); + } + } + + private static List<PetriNet> parsePnml(String fileName) { Path file = Paths.get(fileName); HLAPIRootClass document = null; @@ -40,13 +48,15 @@ public class Main { logger.info("Imported document workspace ID: {}", ModelRepository.getInstance().getCurrentDocWSId()); + List<PetriNet> petriNets = new ArrayList<>(); + PNType type = PNMLUtils.determinePNType(document); switch (type) { case PTNET: PetriNetDocHLAPI ptDoc = (PetriNetDocHLAPI) document; - List<PetriNet> petriNets = new ArrayList<>(); + for (fr.lip6.move.pnml.ptnet.PetriNet pmnlNet : ptDoc.getNets()) { PnmlParser parser; @@ -67,6 +77,7 @@ public class Main { logger.error("Petri net is of unsupported type {}.", type.getLiteral()); System.exit(-1); } + return petriNets; } }