]> 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.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 int getHierarchyChildCount() {
37 return children.size();
38 }
39
40 @Override
41 public HierarchyUnit getParent() {
42 return parent;
43 }
44
45 @Override
46 public HierarchyUnit getHierarchyChild(int i) {
47 return children.get(i);
48 }
49
50 @Override
51 public int getHierarchyUnitType() {
52 return type;
53 }
54
55 @Override
56 public String getHierarchyUnitName() {
57 String name = LdapNameUtils.getLastRdnAsString(dn);
58 // TODO check ou, o, etc.
59 return name;
60 }
61
62 public Attributes getAttributes() {
63 return attributes;
64 }
65
66 @Override
67 public String getBasePath() {
68 return dn.toString();
69 }
70
71 @Override
72 public List<? extends Role> getRoles(String filter, boolean deep) {
73 try {
74 return directory.getRoles(dn, filter, deep);
75 } catch (InvalidSyntaxException e) {
76 throw new IllegalArgumentException("Cannot filter " + filter + " " + dn, e);
77 }
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 }