projects
/
lgpl
/
argeo-commons.git
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
763feb4
)
Directory as a hierarchy unit.
author
Mathieu Baudier <mbaudier@argeo.org>
Sun, 26 Jun 2022 08:47:05 +0000
(10:47 +0200)
committer
Mathieu Baudier <mbaudier@argeo.org>
Sun, 26 Jun 2022 08:47:05 +0000
(10:47 +0200)
org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java
patch
|
blob
|
history
org.argeo.util/src/org/argeo/util/directory/Directory.java
patch
|
blob
|
history
org.argeo.util/src/org/argeo/util/directory/HierarchyUnit.java
patch
|
blob
|
history
org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java
patch
|
blob
|
history
org.argeo.util/src/org/argeo/util/directory/ldap/LdapDao.java
patch
|
blob
|
history
org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java
patch
|
blob
|
history
org.argeo.util/src/org/argeo/util/directory/ldap/LdifDao.java
patch
|
blob
|
history
diff --git
a/org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java
b/org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java
index 0ec025ced2c153bfa80170bf497ed4f8cd409021..bf8dae72eb722df203ae8a0a13666745ee6a8844 100644
(file)
--- a/
org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java
+++ b/
org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java
@@
-13,6
+13,7
@@
import org.argeo.api.acr.ContentName;
import org.argeo.api.acr.CrName;
import org.argeo.api.acr.spi.ProvidedSession;
import org.argeo.osgi.useradmin.UserDirectory;
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;
import org.argeo.util.directory.HierarchyUnit;
import org.osgi.service.useradmin.Role;
@@
-44,7
+45,7
@@
class HierarchyUnitContent extends AbstractDirectoryContent {
@Override
public Content getParent() {
HierarchyUnit parentHu = hierarchyUnit.getParent();
@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);
return new DirectoryContent(getSession(), provider, hierarchyUnit.getDirectory());
}
return new HierarchyUnitContent(getSession(), provider, parentHu);
@@
-53,7
+54,7
@@
class HierarchyUnitContent extends AbstractDirectoryContent {
@Override
public Iterator<Content> iterator() {
List<Content> lst = new ArrayList<>();
@Override
public Iterator<Content> iterator() {
List<Content> lst = new ArrayList<>();
- for (HierarchyUnit hu : hierarchyUnit.getDirectHierachyUnits(false))
+ for (HierarchyUnit hu : hierarchyUnit.getDirectHiera
r
chyUnits(false))
lst.add(new HierarchyUnitContent(getSession(), provider, hu));
for (Role role : ((UserDirectory) hierarchyUnit.getDirectory()).getHierarchyUnitRoles(hierarchyUnit, null,
lst.add(new HierarchyUnitContent(getSession(), provider, hu));
for (Role role : ((UserDirectory) hierarchyUnit.getDirectory()).getHierarchyUnitRoles(hierarchyUnit, null,
diff --git
a/org.argeo.util/src/org/argeo/util/directory/Directory.java
b/org.argeo.util/src/org/argeo/util/directory/Directory.java
index 0bbb5e53f7bdd3ff35c283596d899bdddea93ddd..351a608bc53c9c3dbfdb81910c858a54b1a3e56e 100644
(file)
--- a/
org.argeo.util/src/org/argeo/util/directory/Directory.java
+++ b/
org.argeo.util/src/org/argeo/util/directory/Directory.java
@@
-5,7
+5,7
@@
import java.util.Optional;
import org.argeo.util.transaction.WorkControl;
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.
/**
* The base of the hierarchy defined by this directory. This could typically be
* an LDAP base DN.
diff --git
a/org.argeo.util/src/org/argeo/util/directory/HierarchyUnit.java
b/org.argeo.util/src/org/argeo/util/directory/HierarchyUnit.java
index 68cc1bb2d5de7cbe308dd1322b8c0c656f025455..2673f16f0760cf04ad2f75ab6929d1418d5862ed 100644
(file)
--- a/
org.argeo.util/src/org/argeo/util/directory/HierarchyUnit.java
+++ b/
org.argeo.util/src/org/argeo/util/directory/HierarchyUnit.java
@@
-8,7
+8,7
@@
public interface HierarchyUnit {
HierarchyUnit getParent();
HierarchyUnit getParent();
- Iterable<HierarchyUnit> getDirectHierachyUnits(boolean functionalOnly);
+ Iterable<HierarchyUnit> getDirectHiera
r
chyUnits(boolean functionalOnly);
boolean isFunctional();
boolean isFunctional();
diff --git
a/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java
b/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java
index eab82e0ec3a0ba2ea2426b01d62a6d7ab20f4c56..55449a70748f3a0f7b4bf079123adc70988b4b7b 100644
(file)
--- a/
org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java
+++ b/
org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java
@@
-281,6
+281,26
@@
public abstract class AbstractLdapDirectory implements Directory, XAResourceProv
return directoryDao.doGetDirectHierarchyUnits(baseDn, functionalOnly);
}
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
*/
/*
* PATHS
*/
@@
-314,7
+334,9
@@
public abstract class AbstractLdapDirectory implements Directory, XAResourceProv
LdapName name = (LdapName) getBaseDn().clone();
String[] segments = path.split("/");
Rdn parentRdn = null;
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) {
// TODO make attr names configurable ?
String attr = LdapAttrs.ou.name();
if (parentRdn != null) {
diff --git
a/org.argeo.util/src/org/argeo/util/directory/ldap/LdapDao.java
b/org.argeo.util/src/org/argeo/util/directory/ldap/LdapDao.java
index 8e26cb44f14125206446e23eb0cf0849f26ebe50..d93fb7fdf62074d5be80f53563a41992bb50aa69 100644
(file)
--- a/
org.argeo.util/src/org/argeo/util/directory/ldap/LdapDao.java
+++ b/
org.argeo.util/src/org/argeo/util/directory/ldap/LdapDao.java
@@
-246,7
+246,9
@@
public class LdapDao extends AbstractLdapDirectoryDao {
public HierarchyUnit doGetHierarchyUnit(LdapName dn) {
try {
if (getDirectory().getBaseDn().equals(dn))
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) {
Attributes attrs = ldapConnection.getAttributes(dn);
return new LdapHierarchyUnit(getDirectory(), dn, attrs);
} catch (NamingException e) {
diff --git
a/org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java
b/org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java
index a9043cc38cb13c941982b345a39aeb1f5ce2e129..c2fdef4d229d5eb76faf342ccd571d1f6e23f72e 100644
(file)
--- a/
org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java
+++ b/
org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java
@@
-24,7
+24,7
@@
public class LdapHierarchyUnit extends DefaultLdapEntry implements HierarchyUnit
}
@Override
}
@Override
- public Iterable<HierarchyUnit> getDirectHierachyUnits(boolean functionalOnly) {
+ public Iterable<HierarchyUnit> getDirectHiera
r
chyUnits(boolean functionalOnly) {
return getDirectoryDao().doGetDirectHierarchyUnits(getDn(), functionalOnly);
}
return getDirectoryDao().doGetDirectHierarchyUnits(getDn(), functionalOnly);
}
diff --git
a/org.argeo.util/src/org/argeo/util/directory/ldap/LdifDao.java
b/org.argeo.util/src/org/argeo/util/directory/ldap/LdifDao.java
index 5826d86ac1d29324d50f31badf63afcc5bb6a98d..740a4762468405e762bba24ad8b61e3b01a1d4ef 100644
(file)
--- a/
org.argeo.util/src/org/argeo/util/directory/ldap/LdifDao.java
+++ b/
org.argeo.util/src/org/argeo/util/directory/ldap/LdifDao.java
@@
-364,6
+364,8
@@
public class LdifDao extends AbstractLdapDirectoryDao {
// }
@Override
public HierarchyUnit doGetHierarchyUnit(LdapName dn) {
// }
@Override
public HierarchyUnit doGetHierarchyUnit(LdapName dn) {
+ if (getDirectory().getBaseDn().equals(dn))
+ return getDirectory();
return hierarchy.get(dn);
}
return hierarchy.get(dn);
}