From 2951150b4fb6dfc08bfcb934fd12c3ebbd4e448a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=B6ren=20Henning?= <stu114708@informatik.uni-kiel.de>
Date: Tue, 29 Mar 2016 12:15:31 +0200
Subject: [PATCH] provide traversal classes

---
 .../graph/traversal/DeepGraphTraverser.java   | 27 +++++++++
 .../analysis/graph/traversal/EdgeVisitor.java |  9 +++
 .../graph/traversal/FlatGraphTraverser.java   | 11 +++-
 .../graph/traversal/GraphTraverser.java       | 55 +++++++++++++++++++
 .../graph/traversal/NestedGraphTraverser.java |  1 +
 .../graph/traversal/VertexVisitor.java        |  9 +++
 6 files changed, 109 insertions(+), 3 deletions(-)
 create mode 100644 src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java
 create mode 100644 src/main/java/kieker/analysis/graph/traversal/EdgeVisitor.java
 create mode 100644 src/main/java/kieker/analysis/graph/traversal/GraphTraverser.java
 create mode 100644 src/main/java/kieker/analysis/graph/traversal/VertexVisitor.java

diff --git a/src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java b/src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java
new file mode 100644
index 00000000..18773f3e
--- /dev/null
+++ b/src/main/java/kieker/analysis/graph/traversal/DeepGraphTraverser.java
@@ -0,0 +1,27 @@
+package kieker.analysis.graph.traversal;
+
+import kieker.analysis.graph.Edge;
+import kieker.analysis.graph.Graph;
+import kieker.analysis.graph.Vertex;
+
+public class DeepGraphTraverser extends GraphTraverser {
+
+	@Override
+	public void traverse(final Graph graph) {
+		for (final Vertex vertex : graph.getVertices()) {
+			for (final VertexVisitor visitor : vertexVisitors) {
+				visitor.visitVertex(vertex);
+			}
+			if (vertex.hasChildGraph()) {
+				traverse(vertex.getChildGraph());
+			}
+		}
+
+		for (final Edge edge : graph.getEdges()) {
+			for (final EdgeVisitor visitor : edgeVisitors) {
+				visitor.visitEdge(edge);
+			}
+		}
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/graph/traversal/EdgeVisitor.java b/src/main/java/kieker/analysis/graph/traversal/EdgeVisitor.java
new file mode 100644
index 00000000..6a5de1d3
--- /dev/null
+++ b/src/main/java/kieker/analysis/graph/traversal/EdgeVisitor.java
@@ -0,0 +1,9 @@
+package kieker.analysis.graph.traversal;
+
+import kieker.analysis.graph.Edge;
+
+public interface EdgeVisitor {
+
+	public void visitEdge(Edge edge);
+
+}
diff --git a/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java b/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java
index 182bad43..46b3f562 100644
--- a/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java
+++ b/src/main/java/kieker/analysis/graph/traversal/FlatGraphTraverser.java
@@ -4,16 +4,21 @@ import kieker.analysis.graph.Edge;
 import kieker.analysis.graph.Graph;
 import kieker.analysis.graph.Vertex;
 
-public class FlatGraphTraverser {
+public class FlatGraphTraverser extends GraphTraverser {
 
+	@Override
 	public void traverse(final Graph graph) {
 
 		for (Vertex vertex : graph.getVertices()) {
-			// TODO call (vertex) visitor
+			for (VertexVisitor visitor : vertexVisitors) {
+				visitor.visitVertex(vertex);
+			}
 		}
 
 		for (Edge edge : graph.getEdges()) {
-			// TODO Call (edge)visitor
+			for (EdgeVisitor visitor : edgeVisitors) {
+				visitor.visitEdge(edge);
+			}
 		}
 
 	}
diff --git a/src/main/java/kieker/analysis/graph/traversal/GraphTraverser.java b/src/main/java/kieker/analysis/graph/traversal/GraphTraverser.java
new file mode 100644
index 00000000..b1bce427
--- /dev/null
+++ b/src/main/java/kieker/analysis/graph/traversal/GraphTraverser.java
@@ -0,0 +1,55 @@
+package kieker.analysis.graph.traversal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import kieker.analysis.graph.Graph;
+
+public abstract class GraphTraverser {
+
+	protected List<VertexVisitor> vertexVisitors;
+	protected List<EdgeVisitor> edgeVisitors;
+
+	public GraphTraverser() {
+		this.vertexVisitors = new ArrayList<>();
+		this.edgeVisitors = new ArrayList<>();
+	}
+
+	public GraphTraverser(final VertexVisitor vertexVisitor, final EdgeVisitor edgeVisitor) {
+		this();
+		vertexVisitors.add(vertexVisitor);
+		edgeVisitors.add(edgeVisitor);
+	}
+
+	public GraphTraverser(final List<VertexVisitor> vertexVisitors, final List<EdgeVisitor> edgeVisitors) {
+		this.vertexVisitors = vertexVisitors;
+		this.edgeVisitors = edgeVisitors;
+	}
+
+	public List<VertexVisitor> getVertexVisitors() {
+		return vertexVisitors;
+	}
+
+	public void setVertexVisitors(final List<VertexVisitor> vertexVisitors) {
+		this.vertexVisitors = vertexVisitors;
+	}
+
+	public void addVertexVisitor(final VertexVisitor vertexVisitor) {
+		vertexVisitors.add(vertexVisitor);
+	}
+
+	public List<EdgeVisitor> getEdgeVisitors() {
+		return edgeVisitors;
+	}
+
+	public void setEdgeVisitors(final List<EdgeVisitor> edgeVisitors) {
+		this.edgeVisitors = edgeVisitors;
+	}
+
+	public void addEdgeVisitor(final EdgeVisitor edgeVisitor) {
+		edgeVisitors.add(edgeVisitor);
+	}
+
+	public abstract void traverse(final Graph graph);
+
+}
diff --git a/src/main/java/kieker/analysis/graph/traversal/NestedGraphTraverser.java b/src/main/java/kieker/analysis/graph/traversal/NestedGraphTraverser.java
index 046ac6ce..ed74bb23 100644
--- a/src/main/java/kieker/analysis/graph/traversal/NestedGraphTraverser.java
+++ b/src/main/java/kieker/analysis/graph/traversal/NestedGraphTraverser.java
@@ -5,6 +5,7 @@ import kieker.analysis.graph.Graph;
 import kieker.analysis.graph.Vertex;
 
 //TODO unused
+//TODO remove!
 public class NestedGraphTraverser {
 
 	public void traverse(final Graph graph) {
diff --git a/src/main/java/kieker/analysis/graph/traversal/VertexVisitor.java b/src/main/java/kieker/analysis/graph/traversal/VertexVisitor.java
new file mode 100644
index 00000000..ed503994
--- /dev/null
+++ b/src/main/java/kieker/analysis/graph/traversal/VertexVisitor.java
@@ -0,0 +1,9 @@
+package kieker.analysis.graph.traversal;
+
+import kieker.analysis.graph.Vertex;
+
+public interface VertexVisitor {
+
+	public void visitVertex(Vertex vertex);
+
+}
-- 
GitLab