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