From b380df29d8c015ab3f800522c0cc0acc7a66ec6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Henning?= <stu114708@informatik.uni-kiel.de> Date: Thu, 25 Feb 2016 11:01:30 +0100 Subject: [PATCH] add graph exporter --- .../analysis/graph/BlueprintsExporter.java | 58 ------------------- .../java/kieker/analysis/graph/Graph.java | 4 ++ .../kieker/analysis/graph/GraphTester.java | 7 ++- .../graph/export/AbstractExporter.java | 33 +++++++++++ .../graph/export/BlueprintsExporter.java | 53 +++++++++++++++++ .../analysis/graph/export/DotExporter.java | 38 ++++++++++++ .../analysis/graph/export/Exporter.java | 10 ++++ .../kieker/analysis/graph/impl/GraphImpl.java | 12 ++++ 8 files changed, 156 insertions(+), 59 deletions(-) delete mode 100644 src/main/java/kieker/analysis/graph/BlueprintsExporter.java create mode 100644 src/main/java/kieker/analysis/graph/export/AbstractExporter.java create mode 100644 src/main/java/kieker/analysis/graph/export/BlueprintsExporter.java create mode 100644 src/main/java/kieker/analysis/graph/export/DotExporter.java create mode 100644 src/main/java/kieker/analysis/graph/export/Exporter.java diff --git a/src/main/java/kieker/analysis/graph/BlueprintsExporter.java b/src/main/java/kieker/analysis/graph/BlueprintsExporter.java deleted file mode 100644 index 76298500..00000000 --- a/src/main/java/kieker/analysis/graph/BlueprintsExporter.java +++ /dev/null @@ -1,58 +0,0 @@ -package kieker.analysis.graph; - -import java.util.HashMap; -import java.util.Map; - -import com.tinkerpop.blueprints.impls.tg.TinkerGraph; - -public class BlueprintsExporter { - - private final Graph graph; - private final com.tinkerpop.blueprints.Graph exportGraph = new TinkerGraph(); - private final Map<Vertex, com.tinkerpop.blueprints.Vertex> mappedVertices = new HashMap<>(); - - private static final String LABEL_PROPERTY = "label"; - - public BlueprintsExporter(final Graph graph) { - this.graph = graph; - } - - public com.tinkerpop.blueprints.Graph exportGraph() { - - mapVertices(); - mapEdges(); - - return exportGraph; - - } - - private void mapVertices() { - - for (final Vertex vertex : graph.getVertices()) { - com.tinkerpop.blueprints.Vertex mappedVertex = exportGraph.addVertex(vertex.getId()); - mappedVertices.put(vertex, mappedVertex); - for (final String propertyKey : vertex.getPropertyKeys()) { - mappedVertex.setProperty(propertyKey, vertex.getProperty(propertyKey)); - } - } - - } - - private void mapEdges() { - - for (final Edge edge : graph.getEdges()) { - final com.tinkerpop.blueprints.Vertex mappedInVertex = mappedVertices.get(edge.getVertex(Direction.IN)); - final com.tinkerpop.blueprints.Vertex mappedOutVertex = mappedVertices.get(edge.getVertex(Direction.OUT)); - String label = edge.getProperty(LABEL_PROPERTY); - if (label == null) { - label = ""; - } - com.tinkerpop.blueprints.Edge mappedEdge = exportGraph.addEdge(edge.getId(), mappedOutVertex, mappedInVertex, label); - for (final String propertyKey : edge.getPropertyKeys()) { - mappedEdge.setProperty(propertyKey, edge.getProperty(propertyKey)); - } - } - - } - -} diff --git a/src/main/java/kieker/analysis/graph/Graph.java b/src/main/java/kieker/analysis/graph/Graph.java index d2c9a59e..36593bf6 100644 --- a/src/main/java/kieker/analysis/graph/Graph.java +++ b/src/main/java/kieker/analysis/graph/Graph.java @@ -2,6 +2,10 @@ package kieker.analysis.graph; public interface Graph { + public String getName(); + + public void setName(String name); + public Vertex addVertex(Object id); public Vertex getVertex(Object id); diff --git a/src/main/java/kieker/analysis/graph/GraphTester.java b/src/main/java/kieker/analysis/graph/GraphTester.java index b325c87b..6015525c 100644 --- a/src/main/java/kieker/analysis/graph/GraphTester.java +++ b/src/main/java/kieker/analysis/graph/GraphTester.java @@ -1,5 +1,7 @@ package kieker.analysis.graph; +import kieker.analysis.graph.export.BlueprintsExporter; +import kieker.analysis.graph.export.DotExporter; import kieker.analysis.graph.impl.GraphImpl; public class GraphTester { @@ -77,7 +79,10 @@ public class GraphTester { // Export to Blueprints BlueprintsExporter blueprintsExporter = new BlueprintsExporter(graph); - System.out.println(blueprintsExporter.exportGraph()); + System.out.println(blueprintsExporter.export()); + + DotExporter dotExporter = new DotExporter(graph); + System.out.println(dotExporter.export()); } diff --git a/src/main/java/kieker/analysis/graph/export/AbstractExporter.java b/src/main/java/kieker/analysis/graph/export/AbstractExporter.java new file mode 100644 index 00000000..05cc3b13 --- /dev/null +++ b/src/main/java/kieker/analysis/graph/export/AbstractExporter.java @@ -0,0 +1,33 @@ +package kieker.analysis.graph.export; + +import kieker.analysis.graph.Edge; +import kieker.analysis.graph.Graph; +import kieker.analysis.graph.Vertex; + +public abstract class AbstractExporter<O> { + + protected Graph graph; + + public AbstractExporter(final Graph graph) { + this.graph = graph; + } + + public final O export() { + + for (final Vertex vertex : graph.getVertices()) { + mapVertex(vertex); + } + + for (final Edge edge : graph.getEdges()) { + mapEdge(edge); + } + + return getExport(); + } + + protected abstract void mapVertex(Vertex vertex); + + protected abstract void mapEdge(Edge edge); + + protected abstract O getExport(); +} diff --git a/src/main/java/kieker/analysis/graph/export/BlueprintsExporter.java b/src/main/java/kieker/analysis/graph/export/BlueprintsExporter.java new file mode 100644 index 00000000..710777f0 --- /dev/null +++ b/src/main/java/kieker/analysis/graph/export/BlueprintsExporter.java @@ -0,0 +1,53 @@ +package kieker.analysis.graph.export; + +import java.util.HashMap; +import java.util.Map; + +import com.tinkerpop.blueprints.impls.tg.TinkerGraph; + +import kieker.analysis.graph.Direction; +import kieker.analysis.graph.Edge; +import kieker.analysis.graph.Graph; +import kieker.analysis.graph.Vertex; + +public class BlueprintsExporter extends AbstractExporter<com.tinkerpop.blueprints.Graph> { + + private final com.tinkerpop.blueprints.Graph exportGraph = new TinkerGraph(); + private final Map<Vertex, com.tinkerpop.blueprints.Vertex> mappedVertices = new HashMap<>(); + + private static final String LABEL_PROPERTY = "label"; + + public BlueprintsExporter(final Graph graph) { + super(graph); + } + + @Override + protected void mapVertex(final Vertex vertex) { + com.tinkerpop.blueprints.Vertex mappedVertex = exportGraph.addVertex(vertex.getId()); + mappedVertices.put(vertex, mappedVertex); + for (final String propertyKey : vertex.getPropertyKeys()) { + mappedVertex.setProperty(propertyKey, vertex.getProperty(propertyKey)); + } + + } + + @Override + protected void mapEdge(final Edge edge) { + final com.tinkerpop.blueprints.Vertex mappedInVertex = mappedVertices.get(edge.getVertex(Direction.IN)); + final com.tinkerpop.blueprints.Vertex mappedOutVertex = mappedVertices.get(edge.getVertex(Direction.OUT)); + String label = edge.getProperty(LABEL_PROPERTY); + if (label == null) { + label = ""; + } + com.tinkerpop.blueprints.Edge mappedEdge = exportGraph.addEdge(edge.getId(), mappedOutVertex, mappedInVertex, label); + for (final String propertyKey : edge.getPropertyKeys()) { + mappedEdge.setProperty(propertyKey, edge.getProperty(propertyKey)); + } + } + + @Override + protected com.tinkerpop.blueprints.Graph getExport() { + return exportGraph; + } + +} diff --git a/src/main/java/kieker/analysis/graph/export/DotExporter.java b/src/main/java/kieker/analysis/graph/export/DotExporter.java new file mode 100644 index 00000000..72eaee2a --- /dev/null +++ b/src/main/java/kieker/analysis/graph/export/DotExporter.java @@ -0,0 +1,38 @@ +package kieker.analysis.graph.export; + +import kieker.analysis.graph.Direction; +import kieker.analysis.graph.Edge; +import kieker.analysis.graph.Graph; +import kieker.analysis.graph.Vertex; +import kieker.analysis.util.DotBuilder; + +public class DotExporter extends AbstractExporter<String> { + + private final DotBuilder dotBuilder; + + public DotExporter(final Graph graph) { + super(graph); + dotBuilder = new DotBuilder(graph.getName()); + } + + @Override + protected void mapVertex(final Vertex vertex) { + dotBuilder.addNode(vertex.getId().toString()); + // TODO Add style, label, etc + // TODO Handle child graph + } + + @Override + protected void mapEdge(final Edge edge) { + String sourceId = edge.getVertex(Direction.OUT).getId().toString(); + String targetId = edge.getVertex(Direction.IN).getId().toString(); + dotBuilder.addEdge(sourceId, targetId); + // TODO Add style, label, etc + } + + @Override + protected String getExport() { + return dotBuilder.get(); + } + +} diff --git a/src/main/java/kieker/analysis/graph/export/Exporter.java b/src/main/java/kieker/analysis/graph/export/Exporter.java new file mode 100644 index 00000000..7acabe6c --- /dev/null +++ b/src/main/java/kieker/analysis/graph/export/Exporter.java @@ -0,0 +1,10 @@ +package kieker.analysis.graph.export; + +import kieker.analysis.graph.Graph; + +//TODO maybe no interface required +public interface Exporter<O> { + + public O export(Graph graph); + +} diff --git a/src/main/java/kieker/analysis/graph/impl/GraphImpl.java b/src/main/java/kieker/analysis/graph/impl/GraphImpl.java index 9848b4d4..2dc03d57 100644 --- a/src/main/java/kieker/analysis/graph/impl/GraphImpl.java +++ b/src/main/java/kieker/analysis/graph/impl/GraphImpl.java @@ -11,6 +11,8 @@ import kieker.analysis.graph.Vertex; public class GraphImpl implements Graph { + protected String name = "G"; + protected Map<String, Vertex> vertices = new HashMap<String, Vertex>(); protected Map<String, Edge> edges = new HashMap<String, Edge>(); @@ -126,4 +128,14 @@ public class GraphImpl implements Graph { return idString; } + @Override + public String getName() { + return this.name; + } + + @Override + public void setName(final String name) { + this.name = name; + } + } -- GitLab