Jackrabbit security improved
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jackrabbit / src / main / java / org / argeo / jackrabbit / JackrabbitRepositoryFactory.java
index ac3cce9fdaf2d5fd065bea8636906b04cbe4c110..9f2926cb34d635d35e33215d6c811e70d80007d8 100644 (file)
@@ -1,24 +1,46 @@
 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();
+               Repository repository = super.getRepository(parameters);
+               if (repository != null)
+                       return repository;
+
+               if (parameters.containsKey(JCR_REPOSITORY_URI)) {
+                       String uri = parameters.get(JCR_REPOSITORY_URI).toString();
+                       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 null;
+
+               return repository;
        }
 
 }