private Map levels()

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;
        }