1 package org
.argeo
.jackrabbit
;
3 import java
.util
.HashMap
;
5 import java
.util
.Properties
;
7 import javax
.jcr
.Repository
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.RepositoryFactory
;
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
;
20 * Repository factory which can create new repositories and access remote
21 * Jackrabbit repositories
23 public class JackrabbitRepositoryFactory
extends DefaultRepositoryFactory
24 implements RepositoryFactory
, ArgeoJcrConstants
{
25 private final static Log log
= LogFactory
26 .getLog(JackrabbitRepositoryFactory
.class);
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)
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();
43 repository
= createRemoteRepository(uri
);
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
);
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
66 log
.info("Initialized remote Jackrabbit repository from uri " + uri
);
71 * Called after the repository has been initialized. Does nothing by
74 @SuppressWarnings("rawtypes")
75 protected void postInitialization(Repository repository
, Map parameters
) {