]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/acr/directory/HierarchyUnitContent.java
0ec025ced2c153bfa80170bf497ed4f8cd409021
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / directory / HierarchyUnitContent.java
1 package org.argeo.cms.acr.directory;
2
3 import java.util.ArrayList;
4 import java.util.Dictionary;
5 import java.util.Iterator;
6 import java.util.List;
7 import java.util.Objects;
8
9 import javax.xml.namespace.QName;
10
11 import org.argeo.api.acr.Content;
12 import org.argeo.api.acr.ContentName;
13 import org.argeo.api.acr.CrName;
14 import org.argeo.api.acr.spi.ProvidedSession;
15 import org.argeo.osgi.useradmin.UserDirectory;
16 import org.argeo.util.directory.HierarchyUnit;
17 import org.osgi.service.useradmin.Role;
18
19 class HierarchyUnitContent extends AbstractDirectoryContent {
20 private HierarchyUnit hierarchyUnit;
21
22 public HierarchyUnitContent(ProvidedSession session, DirectoryContentProvider provider,
23 HierarchyUnit hierarchyUnit) {
24 super(session, provider);
25 Objects.requireNonNull(hierarchyUnit);
26 this.hierarchyUnit = hierarchyUnit;
27 }
28
29 @Override
30 Dictionary<String, Object> doGetProperties() {
31 return hierarchyUnit.getProperties();
32 }
33
34 @Override
35 public QName getName() {
36 // if (hierarchyUnit.getParent() == null) {// base DN
37 // String baseDn = hierarchyUnit.getBasePath();
38 // return new ContentName(baseDn);
39 // }
40 String name = hierarchyUnit.getHierarchyUnitName();
41 return new ContentName(name);
42 }
43
44 @Override
45 public Content getParent() {
46 HierarchyUnit parentHu = hierarchyUnit.getParent();
47 if (parentHu == null) {
48 return new DirectoryContent(getSession(), provider, hierarchyUnit.getDirectory());
49 }
50 return new HierarchyUnitContent(getSession(), provider, parentHu);
51 }
52
53 @Override
54 public Iterator<Content> iterator() {
55 List<Content> lst = new ArrayList<>();
56 for (HierarchyUnit hu : hierarchyUnit.getDirectHierachyUnits(false))
57 lst.add(new HierarchyUnitContent(getSession(), provider, hu));
58
59 for (Role role : ((UserDirectory) hierarchyUnit.getDirectory()).getHierarchyUnitRoles(hierarchyUnit, null,
60 false))
61 lst.add(new RoleContent(getSession(), provider, this, role));
62 return lst.iterator();
63 }
64
65 /*
66 * TYPING
67 */
68 @Override
69 public List<QName> getContentClasses() {
70 List<QName> contentClasses = super.getContentClasses();
71 contentClasses.add(CrName.COLLECTION.get());
72 return contentClasses;
73 }
74
75 @SuppressWarnings("unchecked")
76 @Override
77 public <A> A adapt(Class<A> clss) {
78 if (clss.equals(HierarchyUnit.class))
79 return (A) hierarchyUnit;
80 return super.adapt(clss);
81 }
82
83 /*
84 * ACCESSOR
85 */
86 HierarchyUnit getHierarchyUnit() {
87 return hierarchyUnit;
88 }
89
90 }