]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java
d76c449b0ad84601def94459661c9f000535e339
[lgpl/argeo-commons.git] / org.argeo.util / src / org / argeo / util / directory / ldap / LdapHierarchyUnit.java
1 package org.argeo.util.directory.ldap;
2
3 import java.util.Objects;
4
5 import javax.naming.directory.Attributes;
6 import javax.naming.ldap.LdapName;
7 import javax.naming.ldap.Rdn;
8
9 import org.argeo.util.directory.Directory;
10 import org.argeo.util.directory.HierarchyUnit;
11
12 /** LDIF/LDAP based implementation of {@link HierarchyUnit}. */
13 public class LdapHierarchyUnit implements HierarchyUnit {
14 private final AbstractLdapDirectory directory;
15
16 private final LdapName dn;
17 private final boolean functional;
18 private final Attributes attributes;
19
20 // HierarchyUnit parent;
21 // List<HierarchyUnit> children = new ArrayList<>();
22
23 public LdapHierarchyUnit(AbstractLdapDirectory directory, LdapName dn, Attributes attributes) {
24 Objects.requireNonNull(directory);
25 Objects.requireNonNull(dn);
26
27 this.directory = directory;
28 this.dn = dn;
29 this.attributes = attributes;
30
31 Rdn rdn = LdapNameUtils.getLastRdn(dn);
32 functional = !(directory.getUserBaseRdn().equals(rdn) || directory.getGroupBaseRdn().equals(rdn)
33 || directory.getSystemRoleBaseRdn().equals(rdn));
34 }
35
36 @Override
37 public HierarchyUnit getParent() {
38 return directory.doGetHierarchyUnit(LdapNameUtils.getParent(dn));
39 }
40
41 @Override
42 public Iterable<HierarchyUnit> getDirectHierachyUnits(boolean functionalOnly) {
43 // List<HierarchyUnit> res = new ArrayList<>();
44 // if (functionalOnly)
45 // for (HierarchyUnit hu : children) {
46 // if (hu.isFunctional())
47 // res.add(hu);
48 // }
49 // else
50 // res.addAll(children);
51 // return Collections.unmodifiableList(res);
52 return directory.doGetDirectHierarchyUnits(dn, functionalOnly);
53 }
54
55 @Override
56 public boolean isFunctional() {
57 return functional;
58 }
59
60 @Override
61 public String getHierarchyUnitName() {
62 String name = LdapNameUtils.getLastRdnValue(dn);
63 // TODO check ou, o, etc.
64 return name;
65 }
66
67 public Attributes getAttributes() {
68 return attributes;
69 }
70
71 @Override
72 public String getContext() {
73 return dn.toString();
74 }
75
76 @Override
77 public Directory getDirectory() {
78 return directory;
79 }
80
81 @Override
82 public int hashCode() {
83 return dn.hashCode();
84 }
85
86 @Override
87 public boolean equals(Object obj) {
88 if (!(obj instanceof LdapHierarchyUnit))
89 return false;
90 return ((LdapHierarchyUnit) obj).dn.equals(dn);
91 }
92
93 @Override
94 public String toString() {
95 return "Hierarchy Unit " + dn.toString();
96 }
97
98 }