Search in sources :

Example 1 with GraphvizNode

use of com.google.javascript.jscomp.graph.GraphvizGraph.GraphvizNode in project closure-compiler by google.

the class DotFormatter method toDot.

/**
 * Outputs a string in DOT format that presents the graph.
 *
 * @param graph Input graph.
 * @return A string in Dot format that presents the graph.
 */
public static String toDot(GraphvizGraph graph) {
    StringBuilder builder = new StringBuilder();
    builder.append(graph.isDirected() ? "digraph" : "graph");
    builder.append(INDENT);
    builder.append(graph.getName());
    builder.append(" {\n");
    builder.append(INDENT);
    builder.append("node [color=lightblue2, style=filled];\n");
    final String edgeSymbol = graph.isDirected() ? ARROW : LINE;
    List<GraphvizNode> nodes = graph.getGraphvizNodes();
    String[] nodeNames = new String[nodes.size()];
    for (int i = 0; i < nodeNames.length; i++) {
        GraphvizNode gNode = nodes.get(i);
        nodeNames[i] = gNode.getId() + " [label=\"" + gNode.getLabel() + "\" color=\"" + gNode.getColor() + "\"]";
    }
    // We sort the nodes so we get a deterministic output every time regardless
    // of the implementation of the graph data structure.
    Arrays.sort(nodeNames);
    for (String nodeName : nodeNames) {
        builder.append(INDENT);
        builder.append(nodeName);
        builder.append(";\n");
    }
    List<GraphvizEdge> edges = graph.getGraphvizEdges();
    String[] edgeNames = new String[edges.size()];
    for (int i = 0; i < edgeNames.length; i++) {
        GraphvizEdge edge = edges.get(i);
        edgeNames[i] = edge.getNode1Id() + edgeSymbol + edge.getNode2Id();
    }
    // Again, we sort the edges as well.
    Arrays.sort(edgeNames);
    for (String edgeName : edgeNames) {
        builder.append(INDENT);
        builder.append(edgeName);
        builder.append(";\n");
    }
    builder.append("}\n");
    return builder.toString();
}
Also used : GraphvizNode(com.google.javascript.jscomp.graph.GraphvizGraph.GraphvizNode) GraphvizEdge(com.google.javascript.jscomp.graph.GraphvizGraph.GraphvizEdge)

Aggregations

GraphvizEdge (com.google.javascript.jscomp.graph.GraphvizGraph.GraphvizEdge)1 GraphvizNode (com.google.javascript.jscomp.graph.GraphvizGraph.GraphvizNode)1