private void addNodes() { for (Orderable<T> orderable : orderables) { DependencyNode<T> node = new DependencyNode<T>(logger, orderable); idToDependencyNode.put(orderable.getId(), node); trailer.addDependency(node); } }
private void fillOrder(List<Orderable<T>> list) { if (list.contains(orderable)) return; // Recusively add dependencies for (DependencyNode<T> node : dependencies) { node.fillOrder(list); } list.add(orderable); }
@Override public void link(DependencyNode<T> source, DependencyNode<T> target) { target.addDependency(source); } };
@Override public String toString() { StringBuilder buffer = new StringBuilder(String.format("[%s", getId())); boolean first = true; for (DependencyNode<T> node : dependencies) { buffer.append(first ? ": " : ", "); buffer.append(node.toString()); first = false; } buffer.append(']'); return buffer.toString(); }
private void initializeGraph() { trailer = new DependencyNode<T>(logger, new Orderable<T>("*-trailer-*", null)); addNodes(); addDependencies(); }
boolean isReachable(DependencyNode<T> node) { if (this == node) return true; // Quick fast pass for immediate dependencies for (DependencyNode<T> d : dependencies) { if (d == node) return true; } // Slower second pass looks for // indirect dependencies for (DependencyNode<T> d : dependencies) { if (d.isReachable(node)) return true; } return false; }
public List<T> getOrdered() { lock.lock(); initializeGraph(); List<T> result = newList(); for (Orderable<T> orderable : trailer.getOrdered()) { T target = orderable.getTarget(); // Nulls are placeholders that are skipped. if (target != null) result.add(target); } return result; }
@Override public void link(DependencyNode<T> source, DependencyNode<T> target) { source.addDependency(target); } };
@Override public String toString() { StringBuilder buffer = new StringBuilder(String.format("[%s", getId())); boolean first = true; for (DependencyNode<T> node : dependencies) { buffer.append(first ? ": " : ", "); buffer.append(node.toString()); first = false; } buffer.append(']'); return buffer.toString(); }
private void initializeGraph() { trailer = new DependencyNode<T>(logger, new Orderable<T>("*-trailer-*", null)); addNodes(); addDependencies(); }
boolean isReachable(DependencyNode<T> node) { if (this == node) return true; // Quick fast pass for immediate dependencies for (DependencyNode<T> d : dependencies) { if (d == node) return true; } // Slower second pass looks for // indirect dependencies for (DependencyNode<T> d : dependencies) { if (d.isReachable(node)) return true; } return false; }
public List<T> getOrdered() { lock.lock(); initializeGraph(); List<T> result = newList(); for (Orderable<T> orderable : trailer.getOrdered()) { T target = orderable.getTarget(); // Nulls are placeholders that are skipped. if (target != null) result.add(target); } return result; }
private void addNodes() { for (Orderable<T> orderable : orderables) { DependencyNode<T> node = new DependencyNode<T>(logger, orderable); dependencyNodesById.put(orderable.getId(), node); trailer.addDependency(node); } }
@Override public void link(DependencyNode<T> source, DependencyNode<T> target) { target.addDependency(source); } };
private void initializeGraph() { trailer = new DependencyNode<T>(logger, new Orderable<T>("*-trailer-*", null)); addNodes(); addDependencies(); }
private void fillOrder(List<Orderable<T>> list) { if (list.contains(orderable)) return; // Recusively add dependencies for (DependencyNode<T> node : dependencies) { node.fillOrder(list); } list.add(orderable); }
void addDependency(DependencyNode<T> node) { if (node.isReachable(this)) { logger.warn(UtilMessages.dependencyCycle(node, this)); return; } // Make this node depend on the other node. // That forces the other node's orderable // to appear before this node's orderable. dependencies.add(node); }
public List<T> getOrdered() { lock.lock(); initializeGraph(); List<T> result = newList(); for (Orderable<T> orderable : trailer.getOrdered()) { T target = orderable.getTarget(); // Nulls are placeholders that are skipped. if (target != null) result.add(target); } return result; }