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
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);
}