]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.jcr/src/org/argeo/jackrabbit/client/JackrabbitClient.java
Stabilise configuration and documentation of UUID factory.
[lgpl/argeo-commons.git] / org.argeo.cms.jcr / src / org / argeo / jackrabbit / client / JackrabbitClient.java
1 package org.argeo.jackrabbit.client;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.net.URI;
7 import java.net.URISyntaxException;
8 import java.nio.file.Path;
9 import java.nio.file.Paths;
10 import java.util.HashMap;
11 import java.util.Map;
12
13 import javax.jcr.Node;
14 import javax.jcr.NodeIterator;
15 import javax.jcr.Repository;
16 import javax.jcr.RepositoryException;
17 import javax.jcr.RepositoryFactory;
18 import javax.jcr.Session;
19
20 import org.apache.http.client.protocol.HttpClientContext;
21 import org.apache.http.protocol.HttpContext;
22 import org.apache.jackrabbit.jcr2dav.Jcr2davRepositoryFactory;
23 import org.apache.jackrabbit.jcr2spi.Jcr2spiRepositoryFactory;
24 import org.apache.jackrabbit.jcr2spi.RepositoryImpl;
25 import org.apache.jackrabbit.spi.RepositoryService;
26 import org.apache.jackrabbit.spi.RepositoryServiceFactory;
27 import org.apache.jackrabbit.spi.SessionInfo;
28 import org.apache.jackrabbit.spi.commons.ItemInfoCacheImpl;
29 import org.apache.jackrabbit.spi2davex.BatchReadConfig;
30 import org.apache.jackrabbit.spi2davex.RepositoryServiceImpl;
31 import org.apache.jackrabbit.spi2davex.Spi2davexRepositoryServiceFactory;
32 import org.argeo.jcr.JcrUtils;
33
34 /** Minimal client to test JCR DAVEX connectivity. */
35 public class JackrabbitClient {
36 final static String JACKRABBIT_REPOSITORY_URI = "org.apache.jackrabbit.repository.uri";
37 final static String JACKRABBIT_DAVEX_URI = "org.apache.jackrabbit.spi2davex.uri";
38 final static String JACKRABBIT_REMOTE_DEFAULT_WORKSPACE = "org.apache.jackrabbit.spi2davex.WorkspaceNameDefault";
39
40 public static void main(String[] args) {
41 String repoUri = args.length == 0 ? "http://root:demo@localhost:7070/jcr/ego" : args[0];
42 String workspace = args.length < 2 ? "home" : args[1];
43
44 Repository repository = null;
45 Session session = null;
46
47 URI uri;
48 try {
49 uri = new URI(repoUri);
50 } catch (URISyntaxException e1) {
51 throw new IllegalArgumentException(e1);
52 }
53
54 if (uri.getScheme().equals("http") || uri.getScheme().equals("https")) {
55
56 RepositoryFactory repositoryFactory = new Jcr2davRepositoryFactory() {
57 @SuppressWarnings("rawtypes")
58 public Repository getRepository(Map parameters) throws RepositoryException {
59 RepositoryServiceFactory repositoryServiceFactory = new Spi2davexRepositoryServiceFactory() {
60
61 @Override
62 public RepositoryService createRepositoryService(Map<?, ?> parameters)
63 throws RepositoryException {
64 Object uri = parameters.get(JACKRABBIT_DAVEX_URI);
65 Object defaultWorkspace = parameters.get(JACKRABBIT_REMOTE_DEFAULT_WORKSPACE);
66 BatchReadConfig brc = null;
67 return new RepositoryServiceImpl(uri.toString(), defaultWorkspace.toString(), brc,
68 ItemInfoCacheImpl.DEFAULT_CACHE_SIZE) {
69
70 @Override
71 protected HttpContext getContext(SessionInfo sessionInfo) throws RepositoryException {
72 HttpClientContext result = HttpClientContext.create();
73 result.setAuthCache(new NonSerialBasicAuthCache());
74 return result;
75 }
76
77 };
78 }
79 };
80 return RepositoryImpl.create(
81 new Jcr2spiRepositoryFactory.RepositoryConfigImpl(repositoryServiceFactory, parameters));
82 }
83 };
84 Map<String, String> params = new HashMap<String, String>();
85 params.put(JACKRABBIT_DAVEX_URI, repoUri.toString());
86 // FIXME make it configurable
87 params.put(JACKRABBIT_REMOTE_DEFAULT_WORKSPACE, "sys");
88
89 try {
90 repository = repositoryFactory.getRepository(params);
91 if (repository != null)
92 session = repository.login(workspace);
93 else
94 throw new IllegalArgumentException("Repository " + repoUri + " not found");
95 } catch (RepositoryException e) {
96 e.printStackTrace();
97 }
98
99 } else {
100 Path path = Paths.get(uri.getPath());
101 }
102
103 try {
104 Node rootNode = session.getRootNode();
105 NodeIterator nit = rootNode.getNodes();
106 while (nit.hasNext()) {
107 System.out.println(nit.nextNode().getPath());
108 }
109
110 Node newNode = JcrUtils.mkdirs(rootNode, "dir/subdir");
111 System.out.println("Created folder " + newNode.getPath());
112 Node newFile = JcrUtils.copyBytesAsFile(newNode, "test.txt", "TEST".getBytes());
113 System.out.println("Created file " + newFile.getPath());
114 try (BufferedReader reader = new BufferedReader(new InputStreamReader(JcrUtils.getFileAsStream(newFile)))) {
115 System.out.println("Read " + reader.readLine());
116 } catch (IOException e) {
117 e.printStackTrace();
118 }
119 newNode.getParent().remove();
120 System.out.println("Removed new nodes");
121 } catch (RepositoryException e) {
122 e.printStackTrace();
123 }
124 }
125 }