/** * Returns the first {@link DependencyNode} object found that satisfy the filter. * * @param nodeIterator A tree iterator * @param filter the {@link DependencyNodeFilter} being used * @return the first element that matches the filter. null if nothing is found * * @see #breadthFirstIterator(DependencyNode) * @see #depthFirstIterator(DependencyNode) * @see #preorderIterator(DependencyNode) */ public static <T> T selectFirst(Iterator<T> nodeIterator, Predicate<T> filter) { while (nodeIterator.hasNext()) { T element = nodeIterator.next(); if (filter.accept(element)) { return element; } } return null; }
/** * Returns a {@link List} of {@link DependencyNode} objects that satisfy the filter based on the elements returned by * the {@link Iterator}. * * @param iterator An iterator for the {@link DependencyNode} hierarchy tree * @param filter the {@link DependencyNodeFilter} being used * @return list of matched elements * */ public static <T> List<T> select(Iterator<T> iterator, Predicate<T> filter) { List<T> result = new ArrayList<T>(); while (iterator.hasNext()) { T element = iterator.next(); if (filter.accept(element)) { result.add(element); } } return result; }
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); } } }
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); } } }
@Override public List<Coordinate> resolveVersions(DependencyQuery query) { VersionRangeResult r = getVersions(query); List<Coordinate> result = new ArrayList<Coordinate>(); Predicate<Dependency> filter = query.getDependencyFilter(); for (Version v : r.getVersions()) { CoordinateBuilder coord = CoordinateBuilder.create(query.getCoordinate()).setVersion(v.toString()); DependencyBuilder versionedDep = DependencyBuilder.create().setCoordinate(coord); if (filter == null || filter.accept(versionedDep)) { result.add(coord); } } return result; }
if (filter == null || filter.accept(d))
if (!filter.accept(result)) result = null;