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 0000000000000000000000000000000000000000..18773f3e2ee0305b5ad50029de1783e1c737a6ec --- /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 0000000000000000000000000000000000000000..6a5de1d3e88765517bb759adbfcacec40015d5cf --- /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 182bad4333d775b6b36c8a116b8c75571adb113f..46b3f56263cbdaabed1e7068eb1d42b0133a3cdc 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 0000000000000000000000000000000000000000..b1bce427bdce93708bc490afdd2be3d4ed2877d3 --- /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 046ac6cec66f674c942448d60cc49479abdcf969..ed74bb2324fa6d2eceb68f8d6957639193407426 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 0000000000000000000000000000000000000000..ed5039947d79e2092e33ea212dcbf63e5a1901c2 --- /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); + +}