]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.util/src/org/argeo/osgi/useradmin/LdifUserAdmin.java
Introduce system roles
[lgpl/argeo-commons.git] / org.argeo.util / src / org / argeo / osgi / useradmin / LdifUserAdmin.java
index f9163d7e2af20dfd43caa759443241ee464b74c3..0a925e4eb41b3612f531f3ace8534a198065d72d 100644 (file)
@@ -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<HierarchyUnit> getDirectHierarchyUnits(boolean functionalOnly) {
+               if (functionalOnly) {
+                       List<HierarchyUnit> 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;
+       }
 
 }