Refactor Argeo APIs
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / directory / ldap / AbstractLdapDirectory.java
index 1ec6c9de8eebb886c6edcddff4464c530cd4b0bd..39355c3c415248b16076547092cf2cad98a6729a 100644 (file)
@@ -1,6 +1,6 @@
 package org.argeo.cms.directory.ldap;
 
-import static org.argeo.cms.directory.ldap.LdapNameUtils.toLdapName;
+import static org.argeo.api.acr.ldap.LdapNameUtils.toLdapName;
 
 import java.io.File;
 import java.net.URI;
@@ -27,6 +27,7 @@ import javax.naming.ldap.Rdn;
 import javax.transaction.xa.XAResource;
 
 import org.argeo.api.acr.ldap.LdapAttr;
+import org.argeo.api.acr.ldap.LdapNameUtils;
 import org.argeo.api.acr.ldap.LdapObj;
 import org.argeo.api.cms.directory.CmsDirectory;
 import org.argeo.api.cms.directory.HierarchyUnit;
@@ -299,6 +300,17 @@ public abstract class AbstractLdapDirectory implements CmsDirectory, XAResourceP
                return directoryDao.doGetDirectHierarchyUnits(baseDn, functionalOnly);
        }
 
+       @Override
+       public HierarchyUnit getDirectChild(Type type) {
+               // TODO factorise with hierarchy unit?
+               return switch (type) {
+               case ROLES -> getDirectoryDao().doGetHierarchyUnit((LdapName) getBaseDn().add(getSystemRoleBaseRdn()));
+               case PEOPLE -> getDirectoryDao().doGetHierarchyUnit((LdapName) getBaseDn().add(getUserBaseRdn()));
+               case GROUPS -> getDirectoryDao().doGetHierarchyUnit((LdapName) getBaseDn().add(getGroupBaseRdn()));
+               case FUNCTIONAL -> throw new IllegalArgumentException("Type must be a technical type");
+               };
+       }
+
        @Override
        public String getHierarchyUnitName() {
                return getName();
@@ -385,8 +397,7 @@ public abstract class AbstractLdapDirectory implements CmsDirectory, XAResourceP
                        for (int i = 0; i < segments.length; i++) {
                                String segment = segments[i];
                                // TODO make attr names configurable ?
-                               String attr = getDirectory().getRealm().isPresent()/* IPA */ ? LdapAttr.cn.name()
-                                               : LdapAttr.ou.name();
+                               String attr = getDirectory().getRealm().isPresent()/* IPA */ ? LdapAttr.cn.name() : LdapAttr.ou.name();
                                if (parentRdn != null) {
                                        if (getUserBaseRdn().equals(parentRdn))
                                                attr = LdapAttr.uid.name();