@Override public String toString() { return DependencyNodeUtil.prettyPrint(this).toString(); }
/** * Returns the {@link DependencyNode} objects that satisfy the filter. The nodes are traversed using a pre order * iterator * * @param root a {@link DependencyNode} as the starting point * @param filter the {@link DependencyNodeFilter} being used * @return the {@link Collection} with the output * * @see #preorderIterator(DependencyNode) * */ public static List<DependencyNode> select(DependencyNode node, Predicate<DependencyNode> filter) { List<DependencyNode> result = new ArrayList<DependencyNode>(); selectInternal(node, filter, result); return result; }
public static String prettyPrint(DependencyNode root, Predicate<DependencyNode> filter) { StringBuilder sb = new StringBuilder(); prettyPrint(root, filter, sb, 0); return sb.toString(); }
private static void selectInternal(DependencyNode root, Predicate<DependencyNode> filter, List<DependencyNode> collector) { if (filter.accept(root)) { collector.add(root); for (DependencyNode child : root.getChildren()) { selectInternal(child, filter, collector); } } }
/** * Prints a tree-like structure for this object * * @param root * @return */ public static CharSequence prettyPrint(DependencyNode root) { StringBuilder sb = new StringBuilder(); prettyPrint(root, new Predicate<DependencyNode>() { @Override public boolean accept(DependencyNode node) { return true; } }, sb, 0); return sb; }
private static void prettyPrint(DependencyNode node, Predicate<DependencyNode> filter, StringBuilder builder, int depth) { if (filter.accept(node)) { for (int i = 0; i < depth; i++) { builder.append(" "); } if (depth > 0) { builder.append("|-"); } builder.append(node.getDependency()) .append(" (") .append(node.getDependency().getScopeType()) .append(")\n"); for (DependencyNode child : node.getChildren()) { prettyPrint(child, filter, builder, depth + 1); } } }