package org.jf.dexlib.Code.Analysis.graphs;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import org.jgrapht.DirectedGraph;
/**
*
* @author Juergen Graf <juergen.graf@gmail.com>
*
*/
public class WriteGraphToDot {
private WriteGraphToDot() {}
public static <V, E> void write(DirectedGraph<V, E> g, String fileName) throws FileNotFoundException {
PrintWriter out = new PrintWriter(fileName);
//System.out.println("Writing '" + fileName + "'");
out.print("digraph \"DirectedGraph\" { \n graph [label=\"");
out.print(g.toString());
out.print("\", labelloc=t, concentrate=true]; ");
out.print("center=true;fontsize=12;node [fontsize=12];edge [fontsize=12]; \n");
for (V node : g.vertexSet()) {
out.print(" \"");
out.print(getId(node));
out.print("\" ");
out.print("[label=\"");
out.print(node.toString());
out.print("\" shape=\"box\" color=\"blue\" ] \n");
}
for (V src : g.vertexSet()) {
for (E e : g.outgoingEdgesOf(src)) {
V tgt = g.getEdgeTarget(e);
out.print(" \"");
out.print(getId(src));
out.print("\" -> \"");
out.print(getId(tgt));
out.print("\" ");
out.print("[label=\"");
out.print(e.toString());
out.print("\"]\n");
}
}
out.print("\n}");
out.flush();
out.close();
}
private static String getId(Object o) {
return "" + System.identityHashCode(o);
}
public static String sanitizeFileName(String string) {
return string.replace(';', '_').replace('/', '_').replace('\\', '_').replace('>', '_').replace('<', '_');
}
}