]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/acr/directory/DirectoryContentProvider.java
Refactor WebDav implementation
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / directory / DirectoryContentProvider.java
index 60ef67551a17109528ff7a9d42cbe49f6e72f70a..aab5d6dc06a56ab69cdd533a800450c38f01c8a9 100644 (file)
@@ -5,8 +5,6 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
-import javax.naming.InvalidNameException;
-import javax.naming.ldap.LdapName;
 import javax.xml.namespace.QName;
 
 import org.argeo.api.acr.Content;
@@ -19,9 +17,8 @@ import org.argeo.api.acr.spi.ProvidedSession;
 import org.argeo.cms.CmsUserManager;
 import org.argeo.cms.acr.AbstractContent;
 import org.argeo.cms.acr.ContentUtils;
-import org.argeo.osgi.useradmin.HierarchyUnit;
-import org.argeo.osgi.useradmin.LdapNameUtils;
 import org.argeo.osgi.useradmin.UserDirectory;
+import org.argeo.util.directory.HierarchyUnit;
 import org.osgi.service.useradmin.User;
 
 public class DirectoryContentProvider implements ContentProvider {
@@ -42,36 +39,42 @@ public class DirectoryContentProvider implements ContentProvider {
                List<String> segments = ContentUtils.toPathSegments(relativePath);
                if (segments.size() == 0)
                        return new UserManagerContent(session);
-               String userDirectoryDn = segments.get(0);
+               String userDirectoryName = segments.get(0);
                UserDirectory userDirectory = null;
                userDirectories: for (UserDirectory ud : userManager.getUserDirectories()) {
-                       if (userDirectoryDn.equals(ud.getBasePath())) {
+                       if (userDirectoryName.equals(ud.getName())) {
                                userDirectory = ud;
                                break userDirectories;
                        }
                }
                if (userDirectory == null)
-                       throw new ContentNotFoundException("Cannot find user directory " + userDirectoryDn);
+                       throw new ContentNotFoundException(session, mountPath + "/" + relativePath,
+                                       "Cannot find user directory " + userDirectoryName);
                if (segments.size() == 1) {
-                       return new HierarchyUnitContent(session, this, userDirectory);
+                       return new DirectoryContent(session, this, userDirectory);
                } else {
-                       LdapName dn;
-                       try {
-                               dn = LdapNameUtils.toLdapName(userDirectoryDn);
-                               for (int i = 1; i < segments.size(); i++) {
-                                       dn.add(segments.get(i));
-                               }
-                       } catch (InvalidNameException e) {
-                               throw new IllegalStateException("Cannot interpret " + segments + " as DN", e);
-                       }
-                       User user = userManager.getUser(dn.toString());
+                       List<String> relSegments = new ArrayList<>(segments);
+                       relSegments.remove(0);
+                       String pathWithinUserDirectory = ContentUtils.toPath(relSegments);
+//                     LdapName dn;
+//                     try {
+//                             dn = LdapNameUtils.toLdapName(userDirectoryDn);
+//                             for (int i = 1; i < segments.size(); i++) {
+//                                     dn.add(segments.get(i));
+//                             }
+//                     } catch (InvalidNameException e) {
+//                             throw new IllegalStateException("Cannot interpret " + segments + " as DN", e);
+//                     }
+                       User user = (User) userDirectory.getRoleByPath(pathWithinUserDirectory);
                        if (user != null) {
                                HierarchyUnit parent = userDirectory.getHierarchyUnit(user);
                                return new RoleContent(session, this, new HierarchyUnitContent(session, this, parent), user);
                        }
-                       HierarchyUnit hierarchyUnit = userDirectory.getHierarchyUnit(dn.toString());
+                       HierarchyUnit hierarchyUnit = userDirectory.getHierarchyUnit(pathWithinUserDirectory);
                        if (hierarchyUnit == null)
-                               throw new ContentNotFoundException("Cannot find " + dn);
+                               throw new ContentNotFoundException(session,
+                                               mountPath + "/" + relativePath + "/" + pathWithinUserDirectory,
+                                               "Cannot find " + pathWithinUserDirectory + " within " + userDirectoryName);
                        return new HierarchyUnitContent(session, this, hierarchyUnit);
                }
        }
@@ -104,11 +107,14 @@ public class DirectoryContentProvider implements ContentProvider {
        public void setUserManager(CmsUserManager userManager) {
                this.userManager = userManager;
        }
-       
+
        UserManagerContent getRootContent(ProvidedSession session) {
                return new UserManagerContent(session);
        }
 
+       /*
+        * COMMON UTILITIES
+        */
        class UserManagerContent extends AbstractContent {
 
                public UserManagerContent(ProvidedSession session) {
@@ -134,7 +140,7 @@ public class DirectoryContentProvider implements ContentProvider {
                public Iterator<Content> iterator() {
                        List<Content> res = new ArrayList<>();
                        for (UserDirectory userDirectory : userManager.getUserDirectories()) {
-                               HierarchyUnitContent content = new HierarchyUnitContent(getSession(), DirectoryContentProvider.this,
+                               DirectoryContent content = new DirectoryContent(getSession(), DirectoryContentProvider.this,
                                                userDirectory);
                                res.add(content);
                        }