private Iterator getChildren()

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


    private Iterator<Resource> getChildren(final ResourceResolver resolver, final Resource parent) {
        final String parentPath = parent.getPath();
        File parentFile = parent.adaptTo(File.class);

        // not a FsResource, try to create one from the resource
        if (parentFile == null) {
            // if the parent path is at or below the provider root, get
            // the respective file
            parentFile = getFile(parentPath);

            // if the parent path is actually the parent of the provider
            // root, return a single element iterator just containing the
            // provider file, unless the provider file is a directory and
            // a repository item with the same path actually exists
            if (parentFile == null) {

                if (!StringUtils.startsWith(parentPath, providerRoot)) {
                    String parentPathPrefix = parentPath.concat("/");
                    if (providerRoot.startsWith(parentPathPrefix)) {
                        String relPath = providerRoot.substring(parentPathPrefix.length());
                        if (relPath.indexOf('/') < 0) {
                            Resource res = new FileResource(
                                    resolver,
                                    providerRoot,
                                    providerFile,
                                    contentFileExtensions,
                                    contentFileCache,
                                    fileStatCache);
                            return IteratorUtils.singletonIterator(res);
                        }
                    }
                }

                // no children here
                return null;
            }
        }

        File[] files = parentFile.listFiles();
        if (files == null) {
            return null;
        }

        Arrays.sort(files, FileNameComparator.INSTANCE);
        Iterator<File> children =
                IteratorUtils.filteredIterator(IteratorUtils.arrayIterator(files), new Predicate<File>() {
                    @Override
                    public boolean evaluate(final File file) {
                        return contentFileExtensions == null || !contentFileExtensions.matchesSuffix(file);
                    }
                });
        if (!children.hasNext()) {
            return null;
        }
        return IteratorUtils.transformedIterator(children, new Transformer<File, Resource>() {
            @Override
            public Resource transform(final File file) {
                String path = parentPath + "/" + Escape.fileToResourceName(file.getName());
                return new FileResource(resolver, path, file, contentFileExtensions, contentFileCache, fileStatCache);
            }
        });
    }