Improve Jackrabbit
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jackrabbit / src / main / java / org / argeo / server / jackrabbit / JackrabbitContainer.java
diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java
new file mode 100644 (file)
index 0000000..2118ff1
--- /dev/null
@@ -0,0 +1,85 @@
+package org.argeo.server.jackrabbit;
+
+import java.io.File;
+import java.io.InputStream;
+
+import javax.jcr.Credentials;
+import javax.jcr.LoginException;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.core.RepositoryImpl;
+import org.apache.jackrabbit.core.config.RepositoryConfig;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.core.io.Resource;
+
+public class JackrabbitContainer implements InitializingBean, DisposableBean,
+               Repository {
+       private Resource configuration;
+       private File homeDirectory;
+
+       private RepositoryImpl repository;
+
+       public void afterPropertiesSet() throws Exception {
+               RepositoryConfig config;
+               InputStream in = configuration.getInputStream();
+               try {
+                       config = RepositoryConfig.create(in, homeDirectory
+                                       .getCanonicalPath());
+               } catch (Exception e) {
+                       throw new RuntimeException("Cannot read configuration", e);
+               } finally {
+                       IOUtils.closeQuietly(in);
+               }
+
+               repository = RepositoryImpl.create(config);
+       }
+
+       public void destroy() throws Exception {
+               if (repository != null)
+                       repository.shutdown();
+       }
+
+       // JCR REPOSITORY (delegated)
+       public String getDescriptor(String key) {
+               return repository.getDescriptor(key);
+       }
+
+       public String[] getDescriptorKeys() {
+               return repository.getDescriptorKeys();
+       }
+
+       public Session login() throws LoginException, RepositoryException {
+               return login();
+       }
+
+       public Session login(Credentials credentials, String workspaceName)
+                       throws LoginException, NoSuchWorkspaceException,
+                       RepositoryException {
+               return login(credentials, workspaceName);
+       }
+
+       public Session login(Credentials credentials) throws LoginException,
+                       RepositoryException {
+               return login(credentials);
+       }
+
+       public Session login(String workspaceName) throws LoginException,
+                       NoSuchWorkspaceException, RepositoryException {
+               return login(workspaceName);
+       }
+
+       // BEANS METHODS
+       public void setHomeDirectory(File homeDirectory) {
+               this.homeDirectory = homeDirectory;
+       }
+
+       public void setConfiguration(Resource configuration) {
+               this.configuration = configuration;
+       }
+
+}