X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FCmsFsProvider.java;h=32f7427714a568e89e08a55b3011851cfae38534;hb=cff23f8dd98a91cf74a098e11f6b941e74df2917;hp=f42646ec5907a6aa3a934448ae2b3a32fb9626c6;hpb=36c14000ab482f558a9679f75ac7bfb0953171f4;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsFsProvider.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsFsProvider.java index f42646ec5..32f742771 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsFsProvider.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsFsProvider.java @@ -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 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 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); }