Improve UX data parts
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / directory / RoleContent.java
index 2a22f023cb5795f40efa7545a8a83a4ef1ca6187..64feb1d6735955310ee458a00c50a53adbe842c8 100644 (file)
@@ -1,45 +1,30 @@
 package org.argeo.cms.acr.directory;
 
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.Dictionary;
 
-import javax.swing.GroupLayout.Group;
 import javax.xml.namespace.QName;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentName;
-import org.argeo.api.acr.CrName;
-import org.argeo.api.acr.NamespaceUtils;
-import org.argeo.api.acr.spi.ContentProvider;
 import org.argeo.api.acr.spi.ProvidedSession;
-import org.argeo.cms.acr.AbstractContent;
-import org.argeo.osgi.useradmin.UserDirectory;
-import org.argeo.util.naming.LdapAttrs;
-import org.argeo.util.naming.LdapObjs;
+import org.argeo.api.cms.directory.UserDirectory;
 import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
 
-class RoleContent extends AbstractContent {
+class RoleContent extends AbstractDirectoryContent {
 
-       private DirectoryContentProvider provider;
        private HierarchyUnitContent parent;
        private Role role;
 
        public RoleContent(ProvidedSession session, DirectoryContentProvider provider, HierarchyUnitContent parent,
                        Role role) {
-               super(session);
-               this.provider = provider;
+               super(session, provider);
                this.parent = parent;
                this.role = role;
        }
 
        @Override
-       public ContentProvider getProvider() {
-               return provider;
+       Dictionary<String, Object> doGetProperties() {
+               return role.getProperties();
        }
 
        @Override
@@ -53,68 +38,10 @@ class RoleContent extends AbstractContent {
                return parent;
        }
 
-       @SuppressWarnings("unchecked")
-       @Override
-       public <A> Optional<A> get(QName key, Class<A> clss) {
-               String attrName = key.getLocalPart();
-               Object value = role.getProperties().get(attrName);
-               if (value == null)
-                       return Optional.empty();
-               // TODO deal with type and multiple
-               return Optional.of((A) value);
-       }
-
-       @Override
-       protected Iterable<QName> keys() {
-               Set<QName> keys = new TreeSet<>(NamespaceUtils.QNAME_COMPARATOR);
-               keys: for (Enumeration<String> it = role.getProperties().keys(); it.hasMoreElements();) {
-                       String key = it.nextElement();
-                       if (key.equalsIgnoreCase(LdapAttrs.objectClass.name()))
-                               continue keys;
-                       ContentName name = new ContentName(CrName.LDAP_NAMESPACE_URI, key, provider);
-                       keys.add(name);
-               }
-               return keys;
-       }
-
-       @Override
-       public List<QName> getTypes() {
-               List<QName> contentClasses = new ArrayList<>();
-               String objectClass = role.getProperties().get(LdapAttrs.objectClass.name()).toString();
-               contentClasses.add(new ContentName(CrName.LDAP_NAMESPACE_URI, objectClass, provider));
-
-               String[] objectClasses = role.getProperties().get(LdapAttrs.objectClasses.name()).toString().split("\\n");
-               objectClasses: for (String oc : objectClasses) {
-                       if (LdapObjs.top.name().equalsIgnoreCase(oc))
-                               continue objectClasses;
-                       if (objectClass.equalsIgnoreCase(oc))
-                               continue objectClasses;
-                       contentClasses.add(new ContentName(CrName.LDAP_NAMESPACE_URI, oc, provider));
-               }
-               return contentClasses;
-       }
-
-       @Override
-       public Object put(QName key, Object value) {
-               Object previous = get(key);
-               // TODO deal with typing
-               role.getProperties().put(key.getLocalPart(), value);
-               return previous;
-       }
-
-       @Override
-       protected void removeAttr(QName key) {
-               role.getProperties().remove(key.getLocalPart());
-       }
-
        @SuppressWarnings("unchecked")
        @Override
        public <A> A adapt(Class<A> clss) {
-               if (clss.equals(Group.class))
-                       return (A) role;
-               else if (clss.equals(User.class))
-                       return (A) role;
-               else if (clss.equals(Role.class))
+               if (Role.class.isAssignableFrom(clss))
                        return (A) role;
                return super.adapt(clss);
        }