package com.google.code.joto.util.graph.helper; import java.io.PrintStream; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; import com.google.code.joto.util.ToStringFormatter; import com.google.code.joto.util.graph.IGraph; public class GraphPrinter<Vertex> { private PrintStream out; private ToStringFormatter<Vertex> vertexFormat; private Map<Vertex,Integer> vertex2id = new IdentityHashMap<Vertex,Integer>(); //------------------------------------------------------------------------- public GraphPrinter(PrintStream out, ToStringFormatter<Vertex> vertexFormat) { this.out = out; this.vertexFormat = vertexFormat; } //------------------------------------------------------------------------- public void printGraph(IGraph<Vertex> g) { int i = 0; out.println("Vertexes: " + g.getVertexes().size() + "elts"); for(Vertex v : g.getVertexes()) { Integer id = i; vertex2id.put(v, id); String vStr = vertexFormat.objectToString(v); out.println("[" + id + "] " + vStr); i++; } out.println(); out.println("Forward dependencies:"); i = 0; for(Vertex v : g.getVertexes()) { List<Vertex> tos = g.getVertexToList(v); out.println("[" + i + "] => " + vertexesToIdsString(tos)); i++; } out.println(); out.println("Backward dependencies:"); i = 0; for(Vertex v : g.getVertexes()) { List<Vertex> froms = g.getVertexFromList(v); out.println("[" + i + "] <= " + vertexesToIdsString(froms)); i++; } out.println(); } private String vertexesToIdsString(List<Vertex> ls) { StringBuilder sb = new StringBuilder(); if (ls != null && !ls.isEmpty()) { for(Vertex v : ls) { Integer id = vertex2id.get(v); if (id == null) { // should not occur!!! sb.append("(id not found) '" + vertexFormat.objectToString(v) + "' "); } sb.append(id + ", "); } sb.delete(sb.length() - 2, sb.length()); } return sb.toString(); } }