X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifUserAdmin.java;h=0a925e4eb41b3612f531f3ace8534a198065d72d;hb=eb4324be6ac9cdff15828a21ee7d3f6ca2f19fb9;hp=f9163d7e2af20dfd43caa759443241ee464b74c3;hpb=e168383bac50637131fef8c41e119db7eb2284a7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUserAdmin.java b/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUserAdmin.java index f9163d7e2..0a925e4eb 100644 --- a/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUserAdmin.java +++ b/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUserAdmin.java @@ -156,21 +156,21 @@ public class LdifUserAdmin extends AbstractUserDirectory { String objectClass = objectClasses.next().toString(); // System.out.println(" " + objectClass); if (objectClass.toLowerCase().equals(inetOrgPerson.name().toLowerCase())) { - users.put(key, new LdifUser(this, key, attributes)); + users.put(key, newUser(key, attributes)); break objectClasses; } else if (objectClass.toLowerCase().equals(getGroupObjectClass().toLowerCase())) { - groups.put(key, new LdifGroup(this, key, attributes)); - break objectClasses; - } else if (objectClass.equalsIgnoreCase(LdapObjs.organization.name())) { - // we only consider organizations which are not groups - hierarchy.put(key, new LdifHierarchyUnit(this, key, HierarchyUnit.ORGANIZATION, attributes)); + groups.put(key, newGroup(key, attributes)); break objectClasses; +// } else if (objectClass.equalsIgnoreCase(LdapObjs.organization.name())) { +// // we only consider organizations which are not groups +// hierarchy.put(key, new LdifHierarchyUnit(this, key, HierarchyUnit.ORGANIZATION, attributes)); +// break objectClasses; } else if (objectClass.equalsIgnoreCase(LdapObjs.organizationalUnit.name())) { - String name = key.getRdn(key.size() - 1).toString(); - if (getUserBase().equalsIgnoreCase(name) || getGroupBase().equalsIgnoreCase(name)) - break objectClasses; // skip +// String name = key.getRdn(key.size() - 1).toString(); +// if (getUserBase().equalsIgnoreCase(name) || getGroupBase().equalsIgnoreCase(name)) +// break objectClasses; // skip // TODO skip if it does not contain groups or users - hierarchy.put(key, new LdifHierarchyUnit(this, key, HierarchyUnit.OU, attributes)); + hierarchy.put(key, new LdifHierarchyUnit(this, key, attributes)); break objectClasses; } } @@ -183,7 +183,7 @@ public class LdifUserAdmin extends AbstractUserDirectory { LdifHierarchyUnit parent = hierarchy.get(parentDn); if (parent == null) { rootHierarchyUnits.add(unit); - unit.parent = this; + unit.parent = null; continue hierachyUnits; } parent.children.add(unit); @@ -308,18 +308,49 @@ public class LdifUserAdmin extends AbstractUserDirectory { init(); } + /* + * HIERARCHY + */ + +// @Override +// public int getHierarchyChildCount() { +// return rootHierarchyUnits.size(); +// } +// +// @Override +// public HierarchyUnit getHierarchyChild(int i) { +// return rootHierarchyUnits.get(i); +// } + @Override - public int getHierarchyChildCount() { - return rootHierarchyUnits.size(); + public HierarchyUnit getHierarchyUnit(String path) { + LdapName dn = pathToName(path); + return hierarchy.get(dn); } @Override - public HierarchyUnit getHierarchyChild(int i) { - return rootHierarchyUnits.get(i); + public Iterable getDirectHierarchyUnits(boolean functionalOnly) { + if (functionalOnly) { + List res = new ArrayList<>(); + for (HierarchyUnit hu : rootHierarchyUnits) { + if (hu.isFunctional()) + res.add(hu); + } + return res; + + } else { + return rootHierarchyUnits; + } } - /* - * HIERARCHY - */ + @Override + public HierarchyUnit getHierarchyUnit(Role role) { + LdapName dn = LdapNameUtils.toLdapName(role.getName()); + LdapName huDn = LdapNameUtils.getParent(dn); + HierarchyUnit hierarchyUnit = hierarchy.get(huDn); + if (hierarchyUnit == null) + throw new IllegalStateException("No hierarchy unit found for " + role); + return hierarchyUnit; + } }