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