]> git.argeo.org Git - lgpl/argeo-commons.git/blob - jcr/org.argeo.cms.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java
Improve ACR
[lgpl/argeo-commons.git] / jcr / org.argeo.cms.jcr / src / org / argeo / jackrabbit / fs / JackrabbitMemoryFsProvider.java
1 package org.argeo.jackrabbit.fs;
2
3 import java.io.IOException;
4 import java.net.URI;
5 import java.net.URISyntaxException;
6 import java.net.URL;
7 import java.nio.file.FileSystem;
8 import java.nio.file.Files;
9 import java.nio.file.Path;
10 import java.util.HashMap;
11 import java.util.Map;
12
13 import javax.jcr.Credentials;
14 import javax.jcr.Repository;
15 import javax.jcr.RepositoryException;
16 import javax.jcr.Session;
17 import javax.jcr.SimpleCredentials;
18
19 import org.apache.jackrabbit.core.RepositoryImpl;
20 import org.apache.jackrabbit.core.config.RepositoryConfig;
21 import org.argeo.jcr.fs.JcrFileSystem;
22 import org.argeo.jcr.fs.JcrFsException;
23
24 public class JackrabbitMemoryFsProvider extends AbstractJackrabbitFsProvider {
25 private RepositoryImpl repository;
26 private JcrFileSystem fileSystem;
27
28 private Credentials credentials;
29
30 public JackrabbitMemoryFsProvider() {
31 String username = System.getProperty("user.name");
32 credentials = new SimpleCredentials(username, username.toCharArray());
33 }
34
35 @Override
36 public String getScheme() {
37 return "jcr+memory";
38 }
39
40 @Override
41 public FileSystem newFileSystem(URI uri, Map<String, ?> env) throws IOException {
42 try {
43 Path tempDir = Files.createTempDirectory("fs-memory");
44 URL confUrl = JackrabbitMemoryFsProvider.class.getResource("fs-memory.xml");
45 RepositoryConfig repositoryConfig = RepositoryConfig.create(confUrl.toURI(), tempDir.toString());
46 repository = RepositoryImpl.create(repositoryConfig);
47 postRepositoryCreation(repository);
48 fileSystem = new JcrFileSystem(this, repository, credentials);
49 return fileSystem;
50 } catch (RepositoryException | URISyntaxException e) {
51 throw new IOException("Cannot login to repository", e);
52 }
53 }
54
55 @Override
56 public FileSystem getFileSystem(URI uri) {
57 return fileSystem;
58 }
59
60 @Override
61 public Path getPath(URI uri) {
62 String path = uri.getPath();
63 if (fileSystem == null)
64 try {
65 newFileSystem(uri, new HashMap<String, Object>());
66 } catch (IOException e) {
67 throw new JcrFsException("Could not autocreate file system", e);
68 }
69 return fileSystem.getPath(path);
70 }
71
72 public Repository getRepository() {
73 return repository;
74 }
75
76 public Session login() throws RepositoryException {
77 return getRepository().login(credentials);
78 }
79
80 /**
81 * Called after the repository has been created and before the file system is
82 * created.
83 */
84 protected void postRepositoryCreation(RepositoryImpl repositoryImpl) throws RepositoryException {
85
86 }
87 }