in tools/maven-plugin/src/main/java/org/apache/batchee/tools/maven/doc/DiagramGenerator.java [685:720]
private Map<Node, Integer> levels() {
final Map<Node, Integer> out = new HashMap<Node, Integer>();
for (final Node node : graph.getVertices()) { // init
out.put(node, 0);
}
final Map<Node, Collection<Node>> successors = new HashMap<Node, Collection<Node>>();
final Map<Node, Collection<Node>> predecessors = new HashMap<Node, Collection<Node>>();
for (final Node node : graph.getVertices()) {
successors.put(node, graph.getSuccessors(node));
predecessors.put(node, graph.getPredecessors(node));
}
boolean done;
do {
done = true;
for (final Node node : graph.getVertices()) {
int nodeLevel = out.get(node);
for (final Node successor : successors.get(node)) {
if (out.get(successor) <= nodeLevel
&& successor != node
&& !predecessors.get(node).contains(successor)) {
done = false;
out.put(successor, nodeLevel + 1);
}
}
}
} while (!done);
final int min = Collections.min(out.values());
for (final Map.Entry<Node, Integer> entry : out.entrySet()) {
out.put(entry.getKey(), entry.getValue() - min);
}
return out;
}