X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.jcr%2Fsrc%2Forg%2Fargeo%2Fjackrabbit%2Ffs%2FJackrabbitMemoryFsProvider.java;h=e3a70d0842165d11a447f19380b67a7e2c77278e;hb=905c6bcd909d84c6e980994d9eeed22a0bf237af;hp=0ed826894e9a5e79e2df98023f0a118389d44fb4;hpb=d8037dd6a59ff5d38d7c7182a9ef6c26c8001a4f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java b/org.argeo.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java index 0ed826894..e3a70d084 100644 --- a/org.argeo.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java +++ b/org.argeo.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java @@ -2,6 +2,7 @@ package org.argeo.jackrabbit.fs; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.FileSystem; import java.nio.file.Files; @@ -9,6 +10,9 @@ import java.nio.file.Path; import java.util.HashMap; import java.util.Map; +import javax.jcr.Credentials; +import javax.jcr.Repository; +import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.SimpleCredentials; @@ -21,6 +25,13 @@ public class JackrabbitMemoryFsProvider extends AbstractJackrabbitFsProvider { private RepositoryImpl repository; private JcrFileSystem fileSystem; + private Credentials credentials; + + public JackrabbitMemoryFsProvider() { + String username = System.getProperty("user.name"); + credentials = new SimpleCredentials(username, username.toCharArray()); + } + @Override public String getScheme() { return "jcr+memory"; @@ -30,15 +41,14 @@ public class JackrabbitMemoryFsProvider extends AbstractJackrabbitFsProvider { public FileSystem newFileSystem(URI uri, Map env) throws IOException { try { Path tempDir = Files.createTempDirectory("fs-memory"); - URL confUrl = getClass().getResource("fs-memory.xml"); + URL confUrl = JackrabbitMemoryFsProvider.class.getResource("fs-memory.xml"); RepositoryConfig repositoryConfig = RepositoryConfig.create(confUrl.toURI(), tempDir.toString()); repository = RepositoryImpl.create(repositoryConfig); - String username = System.getProperty("user.name"); - Session session = repository.login(new SimpleCredentials(username, username.toCharArray())); - fileSystem = new JcrFileSystem(this, session); + postRepositoryCreation(repository); + fileSystem = new JcrFileSystem(this, repository, credentials); return fileSystem; - } catch (Exception e) { - throw new JcrFsException("Cannot login to repository", e); + } catch (RepositoryException | URISyntaxException e) { + throw new IOException("Cannot login to repository", e); } } @@ -50,13 +60,28 @@ public class JackrabbitMemoryFsProvider extends AbstractJackrabbitFsProvider { @Override public Path getPath(URI uri) { String path = uri.getPath(); - if(fileSystem==null) + if (fileSystem == null) try { newFileSystem(uri, new HashMap()); } catch (IOException e) { - throw new JcrFsException("Could not autocreate file system",e); + throw new JcrFsException("Could not autocreate file system", e); } return fileSystem.getPath(path); } + public Repository getRepository() { + return repository; + } + + public Session login() throws RepositoryException { + return getRepository().login(credentials); + } + + /** + * Called after the repository has been created and before the file system is + * created. + */ + protected void postRepositoryCreation(RepositoryImpl repositoryImpl) throws RepositoryException { + + } }