X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2Fdirectory%2FDirectoryContentProvider.java;h=ab84aef37131b4a780fb92644f9ed4a96754161f;hb=ddfa9d4306fbd4fb680cf5d969fdfc32868d60f5;hp=c1ded945a61b9ac29b0f97f631b47e25c889e9ff;hpb=99bca5f6b71c24837c23cf2a9bb944e09dca3dea;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/directory/DirectoryContentProvider.java b/org.argeo.cms/src/org/argeo/cms/acr/directory/DirectoryContentProvider.java index c1ded945a..ab84aef37 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/directory/DirectoryContentProvider.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/directory/DirectoryContentProvider.java @@ -1,54 +1,52 @@ package org.argeo.cms.acr.directory; import java.util.ArrayList; -import java.util.Collections; import java.util.Iterator; import java.util.List; -import javax.xml.namespace.QName; - +import org.argeo.api.acr.ArgeoNamespace; import org.argeo.api.acr.Content; -import org.argeo.api.acr.ContentName; import org.argeo.api.acr.ContentNotFoundException; -import org.argeo.api.acr.CrName; import org.argeo.api.acr.spi.ContentProvider; import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedSession; -import org.argeo.cms.CmsUserManager; -import org.argeo.cms.acr.AbstractContent; +import org.argeo.api.cms.directory.CmsUserManager; +import org.argeo.api.cms.directory.HierarchyUnit; +import org.argeo.api.cms.directory.UserDirectory; +import org.argeo.cms.acr.AbstractSimpleContentProvider; import org.argeo.cms.acr.ContentUtils; -import org.argeo.osgi.useradmin.HierarchyUnit; -import org.argeo.osgi.useradmin.UserDirectory; import org.osgi.service.useradmin.User; -public class DirectoryContentProvider implements ContentProvider { - private String mountPath; - private String mountName; +/** A {@link ContentProvider} based on a {@link CmsUserManager} service. */ +public class DirectoryContentProvider extends AbstractSimpleContentProvider { - private CmsUserManager userManager; + public DirectoryContentProvider(CmsUserManager service, String mountPath) { + super(ArgeoNamespace.LDAP_NAMESPACE_URI, ArgeoNamespace.LDAP_DEFAULT_PREFIX, service, mountPath); + } - public DirectoryContentProvider(String mountPath, CmsUserManager userManager) { - this.mountPath = mountPath; - List mountSegments = ContentUtils.toPathSegments(mountPath); - this.mountName = mountSegments.get(mountSegments.size() - 1); - this.userManager = userManager; + @Override + protected Iterator firstLevel(ProvidedSession session) { + List res = new ArrayList<>(); + for (UserDirectory userDirectory : getService().getUserDirectories()) { + DirectoryContent content = new DirectoryContent(session, DirectoryContentProvider.this, userDirectory); + res.add(content); + } + return res.iterator(); } @Override - public ProvidedContent get(ProvidedSession session, String relativePath) { - List segments = ContentUtils.toPathSegments(relativePath); - if (segments.size() == 0) - return new UserManagerContent(session); - String userDirectoryDn = segments.get(0); + public ProvidedContent get(ProvidedSession session, List segments) { + String userDirectoryName = segments.get(0); UserDirectory userDirectory = null; - userDirectories: for (UserDirectory ud : userManager.getUserDirectories()) { - if (userDirectoryDn.equals(ud.getGlobalId())) { + userDirectories: for (UserDirectory ud : getService().getUserDirectories()) { + if (userDirectoryName.equals(ud.getName())) { userDirectory = ud; break userDirectories; } } if (userDirectory == null) - throw new ContentNotFoundException("Cannot find user directory " + userDirectoryDn); + throw new ContentNotFoundException(session, getMountPath() + "/" + ContentUtils.toPath(segments), + "Cannot find user directory " + userDirectoryName); if (segments.size() == 1) { return new DirectoryContent(session, this, userDirectory); } else { @@ -71,76 +69,28 @@ public class DirectoryContentProvider implements ContentProvider { } HierarchyUnit hierarchyUnit = userDirectory.getHierarchyUnit(pathWithinUserDirectory); if (hierarchyUnit == null) - throw new ContentNotFoundException( - "Cannot find " + pathWithinUserDirectory + " within " + userDirectoryDn); + throw new ContentNotFoundException(session, + getMountPath() + "/" + ContentUtils.toPath(segments) + "/" + pathWithinUserDirectory, + "Cannot find " + pathWithinUserDirectory + " within " + userDirectoryName); return new HierarchyUnitContent(session, this, hierarchyUnit); } } @Override public boolean exists(ProvidedSession session, String relativePath) { - // TODO Auto-generated method stub - return false; - } - - @Override - public String getMountPath() { - return mountPath; - } - - @Override - public String getNamespaceURI(String prefix) { - if (CrName.LDAP_DEFAULT_PREFIX.equals(prefix)) - return CrName.LDAP_NAMESPACE_URI; - throw new IllegalArgumentException("Only prefix " + CrName.LDAP_DEFAULT_PREFIX + " is supported"); - } - - @Override - public Iterator getPrefixes(String namespaceURI) { - if (CrName.LDAP_NAMESPACE_URI.equals(namespaceURI)) - return Collections.singletonList(CrName.LDAP_DEFAULT_PREFIX).iterator(); - throw new IllegalArgumentException("Only namespace URI " + CrName.LDAP_NAMESPACE_URI + " is supported"); + // TODO optimise? + return exists(session, relativePath); } - public void setUserManager(CmsUserManager userManager) { - this.userManager = userManager; - } +// public void setUserManager(CmsUserManager userManager) { +// this.userManager = userManager; +// } - UserManagerContent getRootContent(ProvidedSession session) { - return new UserManagerContent(session); + CmsUserManager getUserManager() { + return getService(); } - class UserManagerContent extends AbstractContent { - - public UserManagerContent(ProvidedSession session) { - super(session); - } - - @Override - public ContentProvider getProvider() { - return DirectoryContentProvider.this; - } - - @Override - public QName getName() { - return new ContentName(mountName); - } - - @Override - public Content getParent() { - return null; - } - - @Override - public Iterator iterator() { - List res = new ArrayList<>(); - for (UserDirectory userDirectory : userManager.getUserDirectories()) { - DirectoryContent content = new DirectoryContent(getSession(), DirectoryContentProvider.this, - userDirectory); - res.add(content); - } - return res.iterator(); - } - + ServiceContent getRootContent(ProvidedSession session) { + return new ServiceContent(session); } }