public Group createGroup()

in src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/CreateGroupServlet.java [219:282]


    public Group createGroup(Session jcrSession, final String name,
            Map<String, ?> properties, List<Modification> changes)
            throws RepositoryException {
        // check that the parameter values have valid values.
        if (jcrSession == null) {
            throw new IllegalArgumentException("JCR Session not found");
        }

        final String principalName;
        if (name == null || name.isEmpty()) {
            principalName = getOrGeneratePrincipalName(jcrSession, properties, AuthorizableType.GROUP);
        } else {
            principalName = name;
        }

        if (principalName == null || principalName.length() == 0) {
            throw new IllegalArgumentException("Group name was not supplied");
        }

        UserManager userManager = AccessControlUtil.getUserManager(jcrSession);
        Authorizable authorizable = userManager.getAuthorizable(principalName);

        Group group = null;
        if (authorizable != null) {
            // principal already exists!
            throw new RepositoryException(
                "A group already exists with the requested name: "
                    + principalName);
        } else {
            group = userManager.createGroup(() -> principalName);

            String groupPath = systemUserManagerPaths.getGroupPrefix()
                + group.getID();
            
            Map<String, RequestProperty> reqPropertiesMap = collectContentMap(properties);
            Collection<RequestProperty> reqPropertyValues = reqPropertiesMap.values();
            changes.add(Modification.onCreated(groupPath));

            // ensure root of new content with the expected primary/mixin types
            processCreate(jcrSession, group, reqPropertiesMap, changes);

            // write content from form
            writeContent(jcrSession, group, reqPropertyValues, changes);

            // update the group memberships
            ResourceResolver resourceResolver = null;
            try {
                //create a resource resolver to resolve the relative paths used for group membership values
                final Map<String, Object> authInfo = new HashMap<>();
                authInfo.put(org.apache.sling.jcr.resource.api.JcrResourceConstants.AUTHENTICATION_INFO_SESSION, jcrSession);
                resourceResolver = resourceResolverFactory.getResourceResolver(authInfo);
                Resource baseResource = resourceResolver.getResource(systemUserManagerPaths.getGroupsPath());
                updateGroupMembership(baseResource, properties, group, changes);
            } catch (LoginException e) {
                throw new RepositoryException(e);
            } finally {
                if (resourceResolver != null) {
                    resourceResolver.close();
                }
            }
        }
        
        return group;
    }