Refactor Argeo APIs
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / directory / ldap / LdapHierarchyUnit.java
index 0e005133a10aec011b39316ba21567c85475ec3f..81b20f0a33b2d12c99f40c2e675d9ff435014416 100644 (file)
@@ -5,6 +5,7 @@ import java.util.Locale;
 import javax.naming.ldap.LdapName;
 import javax.naming.ldap.Rdn;
 
+import org.argeo.api.acr.ldap.LdapNameUtils;
 import org.argeo.api.cms.directory.HierarchyUnit;
 
 /** LDIF/LDAP based implementation of {@link HierarchyUnit}. */
@@ -39,6 +40,17 @@ public class LdapHierarchyUnit extends DefaultLdapEntry implements HierarchyUnit
                return getDirectoryDao().doGetDirectHierarchyUnits(getDn(), functionalOnly);
        }
 
+       @Override
+       public HierarchyUnit getDirectChild(Type type) {
+               return switch (type) {
+               case ROLES ->
+                       getDirectoryDao().doGetHierarchyUnit((LdapName) getDn().add(getDirectory().getSystemRoleBaseRdn()));
+               case PEOPLE -> getDirectoryDao().doGetHierarchyUnit((LdapName) getDn().add(getDirectory().getUserBaseRdn()));
+               case GROUPS -> getDirectoryDao().doGetHierarchyUnit((LdapName) getDn().add(getDirectory().getGroupBaseRdn()));
+               case FUNCTIONAL -> throw new IllegalArgumentException("Type must be a technical type");
+               };
+       }
+
        @Override
        public boolean isType(Type type) {
                return this.type.equals(type);