1 package org
.argeo
.cms
.acr
.directory
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Dictionary
;
5 import java
.util
.Enumeration
;
7 import java
.util
.Optional
;
9 import java
.util
.TreeSet
;
11 import javax
.xml
.namespace
.QName
;
13 import org
.argeo
.api
.acr
.ArgeoNamespace
;
14 import org
.argeo
.api
.acr
.ContentName
;
15 import org
.argeo
.api
.acr
.CrAttributeType
;
16 import org
.argeo
.api
.acr
.NamespaceUtils
;
17 import org
.argeo
.api
.acr
.ldap
.LdapAttrs
;
18 import org
.argeo
.api
.acr
.ldap
.LdapObjs
;
19 import org
.argeo
.api
.acr
.spi
.ContentProvider
;
20 import org
.argeo
.api
.acr
.spi
.ProvidedSession
;
21 import org
.argeo
.cms
.acr
.AbstractContent
;
23 abstract class AbstractDirectoryContent
extends AbstractContent
{
24 protected final DirectoryContentProvider provider
;
26 public AbstractDirectoryContent(ProvidedSession session
, DirectoryContentProvider provider
) {
28 this.provider
= provider
;
31 abstract Dictionary
<String
, Object
> doGetProperties();
33 @SuppressWarnings("unchecked")
35 public <A
> Optional
<A
> get(QName key
, Class
<A
> clss
) {
36 String attrName
= key
.getLocalPart();
37 Object value
= doGetProperties().get(attrName
);
39 return Optional
.empty();
40 Optional
<A
> res
= CrAttributeType
.cast(clss
, value
);
42 return Optional
.of((A
) value
);
48 protected Iterable
<QName
> keys() {
49 Dictionary
<String
, Object
> properties
= doGetProperties();
50 Set
<QName
> keys
= new TreeSet
<>(NamespaceUtils
.QNAME_COMPARATOR
);
51 keys
: for (Enumeration
<String
> it
= properties
.keys(); it
.hasMoreElements();) {
52 String key
= it
.nextElement();
53 if (key
.equalsIgnoreCase(LdapAttrs
.objectClass
.name()))
55 if (key
.equalsIgnoreCase(LdapAttrs
.objectClasses
.name()))
57 ContentName name
= new ContentName(ArgeoNamespace
.LDAP_NAMESPACE_URI
, key
, provider
);
64 public List
<QName
> getContentClasses() {
65 Dictionary
<String
, Object
> properties
= doGetProperties();
66 List
<QName
> contentClasses
= new ArrayList
<>();
67 String objectClass
= properties
.get(LdapAttrs
.objectClass
.name()).toString();
68 contentClasses
.add(new ContentName(ArgeoNamespace
.LDAP_NAMESPACE_URI
, objectClass
, provider
));
70 String
[] objectClasses
= properties
.get(LdapAttrs
.objectClasses
.name()).toString().split("\\n");
71 objectClasses
: for (String oc
: objectClasses
) {
72 if (LdapObjs
.top
.name().equalsIgnoreCase(oc
))
73 continue objectClasses
;
74 if (objectClass
.equalsIgnoreCase(oc
))
75 continue objectClasses
;
76 contentClasses
.add(new ContentName(ArgeoNamespace
.LDAP_NAMESPACE_URI
, oc
, provider
));
78 return contentClasses
;
82 public Object
put(QName key
, Object value
) {
83 Object previous
= get(key
);
84 // TODO deal with typing
85 doGetProperties().put(key
.getLocalPart(), value
);
90 protected void removeAttr(QName key
) {
91 doGetProperties().remove(key
.getLocalPart());
95 public ContentProvider
getProvider() {