]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/acr/directory/RoleContent.java
344dede76d52c7a1ddce15c02c2a601a4828ec8a
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / directory / RoleContent.java
1 package org.argeo.cms.acr.directory;
2
3 import java.util.ArrayList;
4 import java.util.Enumeration;
5 import java.util.List;
6 import java.util.Optional;
7 import java.util.Set;
8 import java.util.TreeSet;
9
10 import javax.swing.GroupLayout.Group;
11 import javax.xml.namespace.QName;
12
13 import org.argeo.api.acr.Content;
14 import org.argeo.api.acr.ContentName;
15 import org.argeo.api.acr.CrName;
16 import org.argeo.api.acr.NamespaceUtils;
17 import org.argeo.api.acr.spi.ContentProvider;
18 import org.argeo.api.acr.spi.ProvidedSession;
19 import org.argeo.cms.acr.AbstractContent;
20 import org.argeo.util.naming.LdapAttrs;
21 import org.argeo.util.naming.LdapObjs;
22 import org.osgi.service.useradmin.Role;
23 import org.osgi.service.useradmin.User;
24
25 class RoleContent extends AbstractContent {
26
27 private DirectoryContentProvider provider;
28 private HierarchyUnitContent parent;
29 private Role role;
30
31 public RoleContent(ProvidedSession session, DirectoryContentProvider provider, HierarchyUnitContent parent,
32 Role role) {
33 super(session);
34 this.provider = provider;
35 this.parent = parent;
36 this.role = role;
37 }
38
39 @Override
40 public ContentProvider getProvider() {
41 return provider;
42 }
43
44 @Override
45 public QName getName() {
46 String name = parent.getHierarchyUnit().getDirectory().getRoleSimpleName(role);
47 return new ContentName(name);
48 }
49
50 @Override
51 public Content getParent() {
52 return parent;
53 }
54
55 @SuppressWarnings("unchecked")
56 @Override
57 public <A> Optional<A> get(QName key, Class<A> clss) {
58 String attrName = key.getLocalPart();
59 Object value = role.getProperties().get(attrName);
60 if (value == null)
61 return Optional.empty();
62 // TODO deal with type and multiple
63 return Optional.of((A) value);
64 }
65
66 @Override
67 protected Iterable<QName> keys() {
68 Set<QName> keys = new TreeSet<>(NamespaceUtils.QNAME_COMPARATOR);
69 keys: for (Enumeration<String> it = role.getProperties().keys(); it.hasMoreElements();) {
70 String key = it.nextElement();
71 if (key.equalsIgnoreCase(LdapAttrs.objectClass.name()))
72 continue keys;
73 ContentName name = new ContentName(CrName.LDAP_NAMESPACE_URI, key, provider);
74 keys.add(name);
75 }
76 return keys;
77 }
78
79 @Override
80 public List<QName> getTypes() {
81 List<QName> contentClasses = new ArrayList<>();
82 keys: for (Enumeration<String> it = role.getProperties().keys(); it.hasMoreElements();) {
83 String key = it.nextElement();
84 if (key.equalsIgnoreCase(LdapAttrs.objectClass.name())) {
85 String[] objectClasses = role.getProperties().get(key).toString().split("\\n");
86 objectClasses: for (String objectClass : objectClasses) {
87 if (LdapObjs.top.name().equalsIgnoreCase(objectClass))
88 continue objectClasses;
89 contentClasses.add(new ContentName(CrName.LDAP_NAMESPACE_URI, objectClass, provider));
90 }
91 break keys;
92 }
93 }
94 return contentClasses;
95 }
96
97 @Override
98 public Object put(QName key, Object value) {
99 Object previous = get(key);
100 // TODO deal with typing
101 role.getProperties().put(key.getLocalPart(), value);
102 return previous;
103 }
104
105 @Override
106 protected void removeAttr(QName key) {
107 role.getProperties().remove(key.getLocalPart());
108 }
109
110 @SuppressWarnings("unchecked")
111 @Override
112 public <A> A adapt(Class<A> clss) {
113 if (clss.equals(Group.class))
114 return (A) role;
115 else if (clss.equals(User.class))
116 return (A) role;
117 else if (clss.equals(Role.class))
118 return (A) role;
119 return super.adapt(clss);
120 }
121
122 }