From 7fdd6c805d2083778e47295d2ca1f54ec9f8ac98 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=B6ren=20Henning?= <stu114708@informatik.uni-kiel.de>
Date: Thu, 31 Mar 2016 17:22:39 +0200
Subject: [PATCH] worked on dot export

---
 .../kieker/analysis/graph/GraphTester.java    |  5 ++
 .../graph/export/AbstractTransformer.java     |  1 -
 .../graph/export/dot/AbstractDotWriter.java   | 78 ++++++++++++++++++
 .../graph/export/dot/DotSubgraphWriter.java   | 64 +++++++++++++++
 .../analysis/graph/export/dot/DotWriter2.java | 81 +++++++++++++++++++
 5 files changed, 228 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/kieker/analysis/graph/export/dot/AbstractDotWriter.java
 create mode 100644 src/main/java/kieker/analysis/graph/export/dot/DotSubgraphWriter.java
 create mode 100644 src/main/java/kieker/analysis/graph/export/dot/DotWriter2.java

diff --git a/src/main/java/kieker/analysis/graph/GraphTester.java b/src/main/java/kieker/analysis/graph/GraphTester.java
index 418d6cf0..99a6ad24 100644
--- a/src/main/java/kieker/analysis/graph/GraphTester.java
+++ b/src/main/java/kieker/analysis/graph/GraphTester.java
@@ -1,7 +1,9 @@
 package kieker.analysis.graph;
 
+import java.io.OutputStreamWriter;
 import java.util.ArrayList;
 
+import kieker.analysis.graph.export.dot.DotWriter2;
 import kieker.analysis.graph.export.graphml.GraphMLExporter;
 import kieker.analysis.graph.impl.GraphImpl;
 
@@ -97,6 +99,9 @@ public class GraphTester {
 		GraphMLExporter graphMLExporter = new GraphMLExporter();
 		graphMLExporter.export(graph, System.out);
 
+		DotWriter2 dotWriter = new DotWriter2(graph, new OutputStreamWriter(System.out));
+		dotWriter.transform();
+
 		// DotExporter dotExporter = new DotExporter();
 		// dotExporter.export(graph, System.out);
 
diff --git a/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java b/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java
index d6f0c9ab..08c48d95 100644
--- a/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java
+++ b/src/main/java/kieker/analysis/graph/export/AbstractTransformer.java
@@ -8,7 +8,6 @@ import kieker.analysis.graph.traversal.FlatGraphTraverser;
 import kieker.analysis.graph.traversal.GraphTraverser;
 import kieker.analysis.graph.traversal.VertexVisitor;
 
-//TODO better name mapper
 public abstract class AbstractTransformer<O> implements VertexVisitor, EdgeVisitor {
 
 	private final GraphTraverser graphTraverser = new FlatGraphTraverser(this, this);
diff --git a/src/main/java/kieker/analysis/graph/export/dot/AbstractDotWriter.java b/src/main/java/kieker/analysis/graph/export/dot/AbstractDotWriter.java
new file mode 100644
index 00000000..4a1f6136
--- /dev/null
+++ b/src/main/java/kieker/analysis/graph/export/dot/AbstractDotWriter.java
@@ -0,0 +1,78 @@
+package kieker.analysis.graph.export.dot;
+
+import java.io.IOException;
+
+import kieker.analysis.graph.Direction;
+import kieker.analysis.graph.Edge;
+import kieker.analysis.graph.Graph;
+import kieker.analysis.graph.Vertex;
+import kieker.analysis.graph.export.AbstractTransformer;
+import kieker.analysis.graph.util.dot.DotWriter;
+
+class AbstractDotWriter extends AbstractTransformer<Void> {
+
+	private final DotWriter dotWriter;
+
+	public AbstractDotWriter(final Graph graph, final DotWriter dotWriter) {
+		super(graph);
+		this.dotWriter = dotWriter;
+
+		// TODO Better put this in own method
+		try {
+			dotWriter.start(graph.getName());
+			// TODO more stuff
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+	}
+
+	@Override
+	protected void mapVertex(final Vertex vertex) {
+		try {
+			if (vertex.hasChildGraph()) {
+				Graph childGraph = vertex.getChildGraph();
+
+				dotWriter.addClusterStart(childGraph.getName());
+				// TODO more stuff
+
+				DotSubgraphWriter dotWriter2 = new DotSubgraphWriter(childGraph, dotWriter);
+				dotWriter2.transform();
+
+				dotWriter.addClusterStop();
+			} else {
+
+				dotWriter.addNode(vertex.getId().toString(), null); // TODO
+
+			}
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+	}
+
+	@Override
+	protected void mapEdge(final Edge edge) {
+		// TODO Auto-generated method stub
+
+		try {
+
+			String sourceId = edge.getVertex(Direction.OUT).getId().toString();
+			String targetId = edge.getVertex(Direction.IN).getId().toString();
+			dotWriter.addEdge(sourceId, targetId); // TODO
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+
+	}
+
+	@Override
+	protected Void getTransformation() {
+		// TODO own method
+		try {
+			dotWriter.finish();
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+		return null;
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/graph/export/dot/DotSubgraphWriter.java b/src/main/java/kieker/analysis/graph/export/dot/DotSubgraphWriter.java
new file mode 100644
index 00000000..a7582a1a
--- /dev/null
+++ b/src/main/java/kieker/analysis/graph/export/dot/DotSubgraphWriter.java
@@ -0,0 +1,64 @@
+package kieker.analysis.graph.export.dot;
+
+import java.io.IOException;
+
+import kieker.analysis.graph.Direction;
+import kieker.analysis.graph.Edge;
+import kieker.analysis.graph.Graph;
+import kieker.analysis.graph.Vertex;
+import kieker.analysis.graph.export.AbstractTransformer;
+import kieker.analysis.graph.util.dot.DotWriter;
+
+class DotSubgraphWriter extends AbstractTransformer<Void> {
+
+	private final DotWriter dotWriter;
+
+	protected DotSubgraphWriter(final Graph graph, final DotWriter dotWriter) {
+		super(graph);
+		this.dotWriter = dotWriter;
+	}
+
+	@Override
+	protected void mapVertex(final Vertex vertex) {
+		try {
+			if (vertex.hasChildGraph()) {
+				Graph childGraph = vertex.getChildGraph();
+
+				dotWriter.addClusterStart(childGraph.getName());
+				// TODO more stuff
+
+				DotSubgraphWriter dotWriter2 = new DotSubgraphWriter(childGraph, dotWriter);
+				dotWriter2.transform();
+
+				dotWriter.addClusterStop();
+			} else {
+
+				dotWriter.addNode(vertex.getId().toString(), null); // TODO
+
+			}
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+	}
+
+	@Override
+	protected void mapEdge(final Edge edge) {
+		// TODO Auto-generated method stub
+
+		try {
+
+			String sourceId = edge.getVertex(Direction.OUT).getId().toString();
+			String targetId = edge.getVertex(Direction.IN).getId().toString();
+			dotWriter.addEdge(sourceId, targetId); // TODO
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+
+	}
+
+	@Override
+	protected Void getTransformation() {
+		return null;
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/graph/export/dot/DotWriter2.java b/src/main/java/kieker/analysis/graph/export/dot/DotWriter2.java
new file mode 100644
index 00000000..225203cb
--- /dev/null
+++ b/src/main/java/kieker/analysis/graph/export/dot/DotWriter2.java
@@ -0,0 +1,81 @@
+package kieker.analysis.graph.export.dot;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import kieker.analysis.graph.Direction;
+import kieker.analysis.graph.Edge;
+import kieker.analysis.graph.Graph;
+import kieker.analysis.graph.Vertex;
+import kieker.analysis.graph.export.AbstractTransformer;
+import kieker.analysis.graph.util.dot.DotWriter;
+
+//TODO rename
+public class DotWriter2 extends AbstractTransformer<Void> {
+
+	private final DotWriter dotWriter;
+	private DotSubgraphWriter dotSubgraphWriter;
+
+	public DotWriter2(final Graph graph, final Writer writer) {
+		super(graph);
+		this.dotWriter = new DotWriter(writer);
+
+		// TODO Better put this in own method
+		try {
+			dotWriter.start(graph.getName());
+			// TODO more stuff
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+	}
+
+	@Override
+	protected void mapVertex(final Vertex vertex) {
+		try {
+			if (vertex.hasChildGraph()) {
+				Graph childGraph = vertex.getChildGraph();
+
+				dotWriter.addClusterStart(childGraph.getName());
+				// TODO more stuff
+
+				DotSubgraphWriter dotWriter2 = new DotSubgraphWriter(childGraph, dotWriter);
+				dotWriter2.transform();
+
+				dotWriter.addClusterStop();
+			} else {
+
+				dotWriter.addNode(vertex.getId().toString(), null); // TODO
+
+			}
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+	}
+
+	@Override
+	protected void mapEdge(final Edge edge) {
+		// TODO Auto-generated method stub
+
+		try {
+
+			String sourceId = edge.getVertex(Direction.OUT).getId().toString();
+			String targetId = edge.getVertex(Direction.IN).getId().toString();
+			dotWriter.addEdge(sourceId, targetId); // TODO
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+
+	}
+
+	@Override
+	protected Void getTransformation() {
+		// TODO own method
+		try {
+			dotWriter.finish();
+		} catch (IOException e) {
+			// TODO Handle IO Exception
+		}
+		return null;
+	}
+
+}
-- 
GitLab