X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.jcr%2Fsrc%2Forg%2Fargeo%2Fjackrabbit%2Ffs%2FDavexFsProvider.java;h=5a0834d3062ec5500d37ee0d1702919db1294c91;hb=89f88b7362871463a620c4a48aef98c48864e9fb;hp=764eed0354bd742123326b92052ca49ed0479965;hpb=088c1b517a543e935d8ab65c3b2fd2d0269b551d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.jcr/src/org/argeo/jackrabbit/fs/DavexFsProvider.java b/org.argeo.jcr/src/org/argeo/jackrabbit/fs/DavexFsProvider.java index 764eed035..5a0834d30 100644 --- a/org.argeo.jcr/src/org/argeo/jackrabbit/fs/DavexFsProvider.java +++ b/org.argeo.jcr/src/org/argeo/jackrabbit/fs/DavexFsProvider.java @@ -15,14 +15,18 @@ import javax.jcr.Repository; import javax.jcr.RepositoryFactory; import javax.jcr.Session; -import org.apache.jackrabbit.jcr2dav.Jcr2davRepositoryFactory; +import org.argeo.jackrabbit.client.ClientDavexRepositoryFactory; import org.argeo.jcr.ArgeoJcrException; import org.argeo.jcr.fs.JcrFileSystem; import org.argeo.jcr.fs.JcrFsException; +/** + * A file system provider based on a JCR repository remotely accessed via the + * DAVEX protocol. + */ public class DavexFsProvider extends AbstractJackrabbitFsProvider { - final static String JACKRABBIT_REPOSITORY_URI = "org.apache.jackrabbit.repository.uri"; - final static String JACKRABBIT_REMOTE_DEFAULT_WORKSPACE = "org.apache.jackrabbit.spi2davex.WorkspaceNameDefault"; +// final static String JACKRABBIT_REPOSITORY_URI = "org.apache.jackrabbit.repository.uri"; +// final static String JACKRABBIT_REMOTE_DEFAULT_WORKSPACE = "org.apache.jackrabbit.spi2davex.WorkspaceNameDefault"; private Map fileSystems = new HashMap<>(); @@ -40,8 +44,8 @@ public class DavexFsProvider extends AbstractJackrabbitFsProvider { String repoKey = repoUri.toString(); if (fileSystems.containsKey(repoKey)) throw new FileSystemAlreadyExistsException("CMS file system already exists for " + repoKey); - RepositoryFactory repositoryFactory = new Jcr2davRepositoryFactory(); - return tryGetRepo(repositoryFactory, repoUri, "main"); + RepositoryFactory repositoryFactory = new ClientDavexRepositoryFactory(); + return tryGetRepo(repositoryFactory, repoUri, "home"); } catch (Exception e) { throw new ArgeoJcrException("Cannot open file system " + uri, e); } @@ -50,8 +54,8 @@ public class DavexFsProvider extends AbstractJackrabbitFsProvider { private JcrFileSystem tryGetRepo(RepositoryFactory repositoryFactory, URI repoUri, String workspace) throws IOException { Map params = new HashMap(); - params.put(JACKRABBIT_REPOSITORY_URI, repoUri.toString()); - params.put(JACKRABBIT_REMOTE_DEFAULT_WORKSPACE, "main"); + params.put(ClientDavexRepositoryFactory.JACKRABBIT_DAVEX_URI, repoUri.toString()); + params.put(ClientDavexRepositoryFactory.JACKRABBIT_REMOTE_DEFAULT_WORKSPACE, "main"); Repository repository = null; Session session = null; try { @@ -78,7 +82,7 @@ public class DavexFsProvider extends AbstractJackrabbitFsProvider { } return tryGetRepo(repositoryFactory, nextUri, nextWorkspace); } else { - JcrFileSystem fileSystem = new JcrFileSystem(this, session); + JcrFileSystem fileSystem = new JcrFileSystem(this, repository); fileSystems.put(repoUri.toString() + "/" + workspace, fileSystem); return fileSystem; } @@ -102,8 +106,7 @@ public class DavexFsProvider extends AbstractJackrabbitFsProvider { try { repoUri = new URI("http", uri.getUserInfo(), uri.getHost(), uri.getPort(), uri.getPath(), null, null); } catch (URISyntaxException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + throw new IllegalArgumentException(e); } String uriStr = repoUri.toString(); String localPath = null; @@ -112,6 +115,8 @@ public class DavexFsProvider extends AbstractJackrabbitFsProvider { localPath = uriStr.toString().substring(key.length()); } } + if ("".equals(localPath)) + localPath = "/"; return fileSystem.getPath(localPath); } @@ -126,7 +131,7 @@ public class DavexFsProvider extends AbstractJackrabbitFsProvider { public static void main(String args[]) { try { DavexFsProvider fsProvider = new DavexFsProvider(); - Path path = fsProvider.getPath(new URI("davex://root:demo@localhost:7070/jcr/node/main/home/")); + Path path = fsProvider.getPath(new URI("davex://root:demo@localhost:7070/jcr/ego/")); System.out.println(path); DirectoryStream ds = Files.newDirectoryStream(path); for (Path p : ds) {