import org.argeo.api.acr.CrName;
import org.argeo.api.acr.spi.ProvidedSession;
import org.argeo.osgi.useradmin.UserDirectory;
+import org.argeo.util.directory.Directory;
import org.argeo.util.directory.HierarchyUnit;
import org.osgi.service.useradmin.Role;
@Override
public Content getParent() {
HierarchyUnit parentHu = hierarchyUnit.getParent();
- if (parentHu == null) {
+ if (parentHu instanceof Directory) {
return new DirectoryContent(getSession(), provider, hierarchyUnit.getDirectory());
}
return new HierarchyUnitContent(getSession(), provider, parentHu);
@Override
public Iterator<Content> iterator() {
List<Content> lst = new ArrayList<>();
- for (HierarchyUnit hu : hierarchyUnit.getDirectHierachyUnits(false))
+ for (HierarchyUnit hu : hierarchyUnit.getDirectHierarchyUnits(false))
lst.add(new HierarchyUnitContent(getSession(), provider, hu));
for (Role role : ((UserDirectory) hierarchyUnit.getDirectory()).getHierarchyUnitRoles(hierarchyUnit, null,
import org.argeo.util.transaction.WorkControl;
-public interface Directory {
+public interface Directory extends HierarchyUnit {
/**
* The base of the hierarchy defined by this directory. This could typically be
* an LDAP base DN.
HierarchyUnit getParent();
- Iterable<HierarchyUnit> getDirectHierachyUnits(boolean functionalOnly);
+ Iterable<HierarchyUnit> getDirectHierarchyUnits(boolean functionalOnly);
boolean isFunctional();
return directoryDao.doGetDirectHierarchyUnits(baseDn, functionalOnly);
}
+ @Override
+ public String getHierarchyUnitName() {
+ return getName();
+ }
+
+ @Override
+ public HierarchyUnit getParent() {
+ return null;
+ }
+
+ @Override
+ public boolean isFunctional() {
+ return true;
+ }
+
+ @Override
+ public Directory getDirectory() {
+ return this;
+ }
+
/*
* PATHS
*/
LdapName name = (LdapName) getBaseDn().clone();
String[] segments = path.split("/");
Rdn parentRdn = null;
- for (String segment : segments) {
+ // segments[0] is the directory itself
+ for (int i = 0; i < segments.length; i++) {
+ String segment = segments[i];
// TODO make attr names configurable ?
String attr = LdapAttrs.ou.name();
if (parentRdn != null) {
public HierarchyUnit doGetHierarchyUnit(LdapName dn) {
try {
if (getDirectory().getBaseDn().equals(dn))
- return null;
+ return getDirectory();
+ if (!dn.startsWith(getDirectory().getBaseDn()))
+ throw new IllegalArgumentException(dn + " does not start with abse DN " + getDirectory().getBaseDn());
Attributes attrs = ldapConnection.getAttributes(dn);
return new LdapHierarchyUnit(getDirectory(), dn, attrs);
} catch (NamingException e) {
}
@Override
- public Iterable<HierarchyUnit> getDirectHierachyUnits(boolean functionalOnly) {
+ public Iterable<HierarchyUnit> getDirectHierarchyUnits(boolean functionalOnly) {
return getDirectoryDao().doGetDirectHierarchyUnits(getDn(), functionalOnly);
}
// }
@Override
public HierarchyUnit doGetHierarchyUnit(LdapName dn) {
+ if (getDirectory().getBaseDn().equals(dn))
+ return getDirectory();
return hierarchy.get(dn);
}