]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/acr/directory/RoleContent.java
Rename transaction package
[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 String objectClass = role.getProperties().get(LdapAttrs.objectClass.name()).toString();
83 contentClasses.add(new ContentName(CrName.LDAP_NAMESPACE_URI, objectClass, provider));
84
85 String[] objectClasses = role.getProperties().get(LdapAttrs.objectClasses.name()).toString().split("\\n");
86 objectClasses: for (String oc : objectClasses) {
87 if (LdapObjs.top.name().equalsIgnoreCase(oc))
88 continue objectClasses;
89 if (objectClass.equalsIgnoreCase(oc))
90 continue objectClasses;
91 contentClasses.add(new ContentName(CrName.LDAP_NAMESPACE_URI, oc, provider));
92 }
93 return contentClasses;
94 }
95
96 @Override
97 public Object put(QName key, Object value) {
98 Object previous = get(key);
99 // TODO deal with typing
100 role.getProperties().put(key.getLocalPart(), value);
101 return previous;
102 }
103
104 @Override
105 protected void removeAttr(QName key) {
106 role.getProperties().remove(key.getLocalPart());
107 }
108
109 @SuppressWarnings("unchecked")
110 @Override
111 public <A> A adapt(Class<A> clss) {
112 if (clss.equals(Group.class))
113 return (A) role;
114 else if (clss.equals(User.class))
115 return (A) role;
116 else if (clss.equals(Role.class))
117 return (A) role;
118 return super.adapt(clss);
119 }
120
121 }