]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsFsProvider.java
Work on CMS FS provider
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / CmsFsProvider.java
index f42646ec5907a6aa3a934448ae2b3a32fb9626c6..32f7427714a568e89e08a55b3011851cfae38534 100644 (file)
@@ -10,6 +10,7 @@ import java.util.Map;
 
 import javax.jcr.Node;
 import javax.jcr.Repository;
+import javax.jcr.RepositoryFactory;
 import javax.jcr.Session;
 
 import org.argeo.cms.CmsException;
@@ -24,7 +25,6 @@ import org.osgi.framework.FrameworkUtil;
 
 public class CmsFsProvider extends AbstractJackrabbitFsProvider {
        private Map<String, JcrFileSystem> fileSystems = new HashMap<>();
-       private BundleContext bc = FrameworkUtil.getBundle(CmsFsProvider.class).getBundleContext();
 
        @Override
        public String getScheme() {
@@ -33,6 +33,7 @@ public class CmsFsProvider extends AbstractJackrabbitFsProvider {
 
        @Override
        public FileSystem newFileSystem(URI uri, Map<String, ?> env) throws IOException {
+               BundleContext bc = FrameworkUtil.getBundle(CmsFsProvider.class).getBundleContext();
                String username = CurrentUser.getUsername();
                if (username == null) {
                        // TODO deal with anonymous
@@ -42,12 +43,23 @@ public class CmsFsProvider extends AbstractJackrabbitFsProvider {
                        throw new FileSystemAlreadyExistsException("CMS file system already exists for user " + username);
 
                try {
-                       Repository repository = bc.getService(
-                                       bc.getServiceReferences(Repository.class, "(cn=" + NodeConstants.HOME + ")").iterator().next());
-                       Session session = repository.login();
-                       JcrFileSystem fileSystem = new JcrFileSystem(this, session);
-                       fileSystems.put(username, fileSystem);
-                       return fileSystem;
+                       String host = uri.getHost();
+                       if (host != null && !host.trim().equals("")) {
+                               URI repoUri = new URI("http", uri.getUserInfo(), uri.getHost(), uri.getPort(), "/jcr/node", null, null);
+                               RepositoryFactory repositoryFactory = bc.getService(bc.getServiceReference(RepositoryFactory.class));
+                               Repository repository = NodeUtils.getRepositoryByUri(repositoryFactory, repoUri.toString());
+                               Session session = repository.login("main");
+                               JcrFileSystem fileSystem = new JcrFileSystem(this, session);
+                               fileSystems.put(username, fileSystem);
+                               return fileSystem;
+                       } else {
+                               Repository repository = bc.getService(
+                                               bc.getServiceReferences(Repository.class, "(cn=" + NodeConstants.HOME + ")").iterator().next());
+                               Session session = repository.login();
+                               JcrFileSystem fileSystem = new JcrFileSystem(this, session);
+                               fileSystems.put(username, fileSystem);
+                               return fileSystem;
+                       }
                } catch (Exception e) {
                        throw new CmsException("Cannot open file system " + uri + " for user " + username, e);
                }