in src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/UpdateGroupServlet.java [176:216]
public Group updateGroup(Session jcrSession,
String name,
Map<String, ?> properties,
List<Modification> changes)
throws RepositoryException {
Group group = null;
UserManager userManager = AccessControlUtil.getUserManager(jcrSession);
Authorizable authorizable = userManager.getAuthorizable(name);
if (authorizable instanceof Group) {
group = (Group)authorizable;
} else {
throw new ResourceNotFoundException(
"Group to update could not be determined");
}
String groupPath = systemUserManagerPaths.getGroupPrefix()
+ group.getID();
Map<String, RequestProperty> reqPropertiesMap = collectContentMap(properties);
Collection<RequestProperty> reqPropertyValues = reqPropertiesMap.values();
// create a resource resolver to resolve the relative paths used for group membership values
try (ResourceResolver resourceResolver = resourceResolverFactory.getResourceResolver(Collections.singletonMap(JcrResourceConstants.AUTHENTICATION_INFO_SESSION, jcrSession))) {
// cleanup any old content (@Delete parameters)
processDeletes(group, reqPropertyValues, changes);
// 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
Resource baseResource = resourceResolver.getResource(groupPath);
updateGroupMembership(baseResource, properties, group, changes);
} catch (RepositoryException | LoginException re) {
throw new RepositoryException("Failed to update group.", re);
}
return group;
}