X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FGraphViz.java;h=ef08fae8ab8a028d443b84bb9f056e248141396b;hb=eda544585c2304faa82d249c4744fd5cecbf9211;hp=a92e298b5af1c2087cc434bd8f2b298b13e9a6d3;hpb=142b31e063c97d2d6dc141a9e687d49b7f2ab826;p=sbp.git diff --git a/src/edu/berkeley/sbp/util/GraphViz.java b/src/edu/berkeley/sbp/util/GraphViz.java index a92e298..ef08fae 100644 --- a/src/edu/berkeley/sbp/util/GraphViz.java +++ b/src/edu/berkeley/sbp/util/GraphViz.java @@ -20,14 +20,17 @@ public class GraphViz { public class Node { private final int idx = master_idx++; public String label; + public String comment; public boolean directed = false; public String color="black"; public ArrayList edges = new ArrayList(); + public ArrayList labels = new ArrayList(); public ArrayList inbound = new ArrayList(); - public void edge(ToGraphViz o) { + public void edge(ToGraphViz o, Object label) { Node n = o.toGraphViz(GraphViz.this); if (n==null) return; edges.add(n); + labels.add(label); n.inbound.add(this); } public String name() { @@ -37,8 +40,11 @@ public class GraphViz { } public void edges(PrintWriter pw) { if (simple()) return; - for(Node n : edges) - pw.println(" "+name()+" -> " + n.name()); + for(int i=0; i " + n.name() + " [color="+color+" " +(label==null?"":("label=\""+label+"\""))+ "];\n"); + } } public int numEdges() { return edges.size(); } public boolean simple() { @@ -63,21 +69,28 @@ public class GraphViz { if (directed) pw.print("ordering=out"); if (simple()) { pw.print(" shape=record "); - pw.print(" label=\"{"); + pw.print(" label=\""); + boolean complex = false; + for(Node n : edges) + if (n.edges.size()>0) + complex = true; + if (!complex) pw.print("{"); boolean first = true; for(Node n : edges) { if (!first) pw.print("|"); first = false; - pw.print("<"+n.name()+">"); + pw.print(""); pw.print(StringUtil.escapify(n.label,"\\\"")); } - pw.print("}\""); + if (!complex) pw.print("}"); + pw.print("\""); } else { pw.print(" label=\""); pw.print(StringUtil.escapify(label,"\\\"")); pw.print("\""); } pw.print("color="+color); + if (comment!=null) pw.print(" comment=\""+StringUtil.escapify(comment,"\\\"")+"\" "); pw.print("];\n"); } } @@ -100,9 +113,13 @@ public class GraphViz { public boolean isHidden(); } + public void show() throws IOException { + Runtime.getRuntime().exec(new String[] { "dot", "-Tsvg" }); + } + public void dump(PrintWriter pw) { IdentityHashMap done = new IdentityHashMap(); - pw.println("digraph G {\n"); + pw.println("digraph G { rankdir=LR; ordering=out; \n"); for(Group g : groups.values()) { pw.println(" { rank=same;\n"); for(Node n : groups.keySet()) @@ -118,6 +135,7 @@ public class GraphViz { } for(Node n : ihm.values()) n.edges(pw); pw.println("}\n"); + pw.flush(); } }