]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitRepositoryFactory.java
Improve JCR remoting
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jackrabbit / src / main / java / org / argeo / jackrabbit / JackrabbitRepositoryFactory.java
index ac3cce9fdaf2d5fd065bea8636906b04cbe4c110..bcf02a3c1e564896a9dffb7b6b73ceabcdb2577b 100644 (file)
@@ -1,24 +1,48 @@
 package org.argeo.jackrabbit;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.RepositoryFactory;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jackrabbit.commons.JcrUtils;
+import org.apache.jackrabbit.jcr2dav.Jcr2davRepositoryFactory;
+import org.argeo.ArgeoException;
 import org.argeo.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.DefaultRepositoryRegister;
+import org.argeo.jcr.DefaultRepositoryFactory;
 
-public class JackrabbitRepositoryFactory extends DefaultRepositoryRegister
+public class JackrabbitRepositoryFactory extends DefaultRepositoryFactory
                implements RepositoryFactory, ArgeoJcrConstants {
+       private final static Log log = LogFactory
+                       .getLog(JackrabbitRepositoryFactory.class);
 
        @SuppressWarnings("rawtypes")
        public Repository getRepository(Map parameters) throws RepositoryException {
-               String alias;
-               if (parameters.containsKey(JCR_REPOSITORY_ALIAS)) {
-                       alias = parameters.get(JCR_REPOSITORY_ALIAS).toString();
-               }
-               return null;
-       }
+               Repository repository = super.getRepository(parameters);
+               if (repository != null)
+                       return repository;
+
+               String uri;
+               if (parameters.containsKey(JCR_REPOSITORY_URI))
+                       uri = parameters.get(JCR_REPOSITORY_URI).toString();
+               else if (parameters.containsKey(JcrUtils.REPOSITORY_URI))
+                       uri = parameters.get(JcrUtils.REPOSITORY_URI).toString();
+               else
+                       return null;
+               
+               Map<String, String> params = new HashMap<String, String>();
+               params.put(JcrUtils.REPOSITORY_URI, uri);
+               repository = new Jcr2davRepositoryFactory().getRepository(params);
+               if (repository == null)
+                       throw new ArgeoException("Remote Davex repository " + uri
+                                       + " not found");
+               log.info("Initialized remote Jackrabbit repository " + repository
+                               + " from uri " + uri);
 
+               return repository;
+       }
 }