X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2Fdirectory%2FAbstractDirectoryContent.java;h=b737b50a1ea48ca63bb1eddcfd544d6c55d5778e;hb=e8969c9e02e73cb2a826e9e8a5c149b2b8520cba;hp=42b0a08044370a8bc57dfe0adcd5c6e275850f73;hpb=15f93a026914b55e52f147e6aa53392434652522;p=lgpl%2Fargeo-commons.git
diff --git a/org.argeo.cms/src/org/argeo/cms/acr/directory/AbstractDirectoryContent.java b/org.argeo.cms/src/org/argeo/cms/acr/directory/AbstractDirectoryContent.java
index 42b0a0804..b737b50a1 100644
--- a/org.argeo.cms/src/org/argeo/cms/acr/directory/AbstractDirectoryContent.java
+++ b/org.argeo.cms/src/org/argeo/cms/acr/directory/AbstractDirectoryContent.java
@@ -10,14 +10,15 @@ import java.util.TreeSet;
import javax.xml.namespace.QName;
+import org.argeo.api.acr.ArgeoNamespace;
import org.argeo.api.acr.ContentName;
-import org.argeo.api.acr.CrName;
+import org.argeo.api.acr.CrAttributeType;
import org.argeo.api.acr.NamespaceUtils;
+import org.argeo.api.acr.ldap.LdapAttr;
+import org.argeo.api.acr.ldap.LdapObj;
import org.argeo.api.acr.spi.ContentProvider;
import org.argeo.api.acr.spi.ProvidedSession;
import org.argeo.cms.acr.AbstractContent;
-import org.argeo.util.naming.LdapAttrs;
-import org.argeo.util.naming.LdapObjs;
abstract class AbstractDirectoryContent extends AbstractContent {
protected final DirectoryContentProvider provider;
@@ -34,12 +35,13 @@ abstract class AbstractDirectoryContent extends AbstractContent {
public Optional get(QName key, Class clss) {
String attrName = key.getLocalPart();
Object value = doGetProperties().get(attrName);
- if (Long.class.isAssignableFrom(clss))
- return Optional.of((A) (Long) Long.parseLong(value.toString()));
if (value == null)
return Optional.empty();
- // TODO deal with type and multiple
- return Optional.of((A) value);
+ Optional res = CrAttributeType.cast(clss, value);
+ if (res.isEmpty())
+ return Optional.of((A) value);
+ else
+ return res;
}
@Override
@@ -48,11 +50,11 @@ abstract class AbstractDirectoryContent extends AbstractContent {
Set keys = new TreeSet<>(NamespaceUtils.QNAME_COMPARATOR);
keys: for (Enumeration it = properties.keys(); it.hasMoreElements();) {
String key = it.nextElement();
- if (key.equalsIgnoreCase(LdapAttrs.objectClass.name()))
+ if (key.equalsIgnoreCase(LdapAttr.objectClass.name()))
continue keys;
- if (key.equalsIgnoreCase(LdapAttrs.objectClasses.name()))
+ if (key.equalsIgnoreCase(LdapAttr.objectClasses.name()))
continue keys;
- ContentName name = new ContentName(CrName.LDAP_NAMESPACE_URI, key, provider);
+ ContentName name = new ContentName(ArgeoNamespace.LDAP_NAMESPACE_URI, key, provider);
keys.add(name);
}
return keys;
@@ -62,16 +64,16 @@ abstract class AbstractDirectoryContent extends AbstractContent {
public List getContentClasses() {
Dictionary properties = doGetProperties();
List contentClasses = new ArrayList<>();
- String objectClass = properties.get(LdapAttrs.objectClass.name()).toString();
- contentClasses.add(new ContentName(CrName.LDAP_NAMESPACE_URI, objectClass, provider));
+ String objectClass = properties.get(LdapAttr.objectClass.name()).toString();
+ contentClasses.add(new ContentName(ArgeoNamespace.LDAP_NAMESPACE_URI, objectClass, provider));
- String[] objectClasses = properties.get(LdapAttrs.objectClasses.name()).toString().split("\\n");
+ String[] objectClasses = properties.get(LdapAttr.objectClasses.name()).toString().split("\\n");
objectClasses: for (String oc : objectClasses) {
- if (LdapObjs.top.name().equalsIgnoreCase(oc))
+ if (LdapObj.top.name().equalsIgnoreCase(oc))
continue objectClasses;
if (objectClass.equalsIgnoreCase(oc))
continue objectClasses;
- contentClasses.add(new ContentName(CrName.LDAP_NAMESPACE_URI, oc, provider));
+ contentClasses.add(new ContentName(ArgeoNamespace.LDAP_NAMESPACE_URI, oc, provider));
}
return contentClasses;
}
@@ -79,8 +81,7 @@ abstract class AbstractDirectoryContent extends AbstractContent {
@Override
public Object put(QName key, Object value) {
Object previous = get(key);
- // TODO deal with typing
- doGetProperties().put(key.getLocalPart(), value);
+ provider.getUserManager().edit(() -> doGetProperties().put(key.getLocalPart(), value));
return previous;
}