View Javadoc
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  			params.put(JACKRABBIT_REMOTE_DEFAULT_WORKSPACE, "main");
87  
88  			try {
89  				repository = repositoryFactory.getRepository(params);
90  				if (repository != null)
91  					session = repository.login(workspace);
92  				else
93  					throw new IllegalArgumentException("Repository " + repoUri + " not found");
94  			} catch (RepositoryException e) {
95  				e.printStackTrace();
96  			}
97  
98  		} else {
99  			Path path = Paths.get(uri.getPath());
100 		}
101 
102 		try {
103 			Node rootNode = session.getRootNode();
104 			NodeIterator nit = rootNode.getNodes();
105 			while (nit.hasNext()) {
106 				System.out.println(nit.nextNode().getPath());
107 			}
108 
109 			Node newNode = JcrUtils.mkdirs(rootNode, "dir/subdir");
110 			System.out.println("Created folder " + newNode.getPath());
111 			Node newFile = JcrUtils.copyBytesAsFile(newNode, "test.txt", "TEST".getBytes());
112 			System.out.println("Created file " + newFile.getPath());
113 			try (BufferedReader reader = new BufferedReader(new InputStreamReader(JcrUtils.getFileAsStream(newFile)))) {
114 				System.out.println("Read " + reader.readLine());
115 			} catch (IOException e) {
116 				e.printStackTrace();
117 			}
118 			newNode.getParent().remove();
119 			System.out.println("Removed new nodes");
120 		} catch (RepositoryException e) {
121 			e.printStackTrace();
122 		}
123 	}
124 }