package org.argeo.osgi.useradmin;
-import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.naming.directory.Attributes;
import javax.naming.ldap.LdapName;
+import javax.naming.ldap.Rdn;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.useradmin.Role;
private final AbstractUserDirectory directory;
private final LdapName dn;
- private final int type;
+ private final boolean functional;
private final Attributes attributes;
- HierarchyUnit parent;
- List<HierarchyUnit> children = new ArrayList<>();
+// HierarchyUnit parent;
+// List<HierarchyUnit> children = new ArrayList<>();
- LdifHierarchyUnit(AbstractUserDirectory directory, LdapName dn, int type, Attributes attributes) {
+ LdifHierarchyUnit(AbstractUserDirectory directory, LdapName dn, Attributes attributes) {
Objects.requireNonNull(directory);
Objects.requireNonNull(dn);
this.directory = directory;
this.dn = dn;
- this.type = type;
this.attributes = attributes;
+
+ Rdn rdn = LdapNameUtils.getLastRdn(dn);
+ functional = !(directory.getUserBaseRdn().equals(rdn) || directory.getGroupBaseRdn().equals(rdn)
+ || directory.getSystemRoleBaseRdn().equals(rdn));
}
@Override
- public int getHierarchyChildCount() {
- return children.size();
+ public HierarchyUnit getParent() {
+ return directory.doGetHierarchyUnit(LdapNameUtils.getParent(dn));
}
@Override
- public HierarchyUnit getHierarchyChild(int i) {
- return children.get(i);
+ public Iterable<HierarchyUnit> getDirectHierachyUnits(boolean functionalOnly) {
+// List<HierarchyUnit> res = new ArrayList<>();
+// if (functionalOnly)
+// for (HierarchyUnit hu : children) {
+// if (hu.isFunctional())
+// res.add(hu);
+// }
+// else
+// res.addAll(children);
+// return Collections.unmodifiableList(res);
+ return directory.doGetDirectHierarchyUnits(dn, functionalOnly);
}
@Override
- public int getHierarchyUnitType() {
- return type;
+ public boolean isFunctional() {
+ return functional;
}
@Override
public String getHierarchyUnitName() {
- String name = dn.getRdn(dn.size() - 1).getValue().toString();
+ String name = LdapNameUtils.getLastRdnValue(dn);
// TODO check ou, o, etc.
return name;
}
}
@Override
- public String getBasePath() {
+ public String getContext() {
return dn.toString();
}
@Override
- public List<? extends Role> getRoles(String filter, boolean deep) {
+ public List<? extends Role> getHierarchyUnitRoles(String filter, boolean deep) {
try {
return directory.getRoles(dn, filter, deep);
} catch (InvalidSyntaxException e) {
}
}
+ @Override
+ public UserDirectory getDirectory() {
+ return directory;
+ }
+
@Override
public int hashCode() {
return dn.hashCode();