From dc86a0b13b46dc7d12892db75c17c353165708f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Henning?= <stu114708@informatik.uni-kiel.de> Date: Wed, 25 Nov 2015 14:55:42 +0100 Subject: [PATCH] Finish work on DotBuilder --- .../java/kieker/analysis/util/DotBuilder.java | 53 +++++++++++++++---- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/src/main/java/kieker/analysis/util/DotBuilder.java b/src/main/java/kieker/analysis/util/DotBuilder.java index c4c50f1e..e277d2a8 100644 --- a/src/main/java/kieker/analysis/util/DotBuilder.java +++ b/src/main/java/kieker/analysis/util/DotBuilder.java @@ -2,9 +2,16 @@ package kieker.analysis.util; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import com.google.common.base.Joiner; +/** + * Simple class for building and representing dot graph files. + * + * @author Sören Henning + * + */ public class DotBuilder { private final String start; @@ -15,16 +22,12 @@ public class DotBuilder { private Map<String, String> defaultEdgeProperties; private Map<String, String> defaultProperties; - /* - * TODO: Use default properties - */ - public DotBuilder() { this("G"); } public DotBuilder(final String name) { - start = "digraph " + name + " {"; + start = "digraph " + name + " {\n"; } public DotBuilder(final String name, final Map<String, String> defaultNodeProperties, final Map<String, String> defaultEdgeProperties) { @@ -55,6 +58,11 @@ public class DotBuilder { return start + body.toString() + end; } + @Override + public String toString() { + return get(); + } + public void addNode(final String id) { addNode(id, new HashMap<>()); } @@ -66,7 +74,7 @@ public class DotBuilder { } public void addNode(final String id, final Map<String, String> properties) { - addElement('"' + id + '"', properties); + addElement('"' + id + '"', extendNodeProperties(properties)); } public void addEdge(final String from, final String to) { @@ -80,17 +88,42 @@ public class DotBuilder { } public void addEdge(final String from, final String to, final Map<String, String> properties) { - addElement('"' + from + '"' + " -> " + '"' + to + '"', properties); + addElement('"' + from + '"' + " -> " + '"' + to + '"', extendEdgeProperties(properties)); } private void addElement(final String element, final Map<String, String> properties) { body.append(element); if (properties != null && !properties.isEmpty()) { - body.append('['); - Joiner.on(", ").withKeyValueSeparator("=").appendTo(body, properties); - body.append(']'); + body.append(" ["); + Joiner.on("\", ").withKeyValueSeparator("=\"").appendTo(body, properties); + body.append("\"]"); } body.append('\n'); } + private Map<String, String> extendNodeProperties(final Map<String, String> properties) { + return extendElementProperties(properties, defaultNodeProperties); + } + + private Map<String, String> extendEdgeProperties(final Map<String, String> properties) { + return extendElementProperties(properties, defaultEdgeProperties); + } + + private Map<String, String> extendElementProperties(final Map<String, String> properties, final Map<String, String> defaultElementProperties) { + + if (defaultElementProperties != null) { + for (Entry<String, String> property : defaultElementProperties.entrySet()) { + properties.putIfAbsent(property.getKey(), property.getValue()); + } + } + + if (defaultProperties != null) { + for (Entry<String, String> property : defaultProperties.entrySet()) { + properties.putIfAbsent(property.getKey(), property.getValue()); + } + } + + return properties; + } + } -- GitLab