public Iterator listChildren()

in src/main/java/org/apache/sling/jackrabbit/usermanager/impl/resource/AuthorizableResourceProvider.java [295:353]


    public Iterator<Resource> listChildren(ResolveContext<Object> ctx, Resource parent) {
        try {
            String path = parent.getPath();

            // handle children of /system/userManager
            if (systemUserManagerPath.equals(path)) {
                List<Resource> resources = new ArrayList<>();
                resources.add(getResource(ctx,
                        systemUserManagerUserPath, null, null));
                    resources.add(getResource(ctx,
                        systemUserManagerGroupPath, null, null));
                return resources.iterator();
            }

            int searchType = -1;
            if (systemUserManagerUserPath.equals(path)) {
                searchType = PrincipalManager.SEARCH_TYPE_NOT_GROUP;
            } else if (systemUserManagerGroupPath.equals(path)) {
                searchType = PrincipalManager.SEARCH_TYPE_GROUP;
            }
            if (searchType != -1) {
                PrincipalIterator principals = null;
                ResourceResolver resourceResolver = parent.getResourceResolver();
                Session session = resourceResolver.adaptTo(Session.class);
                if (session != null) {
                    PrincipalManager principalManager = AccessControlUtil.getPrincipalManager(session);
                    principals = principalManager.getPrincipals(searchType);
                }

                if (principals != null) {
                    return new ChildrenIterator(parent, principals);
                }
            } else if (resourcesForNestedProperties) {
                // handle nested property containers

                AuthorizableWorker<Iterator<Resource>> authorizableWorker = (authorizable, relPath) -> {
                    Iterator<Resource> result = null;
                    Resource r = ctx.getResourceResolver().resolve(authorizable.getPath());
                    if (relPath != null) {
                        r = r.getChild(relPath);
                    }
                    if (r != null) {
                        // only include the children that are nested property containers
                        List<Resource> propContainers = filterPropertyContainers(relPath, authorizable, r);
                        if (!propContainers.isEmpty()) {
                            result = new NestedChildrenIterator(parent, authorizable.getID(), r.getChildren().iterator());
                        }
                    }
                    return result;
                };
                return maybeDoAuthorizableWork(ctx, path, authorizableWorker, null);
            }
        } catch (RepositoryException re) {
            throw new SlingException("Error listing children of resource: "
                + parent.getPath(), re);
        }

        return null;
    }