From df9884ada7294aaaed3e704cb758d3769632e6d5 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Tue, 23 Jun 2020 19:50:06 +0200 Subject: [PATCH] very simple dot visualization added --- src/main/jastadd/Graphviz.jrag | 41 +++++++++++++++++++ src/main/jastadd/Navigation.jrag | 5 +++ .../java/de/tudresden/inf/st/pnml/Main.java | 2 + 3 files changed, 48 insertions(+) create mode 100644 src/main/jastadd/Graphviz.jrag diff --git a/src/main/jastadd/Graphviz.jrag b/src/main/jastadd/Graphviz.jrag new file mode 100644 index 0000000..a66ae5c --- /dev/null +++ b/src/main/jastadd/Graphviz.jrag @@ -0,0 +1,41 @@ +aspect Graphviz { + syn String PetriNet.toDot() { + + StringBuffer b = new StringBuffer(); + + b.append("digraph G {\n") + .append("rankdir=LR;\n") + .append("center=true; margin=1;\n") + .append("\n") + .append("subgraph place {\n") + .append("node [shape=circle,fixedsize=true,label=\"\", height=.3,width=.3];\n"); + + for (Place place : allPlaces()) { + b.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(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(arc.getSource().dotId()).append("->").append(arc.getTarget().dotId()).append(";\n"); + } + b.append("}\n"); + + return b.toString(); + } + + syn String PnObject.dotId() = "\"" + getId().replaceAll("\"", "\\\"") + "\""; + +} diff --git a/src/main/jastadd/Navigation.jrag b/src/main/jastadd/Navigation.jrag index e84c14f..34cda81 100644 --- a/src/main/jastadd/Navigation.jrag +++ b/src/main/jastadd/Navigation.jrag @@ -52,4 +52,9 @@ aspect Navigation { Transition contributes this to PetriNet.allTransitions() for petriNet(); + + coll java.util.Set<Arc> PetriNet.allArcs() [new java.util.HashSet()] root PetriNet; + Arc contributes this + to PetriNet.allArcs() + for petriNet(); } 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 f1ec059..83d8b58 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/Main.java @@ -51,6 +51,8 @@ public class Main { logger.info("Original marking after {} firings: {}", i, originalMarking.print()); logger.info("Current marking after {} firings: {}", i, currentMarking.print()); } + + logger.info("DOT file:\n\n{}", petriNet.toDot()); } } -- GitLab