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