Introduce CMS-specific user APIs, based at this stage on OSGi UserAdmin
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / directory / HierarchyUnitContent.java
index 9184c63afbb23fb53e9fdf7f0d6204720f5ffff6..5acf8ab63fc07711f1956ed4fa3380c952f294a5 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.cms.acr.directory;
 
 import java.util.ArrayList;
+import java.util.Dictionary;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
@@ -10,36 +11,34 @@ import javax.xml.namespace.QName;
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentName;
 import org.argeo.api.acr.CrName;
-import org.argeo.api.acr.spi.ContentProvider;
+import org.argeo.api.acr.DName;
 import org.argeo.api.acr.spi.ProvidedSession;
-import org.argeo.cms.acr.AbstractContent;
-import org.argeo.osgi.useradmin.HierarchyUnit;
+import org.argeo.api.cms.directory.CmsDirectory;
+import org.argeo.api.cms.directory.HierarchyUnit;
+import org.argeo.api.cms.directory.UserDirectory;
 import org.osgi.service.useradmin.Role;
 
-public class HierarchyUnitContent extends AbstractContent {
+class HierarchyUnitContent extends AbstractDirectoryContent {
        private HierarchyUnit hierarchyUnit;
 
-       private DirectoryContentProvider provider;
-
        public HierarchyUnitContent(ProvidedSession session, DirectoryContentProvider provider,
                        HierarchyUnit hierarchyUnit) {
-               super(session);
+               super(session, provider);
                Objects.requireNonNull(hierarchyUnit);
-               this.provider = provider;
                this.hierarchyUnit = hierarchyUnit;
        }
 
        @Override
-       public ContentProvider getProvider() {
-               return provider;
+       Dictionary<String, Object> doGetProperties() {
+               return hierarchyUnit.getProperties();
        }
 
        @Override
        public QName getName() {
-               if (hierarchyUnit.getParent() == null) {// base DN
-                       String baseDn = hierarchyUnit.getBasePath();
-                       return new ContentName(baseDn);
-               }
+//             if (hierarchyUnit.getParent() == null) {// base DN
+//                     String baseDn = hierarchyUnit.getBasePath();
+//                     return new ContentName(baseDn);
+//             }
                String name = hierarchyUnit.getHierarchyUnitName();
                return new ContentName(name);
        }
@@ -47,8 +46,8 @@ public class HierarchyUnitContent extends AbstractContent {
        @Override
        public Content getParent() {
                HierarchyUnit parentHu = hierarchyUnit.getParent();
-               if (parentHu == null) {
-                       return provider.getRootContent(getSession());
+               if (parentHu instanceof CmsDirectory) {
+                       return new DirectoryContent(getSession(), provider, hierarchyUnit.getDirectory());
                }
                return new HierarchyUnitContent(getSession(), provider, parentHu);
        }
@@ -56,10 +55,11 @@ public class HierarchyUnitContent extends AbstractContent {
        @Override
        public Iterator<Content> iterator() {
                List<Content> lst = new ArrayList<>();
-               for (int i = 0; i < hierarchyUnit.getHierarchyChildCount(); i++)
-                       lst.add(new HierarchyUnitContent(getSession(), provider, hierarchyUnit.getHierarchyChild(i)));
+               for (HierarchyUnit hu : hierarchyUnit.getDirectHierarchyUnits(false))
+                       lst.add(new HierarchyUnitContent(getSession(), provider, hu));
 
-               for (Role role : hierarchyUnit.getRoles(null, false))
+               for (Role role : ((UserDirectory) hierarchyUnit.getDirectory()).getHierarchyUnitRoles(hierarchyUnit, null,
+                               false))
                        lst.add(new RoleContent(getSession(), provider, this, role));
                return lst.iterator();
        }
@@ -67,12 +67,26 @@ public class HierarchyUnitContent extends AbstractContent {
        /*
         * TYPING
         */
+       @Override
+       public List<QName> getContentClasses() {
+               List<QName> contentClasses = super.getContentClasses();
+               contentClasses.add(DName.collection.qName());
+               return contentClasses;
+       }
 
+       @SuppressWarnings("unchecked")
        @Override
-       public List<QName> getTypes() {
-               List<QName> res = new ArrayList<>();
-               res.add(CrName.COLLECTION.get());
-               return res;
+       public <A> A adapt(Class<A> clss) {
+               if (clss.equals(HierarchyUnit.class))
+                       return (A) hierarchyUnit;
+               return super.adapt(clss);
+       }
+
+       /*
+        * ACCESSOR
+        */
+       HierarchyUnit getHierarchyUnit() {
+               return hierarchyUnit;
        }
 
 }