X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifHierarchyUnit.java;h=d4259c87d5714a4d829fecd03c390b0af843ca9f;hb=eb4324be6ac9cdff15828a21ee7d3f6ca2f19fb9;hp=5cf52b9a2f34038bdf299b65683456bf1ce31668;hpb=e168383bac50637131fef8c41e119db7eb2284a7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/osgi/useradmin/LdifHierarchyUnit.java b/org.argeo.util/src/org/argeo/osgi/useradmin/LdifHierarchyUnit.java index 5cf52b9a2..d4259c87d 100644 --- a/org.argeo.util/src/org/argeo/osgi/useradmin/LdifHierarchyUnit.java +++ b/org.argeo.util/src/org/argeo/osgi/useradmin/LdifHierarchyUnit.java @@ -1,11 +1,13 @@ package org.argeo.osgi.useradmin; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; import javax.naming.directory.Attributes; import javax.naming.ldap.LdapName; +import javax.naming.ldap.Rdn; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.useradmin.Role; @@ -15,40 +17,51 @@ class LdifHierarchyUnit implements HierarchyUnit { private final AbstractUserDirectory directory; private final LdapName dn; - private final int type; + private final boolean functional; private final Attributes attributes; HierarchyUnit parent; List children = new ArrayList<>(); - LdifHierarchyUnit(AbstractUserDirectory directory, LdapName dn, int type, Attributes attributes) { + LdifHierarchyUnit(AbstractUserDirectory directory, LdapName dn, Attributes attributes) { Objects.requireNonNull(directory); Objects.requireNonNull(dn); this.directory = directory; this.dn = dn; - this.type = type; this.attributes = attributes; + + Rdn rdn = LdapNameUtils.getLastRdn(dn); + functional = !(directory.getUserBaseRdn().equals(rdn) || directory.getGroupBaseRdn().equals(rdn) + || directory.getSystemRoleBaseRdn().equals(rdn)); } @Override - public int getHierarchyChildCount() { - return children.size(); + public HierarchyUnit getParent() { + return parent; } @Override - public HierarchyUnit getHierarchyChild(int i) { - return children.get(i); + public Iterable getDirectHierachyUnits(boolean functionalOnly) { + List res = new ArrayList<>(); + if (functionalOnly) + for (HierarchyUnit hu : children) { + if (hu.isFunctional()) + res.add(hu); + } + else + res.addAll(children); + return Collections.unmodifiableList(res); } @Override - public int getHierarchyUnitType() { - return type; + public boolean isFunctional() { + return functional; } @Override public String getHierarchyUnitName() { - String name = dn.getRdn(dn.size() - 1).getValue().toString(); + String name = LdapNameUtils.getLastRdnValue(dn); // TODO check ou, o, etc. return name; } @@ -58,12 +71,12 @@ class LdifHierarchyUnit implements HierarchyUnit { } @Override - public String getBasePath() { + public String getContext() { return dn.toString(); } @Override - public List getRoles(String filter, boolean deep) { + public List getHierarchyUnitRoles(String filter, boolean deep) { try { return directory.getRoles(dn, filter, deep); } catch (InvalidSyntaxException e) { @@ -71,6 +84,11 @@ class LdifHierarchyUnit implements HierarchyUnit { } } + @Override + public UserDirectory getDirectory() { + return directory; + } + @Override public int hashCode() { return dn.hashCode();