1 package org
.argeo
.cms
.acr
.directory
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Enumeration
;
6 import java
.util
.Optional
;
8 import java
.util
.TreeSet
;
10 import javax
.swing
.GroupLayout
.Group
;
11 import javax
.xml
.namespace
.QName
;
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
;
25 class RoleContent
extends AbstractContent
{
27 private DirectoryContentProvider provider
;
28 private HierarchyUnitContent parent
;
31 public RoleContent(ProvidedSession session
, DirectoryContentProvider provider
, HierarchyUnitContent parent
,
34 this.provider
= provider
;
40 public ContentProvider
getProvider() {
45 public QName
getName() {
46 String name
= parent
.getHierarchyUnit().getDirectory().getRoleSimpleName(role
);
47 return new ContentName(name
);
51 public Content
getParent() {
55 @SuppressWarnings("unchecked")
57 public <A
> Optional
<A
> get(QName key
, Class
<A
> clss
) {
58 String attrName
= key
.getLocalPart();
59 Object value
= role
.getProperties().get(attrName
);
61 return Optional
.empty();
62 // TODO deal with type and multiple
63 return Optional
.of((A
) value
);
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()))
73 ContentName name
= new ContentName(CrName
.LDAP_NAMESPACE_URI
, key
, provider
);
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
));
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
));
93 return contentClasses
;
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
);
105 protected void removeAttr(QName key
) {
106 role
.getProperties().remove(key
.getLocalPart());
109 @SuppressWarnings("unchecked")
111 public <A
> A
adapt(Class
<A
> clss
) {
112 if (clss
.equals(Group
.class))
114 else if (clss
.equals(User
.class))
116 else if (clss
.equals(Role
.class))
118 return super.adapt(clss
);