Multiple user referentials working with IPA.
[lgpl/argeo-commons.git] / org.argeo.util / src / org / argeo / util / directory / ldap / LdapHierarchyUnit.java
index d76c449b0ad84601def94459661c9f000535e339..961f2e35886c1fd783d60dd7d10d0b421cc3f602 100644 (file)
@@ -1,32 +1,18 @@
 package org.argeo.util.directory.ldap;
 
-import java.util.Objects;
+import java.util.Locale;
 
-import javax.naming.directory.Attributes;
 import javax.naming.ldap.LdapName;
 import javax.naming.ldap.Rdn;
 
-import org.argeo.util.directory.Directory;
 import org.argeo.util.directory.HierarchyUnit;
 
 /** LDIF/LDAP based implementation of {@link HierarchyUnit}. */
-public class LdapHierarchyUnit implements HierarchyUnit {
-       private final AbstractLdapDirectory directory;
-
-       private final LdapName dn;
+public class LdapHierarchyUnit extends DefaultLdapEntry implements HierarchyUnit {
        private final boolean functional;
-       private final Attributes attributes;
-
-//     HierarchyUnit parent;
-//     List<HierarchyUnit> children = new ArrayList<>();
-
-       public LdapHierarchyUnit(AbstractLdapDirectory directory, LdapName dn, Attributes attributes) {
-               Objects.requireNonNull(directory);
-               Objects.requireNonNull(dn);
 
-               this.directory = directory;
-               this.dn = dn;
-               this.attributes = attributes;
+       public LdapHierarchyUnit(AbstractLdapDirectory directory, LdapName dn) {
+               super(directory, dn);
 
                Rdn rdn = LdapNameUtils.getLastRdn(dn);
                functional = !(directory.getUserBaseRdn().equals(rdn) || directory.getGroupBaseRdn().equals(rdn)
@@ -35,21 +21,12 @@ public class LdapHierarchyUnit implements HierarchyUnit {
 
        @Override
        public HierarchyUnit getParent() {
-               return directory.doGetHierarchyUnit(LdapNameUtils.getParent(dn));
+               return getDirectoryDao().doGetHierarchyUnit(LdapNameUtils.getParent(getDn()));
        }
 
        @Override
-       public Iterable<HierarchyUnit> getDirectHierachyUnits(boolean functionalOnly) {
-//             List<HierarchyUnit> res = new ArrayList<>();
-//             if (functionalOnly)
-//                     for (HierarchyUnit hu : children) {
-//                             if (hu.isFunctional())
-//                                     res.add(hu);
-//                     }
-//             else
-//                     res.addAll(children);
-//             return Collections.unmodifiableList(res);
-               return directory.doGetDirectHierarchyUnits(dn, functionalOnly);
+       public Iterable<HierarchyUnit> getDirectHierarchyUnits(boolean functionalOnly) {
+               return getDirectoryDao().doGetDirectHierarchyUnits(getDn(), functionalOnly);
        }
 
        @Override
@@ -59,40 +36,29 @@ public class LdapHierarchyUnit implements HierarchyUnit {
 
        @Override
        public String getHierarchyUnitName() {
-               String name = LdapNameUtils.getLastRdnValue(dn);
+               String name = LdapNameUtils.getLastRdnValue(getDn());
                // TODO check ou, o, etc.
                return name;
        }
 
-       public Attributes getAttributes() {
-               return attributes;
-       }
-
-       @Override
-       public String getContext() {
-               return dn.toString();
-       }
-
-       @Override
-       public Directory getDirectory() {
-               return directory;
-       }
-
        @Override
-       public int hashCode() {
-               return dn.hashCode();
+       public String getHierarchyUnitLabel(Locale locale) {
+               String key = LdapNameUtils.getLastRdn(getDn()).getType();
+               Object value = LdapEntry.getLocalized(getProperties(), key, locale);
+               if (value == null)
+                       value = getHierarchyUnitName();
+               assert value != null;
+               return value.toString();
        }
 
        @Override
-       public boolean equals(Object obj) {
-               if (!(obj instanceof LdapHierarchyUnit))
-                       return false;
-               return ((LdapHierarchyUnit) obj).dn.equals(dn);
+       public String getBase() {
+               return getDn().toString();
        }
 
        @Override
        public String toString() {
-               return "Hierarchy Unit " + dn.toString();
+               return "Hierarchy Unit " + getDn().toString();
        }
 
 }