]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java
Fix creation of empty file.
[lgpl/argeo-commons.git] / org.argeo.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.URL;
6 import java.nio.file.FileSystem;
7 import java.nio.file.Files;
8 import java.nio.file.Path;
9 import java.util.HashMap;
10 import java.util.Map;
11
12 import javax.jcr.Session;
13 import javax.jcr.SimpleCredentials;
14
15 import org.apache.jackrabbit.core.RepositoryImpl;
16 import org.apache.jackrabbit.core.config.RepositoryConfig;
17 import org.argeo.jcr.fs.JcrFileSystem;
18 import org.argeo.jcr.fs.JcrFsException;
19
20 public class JackrabbitMemoryFsProvider extends AbstractJackrabbitFsProvider {
21 private RepositoryImpl repository;
22 private JcrFileSystem fileSystem;
23
24 @Override
25 public String getScheme() {
26 return "jcr+memory";
27 }
28
29 @Override
30 public FileSystem newFileSystem(URI uri, Map<String, ?> env) throws IOException {
31 try {
32 Path tempDir = Files.createTempDirectory("fs-memory");
33 URL confUrl = getClass().getResource("fs-memory.xml");
34 RepositoryConfig repositoryConfig = RepositoryConfig.create(confUrl.toURI(), tempDir.toString());
35 repository = RepositoryImpl.create(repositoryConfig);
36 String username = System.getProperty("user.name");
37 Session session = repository.login(new SimpleCredentials(username, username.toCharArray()));
38 fileSystem = new JcrFileSystem(this, session);
39 return fileSystem;
40 } catch (Exception e) {
41 throw new JcrFsException("Cannot login to repository", e);
42 }
43 }
44
45 @Override
46 public FileSystem getFileSystem(URI uri) {
47 return fileSystem;
48 }
49
50 @Override
51 public Path getPath(URI uri) {
52 String path = uri.getPath();
53 if(fileSystem==null)
54 try {
55 newFileSystem(uri, new HashMap<String, Object>());
56 } catch (IOException e) {
57 throw new JcrFsException("Could not autocreate file system",e);
58 }
59 return fileSystem.getPath(path);
60 }
61
62 }