1 package org
.argeo
.osgi
.useradmin
;
4 import java
.util
.Objects
;
6 import javax
.naming
.directory
.Attributes
;
7 import javax
.naming
.ldap
.LdapName
;
8 import javax
.naming
.ldap
.Rdn
;
10 import org
.osgi
.framework
.InvalidSyntaxException
;
11 import org
.osgi
.service
.useradmin
.Role
;
13 /** LDIF/LDAP based implementation of {@link HierarchyUnit}. */
14 class LdifHierarchyUnit
implements HierarchyUnit
{
15 private final AbstractUserDirectory directory
;
17 private final LdapName dn
;
18 private final boolean functional
;
19 private final Attributes attributes
;
21 // HierarchyUnit parent;
22 // List<HierarchyUnit> children = new ArrayList<>();
24 LdifHierarchyUnit(AbstractUserDirectory directory
, LdapName dn
, Attributes attributes
) {
25 Objects
.requireNonNull(directory
);
26 Objects
.requireNonNull(dn
);
28 this.directory
= directory
;
30 this.attributes
= attributes
;
32 Rdn rdn
= LdapNameUtils
.getLastRdn(dn
);
33 functional
= !(directory
.getUserBaseRdn().equals(rdn
) || directory
.getGroupBaseRdn().equals(rdn
)
34 || directory
.getSystemRoleBaseRdn().equals(rdn
));
38 public HierarchyUnit
getParent() {
39 return directory
.doGetHierarchyUnit(LdapNameUtils
.getParent(dn
));
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())
51 // res.addAll(children);
52 // return Collections.unmodifiableList(res);
53 return directory
.doGetDirectHierarchyUnits(dn
, functionalOnly
);
57 public boolean isFunctional() {
62 public String
getHierarchyUnitName() {
63 String name
= LdapNameUtils
.getLastRdnValue(dn
);
64 // TODO check ou, o, etc.
68 public Attributes
getAttributes() {
73 public String
getContext() {
78 public List
<?
extends Role
> getHierarchyUnitRoles(String filter
, boolean deep
) {
80 return directory
.getRoles(dn
, filter
, deep
);
81 } catch (InvalidSyntaxException e
) {
82 throw new IllegalArgumentException("Cannot filter " + filter
+ " " + dn
, e
);
87 public UserDirectory
getDirectory() {
92 public int hashCode() {
97 public boolean equals(Object obj
) {
98 if (!(obj
instanceof LdifHierarchyUnit
))
100 return ((LdifHierarchyUnit
) obj
).dn
.equals(dn
);
104 public String
toString() {
105 return "Hierarchy Unit " + dn
.toString();