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;
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.osgi.useradmin.UserDirectory;
+import org.argeo.util.directory.Directory;
+import org.argeo.util.directory.HierarchyUnit;
import org.osgi.service.useradmin.Role;
-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
@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 : hierarchyUnit.getHierarchyUnitRoles(null, false))
+ for (Role role : ((UserDirectory) hierarchyUnit.getDirectory()).getHierarchyUnitRoles(hierarchyUnit, null,
+ false))
lst.add(new RoleContent(getSession(), provider, this, role));
return lst.iterator();
}
/*
* 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);
}
/*
return hierarchyUnit;
}
-
}