1 package org
.argeo
.osgi
.useradmin
;
3 import java
.util
.ArrayList
;
6 import java
.util
.Objects
;
8 import javax
.naming
.directory
.Attributes
;
9 import javax
.naming
.ldap
.LdapName
;
11 import org
.osgi
.framework
.InvalidSyntaxException
;
12 import org
.osgi
.service
.useradmin
.Role
;
14 /** LDIF/LDAP based implementation of {@link HierarchyUnit}. */
15 class LdifHierarchyUnit
implements HierarchyUnit
{
16 private final AbstractUserDirectory directory
;
18 private final LdapName dn
;
19 private final int type
;
20 private final Attributes attributes
;
23 List
<HierarchyUnit
> children
= new ArrayList
<>();
25 LdifHierarchyUnit(AbstractUserDirectory directory
, LdapName dn
, int type
, Attributes attributes
) {
26 Objects
.requireNonNull(directory
);
27 Objects
.requireNonNull(dn
);
29 this.directory
= directory
;
32 this.attributes
= attributes
;
36 public int getHierarchyChildCount() {
37 return children
.size();
41 public HierarchyUnit
getParent() {
46 public HierarchyUnit
getHierarchyChild(int i
) {
47 return children
.get(i
);
51 public int getHierarchyUnitType() {
56 public String
getHierarchyUnitName() {
57 String name
= LdapNameUtils
.getLastRdnAsString(dn
);
58 // TODO check ou, o, etc.
62 public Attributes
getAttributes() {
67 public String
getBasePath() {
72 public List
<?
extends Role
> getRoles(String filter
, boolean deep
) {
74 return directory
.getRoles(dn
, filter
, deep
);
75 } catch (InvalidSyntaxException e
) {
76 throw new IllegalArgumentException("Cannot filter " + filter
+ " " + dn
, e
);
81 public int hashCode() {
86 public boolean equals(Object obj
) {
87 if (!(obj
instanceof LdifHierarchyUnit
))
89 return ((LdifHierarchyUnit
) obj
).dn
.equals(dn
);
93 public String
toString() {
94 return "Hierarchy Unit " + dn
.toString();