X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.maintenance%2Fsrc%2Forg%2Fargeo%2Fmaintenance%2FAbstractMaintenanceService.java;h=6003d638ddadab47a630d694903704ca62dce2c4;hb=46cc2039ac20703c484aa994b830a2da113f2c97;hp=1a742d917d239278242513813446c62a25ee29dd;hpb=b0aa5659a33348fa6db4e55a8cee06131121cd1d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.maintenance/src/org/argeo/maintenance/AbstractMaintenanceService.java b/org.argeo.maintenance/src/org/argeo/maintenance/AbstractMaintenanceService.java index 1a742d917..6003d638d 100644 --- a/org.argeo.maintenance/src/org/argeo/maintenance/AbstractMaintenanceService.java +++ b/org.argeo.maintenance/src/org/argeo/maintenance/AbstractMaintenanceService.java @@ -3,7 +3,6 @@ package org.argeo.maintenance; import java.io.IOException; import java.util.EnumSet; import java.util.HashSet; -import java.util.List; import java.util.Set; import javax.jcr.NoSuchWorkspaceException; @@ -14,10 +13,10 @@ import javax.transaction.UserTransaction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.api.NodeUtils; import org.argeo.jcr.Jcr; import org.argeo.jcr.JcrUtils; import org.argeo.naming.Distinguished; -import org.argeo.node.NodeUtils; import org.osgi.service.useradmin.Group; import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.UserAdmin; @@ -44,6 +43,7 @@ public abstract class AbstractMaintenanceService { } } + /** Configures a workspace. */ protected void configureJcr(Repository repository, String workspaceName) { Session adminSession; try { @@ -79,12 +79,13 @@ public abstract class AbstractMaintenanceService { return null; } + /** + * To be overridden in order to programmatically set relationships between + * roles. Does nothing by default. + */ protected void configureStandardRoles() { } - protected void addManagersToGroup(String groupDn) { - } - /** * Creates the base JCR tree structure expected for this app if necessary. * @@ -124,10 +125,12 @@ public abstract class AbstractMaintenanceService { * UTILITIES */ + /** Create these roles as group if they don't exist. */ protected void makeSureRolesExists(EnumSet enumSet) { makeSureRolesExists(Distinguished.enumToDns(enumSet)); } + /** Create these roles as group if they don't exist. */ protected void makeSureRolesExists(Set requiredRoles) { if (requiredRoles == null) return; @@ -155,30 +158,28 @@ public abstract class AbstractMaintenanceService { } } - protected void addManagersToGroups(List groupDns) { - for (String groupDn : groupDns) - addManagersToGroup(groupDn); - } - - protected void addToGroup(String officeGroup, String groupDn) { - if (officeGroup.contentEquals(groupDn)) { + /** Add a user or group to a group. */ + protected void addToGroup(String groupToAddDn, String groupDn) { + if (groupToAddDn.contentEquals(groupDn)) { if (log.isTraceEnabled()) log.trace("Ignore adding group " + groupDn + " to itself"); return; } if (getUserAdmin() == null) { - log.warn("No user admin service available, cannot add group " + officeGroup + " to " + groupDn); + log.warn("No user admin service available, cannot add group " + groupToAddDn + " to " + groupDn); return; } - Group managerGroup = (Group) getUserAdmin().getRole(officeGroup); + Group groupToAdd = (Group) getUserAdmin().getRole(groupToAddDn); + if (groupToAdd == null) + throw new IllegalArgumentException("Group " + groupToAddDn + " not found"); Group group = (Group) getUserAdmin().getRole(groupDn); if (group == null) throw new IllegalArgumentException("Group " + groupDn + " not found"); try { getUserTransaction().begin(); - if (group.addMember(managerGroup)) - log.info("Added " + officeGroup + " to " + group); + if (group.addMember(groupToAdd)) + log.info("Added " + groupToAddDn + " to " + group); getUserTransaction().commit(); } catch (Exception e) { try { @@ -186,7 +187,7 @@ public abstract class AbstractMaintenanceService { } catch (Exception e1) { // silent } - throw new IllegalStateException("Cannot add " + managerGroup + " to " + group); + throw new IllegalStateException("Cannot add " + groupToAddDn + " to " + groupDn); } }