public Iterator listChildren()

in src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java [181:218]


    public Iterator<Resource> listChildren(final @NotNull ResolveContext<Object> ctx, final @NotNull Resource parent) {
        final ResourceResolver resolver = ctx.getResourceResolver();

        final List<Iterator<? extends Resource>> allChildren = new ArrayList<>();
        final boolean askParentResourceProvider = this.resolveChildren(resolver, parent, allChildren);

        // get children from from shadowed provider
        if (askParentResourceProvider) {
            @SuppressWarnings("rawtypes")
            final ResourceProvider parentResourceProvider = ctx.getParentResourceProvider();
            @SuppressWarnings("rawtypes")
            final ResolveContext resolveContext = ctx.getParentResolveContext();
            if (parentResourceProvider != null && resolveContext != null) {
                Iterator<Resource> children = parentResourceProvider.listChildren(resolveContext, parent);
                if (children != null) {
                    this.addChildren(allChildren, children);
                }
            }
        }

        if (allChildren.isEmpty()) {
            return null;
        } else if (allChildren.size() == 1) {
            return (Iterator<Resource>) allChildren.get(0);
        } else {
            // merge all children from the different iterators, but filter out potential duplicates with same resource
            // name
            return IteratorUtils.filteredIterator(
                    IteratorUtils.chainedIterator(allChildren), new Predicate<Resource>() {
                        private Set<String> names = new HashSet<>();

                        @Override
                        public boolean evaluate(final Resource resource) {
                            return names.add(resource.getName());
                        }
                    });
        }
    }