Skip to content
Snippets Groups Projects
Commit dc86a0b1 authored by Sören Henning's avatar Sören Henning
Browse files

Finish work on DotBuilder

parent f6f8db23
No related branches found
No related tags found
1 merge request!17Get impletemented stages and Java 8
...@@ -2,9 +2,16 @@ package kieker.analysis.util; ...@@ -2,9 +2,16 @@ package kieker.analysis.util;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
/**
* Simple class for building and representing dot graph files.
*
* @author Sören Henning
*
*/
public class DotBuilder { public class DotBuilder {
private final String start; private final String start;
...@@ -15,16 +22,12 @@ public class DotBuilder { ...@@ -15,16 +22,12 @@ public class DotBuilder {
private Map<String, String> defaultEdgeProperties; private Map<String, String> defaultEdgeProperties;
private Map<String, String> defaultProperties; private Map<String, String> defaultProperties;
/*
* TODO: Use default properties
*/
public DotBuilder() { public DotBuilder() {
this("G"); this("G");
} }
public DotBuilder(final String name) { 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) { public DotBuilder(final String name, final Map<String, String> defaultNodeProperties, final Map<String, String> defaultEdgeProperties) {
...@@ -55,6 +58,11 @@ public class DotBuilder { ...@@ -55,6 +58,11 @@ public class DotBuilder {
return start + body.toString() + end; return start + body.toString() + end;
} }
@Override
public String toString() {
return get();
}
public void addNode(final String id) { public void addNode(final String id) {
addNode(id, new HashMap<>()); addNode(id, new HashMap<>());
} }
...@@ -66,7 +74,7 @@ public class DotBuilder { ...@@ -66,7 +74,7 @@ public class DotBuilder {
} }
public void addNode(final String id, final Map<String, String> properties) { 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) { public void addEdge(final String from, final String to) {
...@@ -80,17 +88,42 @@ public class DotBuilder { ...@@ -80,17 +88,42 @@ public class DotBuilder {
} }
public void addEdge(final String from, final String to, final Map<String, String> properties) { 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) { private void addElement(final String element, final Map<String, String> properties) {
body.append(element); body.append(element);
if (properties != null && !properties.isEmpty()) { if (properties != null && !properties.isEmpty()) {
body.append('['); body.append(" [");
Joiner.on(", ").withKeyValueSeparator("=").appendTo(body, properties); Joiner.on("\", ").withKeyValueSeparator("=\"").appendTo(body, properties);
body.append(']'); body.append("\"]");
} }
body.append('\n'); 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;
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment