]> git.argeo.org Git - lgpl/argeo-commons.git/blob - JackrabbitRepositoryFactory.java
65bdf29393478ae0b1b99371ed441e54288e9762
[lgpl/argeo-commons.git] / JackrabbitRepositoryFactory.java
1 package org.argeo.jackrabbit;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import java.util.Properties;
6
7 import javax.jcr.Repository;
8 import javax.jcr.RepositoryException;
9 import javax.jcr.RepositoryFactory;
10
11 import org.apache.commons.logging.Log;
12 import org.apache.commons.logging.LogFactory;
13 import org.apache.jackrabbit.commons.JcrUtils;
14 import org.apache.jackrabbit.jcr2dav.Jcr2davRepositoryFactory;
15 import org.argeo.ArgeoException;
16 import org.argeo.jcr.ArgeoJcrConstants;
17 import org.argeo.jcr.DefaultRepositoryFactory;
18
19 /**
20 * Repository factory which can create new repositories and access remote
21 * Jackrabbit repositories
22 */
23 public class JackrabbitRepositoryFactory extends DefaultRepositoryFactory
24 implements RepositoryFactory, ArgeoJcrConstants {
25 private final static Log log = LogFactory
26 .getLog(JackrabbitRepositoryFactory.class);
27
28 @SuppressWarnings({ "rawtypes", "unchecked" })
29 public Repository getRepository(Map parameters) throws RepositoryException {
30 // check if can be found by alias
31 Repository repository = super.getRepository(parameters);
32 if (repository != null)
33 return repository;
34
35 // check if remote
36 String uri = null;
37 if (parameters.containsKey(JCR_REPOSITORY_URI))
38 uri = parameters.get(JCR_REPOSITORY_URI).toString();
39 else if (parameters.containsKey(JcrUtils.REPOSITORY_URI))
40 uri = parameters.get(JcrUtils.REPOSITORY_URI).toString();
41
42 if (uri == null)
43 repository = createRemoteRepository(uri);
44
45 if (parameters.containsKey(JCR_REPOSITORY_ALIAS)) {
46 Properties properties = new Properties();
47 properties.putAll(parameters);
48 String alias = parameters.get(JCR_REPOSITORY_ALIAS).toString();
49 publish(alias, repository, properties);
50 log.info("Registered JCR repository under alias '" + alias
51 + "' with properties " + properties);
52 }
53
54 return repository;
55 }
56
57 protected Repository createRemoteRepository(String uri)
58 throws RepositoryException {
59 Map<String, String> params = new HashMap<String, String>();
60 params.put(JcrUtils.REPOSITORY_URI, uri);
61 Repository repository = new Jcr2davRepositoryFactory()
62 .getRepository(params);
63 if (repository == null)
64 throw new ArgeoException("Remote Davex repository " + uri
65 + " not found");
66 log.info("Initialized remote Jackrabbit repository from uri " + uri);
67 return repository;
68 }
69
70 /**
71 * Called after the repository has been initialized. Does nothing by
72 * default.
73 */
74 @SuppressWarnings("rawtypes")
75 protected void postInitialization(Repository repository, Map parameters) {
76
77 }
78
79 }