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;
}