X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fdirectory%2Fldap%2FLdapHierarchyUnit.java;h=b60ee0c68935cc3e08248f1a69902b8d6aebe393;hb=bb605887a55790079fbf19628b232d2089efe13e;hp=7abf0988534a9aceb58d76598e39b71028aa5384;hpb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/directory/ldap/LdapHierarchyUnit.java b/org.argeo.cms/src/org/argeo/cms/directory/ldap/LdapHierarchyUnit.java index 7abf09885..b60ee0c68 100644 --- a/org.argeo.cms/src/org/argeo/cms/directory/ldap/LdapHierarchyUnit.java +++ b/org.argeo.cms/src/org/argeo/cms/directory/ldap/LdapHierarchyUnit.java @@ -9,14 +9,24 @@ import org.argeo.api.cms.directory.HierarchyUnit; /** LDIF/LDAP based implementation of {@link HierarchyUnit}. */ public class LdapHierarchyUnit extends DefaultLdapEntry implements HierarchyUnit { - private final boolean functional; +// private final boolean functional; + + private final Type type; public LdapHierarchyUnit(AbstractLdapDirectory directory, LdapName dn) { super(directory, dn); Rdn rdn = LdapNameUtils.getLastRdn(dn); - functional = !(directory.getUserBaseRdn().equals(rdn) || directory.getGroupBaseRdn().equals(rdn) - || directory.getSystemRoleBaseRdn().equals(rdn)); + if (directory.getUserBaseRdn().equals(rdn)) + type = Type.PEOPLE; + else if (directory.getGroupBaseRdn().equals(rdn)) + type = Type.GROUPS; + else if (directory.getSystemRoleBaseRdn().equals(rdn)) + type = Type.ROLES; + else + type = Type.FUNCTIONAL; +// functional = !(directory.getUserBaseRdn().equals(rdn) || directory.getGroupBaseRdn().equals(rdn) +// || directory.getSystemRoleBaseRdn().equals(rdn)); } @Override @@ -30,8 +40,19 @@ public class LdapHierarchyUnit extends DefaultLdapEntry implements HierarchyUnit } @Override - public boolean isFunctional() { - return functional; + 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); } @Override