1 package org
.argeo
.jackrabbit
.client
;
3 import java
.io
.BufferedReader
;
4 import java
.io
.IOException
;
5 import java
.io
.InputStreamReader
;
7 import java
.net
.URISyntaxException
;
8 import java
.nio
.file
.Path
;
9 import java
.nio
.file
.Paths
;
10 import java
.util
.HashMap
;
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
;
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
;
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";
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];
44 Repository repository
= null;
45 Session session
= null;
49 uri
= new URI(repoUri
);
50 } catch (URISyntaxException e1
) {
51 throw new IllegalArgumentException(e1
);
54 if (uri
.getScheme().equals("http") || uri
.getScheme().equals("https")) {
56 RepositoryFactory repositoryFactory
= new Jcr2davRepositoryFactory() {
57 @SuppressWarnings("rawtypes")
58 public Repository
getRepository(Map parameters
) throws RepositoryException
{
59 RepositoryServiceFactory repositoryServiceFactory
= new Spi2davexRepositoryServiceFactory() {
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
) {
71 protected HttpContext
getContext(SessionInfo sessionInfo
) throws RepositoryException
{
72 HttpClientContext result
= HttpClientContext
.create();
73 result
.setAuthCache(new NonSerialBasicAuthCache());
80 return RepositoryImpl
.create(
81 new Jcr2spiRepositoryFactory
.RepositoryConfigImpl(repositoryServiceFactory
, parameters
));
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");
90 repository
= repositoryFactory
.getRepository(params
);
91 if (repository
!= null)
92 session
= repository
.login(workspace
);
94 throw new IllegalArgumentException("Repository " + repoUri
+ " not found");
95 } catch (RepositoryException e
) {
100 Path path
= Paths
.get(uri
.getPath());
104 Node rootNode
= session
.getRootNode();
105 NodeIterator nit
= rootNode
.getNodes();
106 while (nit
.hasNext()) {
107 System
.out
.println(nit
.nextNode().getPath());
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
) {
119 newNode
.getParent().remove();
120 System
.out
.println("Removed new nodes");
121 } catch (RepositoryException e
) {