Start simplifying and clarifying CMS initialisation. Remove Jackrabbit
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / jcr / CustomRepositoryConfigurationParser.java
diff --git a/org.argeo.cms/src/org/argeo/cms/internal/jcr/CustomRepositoryConfigurationParser.java b/org.argeo.cms/src/org/argeo/cms/internal/jcr/CustomRepositoryConfigurationParser.java
new file mode 100644 (file)
index 0000000..2e703ce
--- /dev/null
@@ -0,0 +1,48 @@
+package org.argeo.cms.internal.jcr;
+
+import java.util.Properties;
+
+import org.apache.jackrabbit.core.config.ConfigurationException;
+import org.apache.jackrabbit.core.config.RepositoryConfigurationParser;
+import org.apache.jackrabbit.core.config.WorkspaceSecurityConfig;
+import org.apache.jackrabbit.core.util.db.ConnectionFactory;
+import org.w3c.dom.Element;
+
+/**
+ * A {@link RepositoryConfigurationParser} providing more flexibility with
+ * classloaders.
+ */
+@SuppressWarnings("restriction")
+class CustomRepositoryConfigurationParser extends RepositoryConfigurationParser {
+       private ClassLoader accessControlProviderClassLoader = null;
+
+       public CustomRepositoryConfigurationParser(Properties variables) {
+               super(variables);
+       }
+
+       public CustomRepositoryConfigurationParser(Properties variables, ConnectionFactory connectionFactory) {
+               super(variables, connectionFactory);
+       }
+
+       @Override
+       protected RepositoryConfigurationParser createSubParser(Properties variables) {
+               Properties props = new Properties(getVariables());
+               props.putAll(variables);
+               CustomRepositoryConfigurationParser subParser = new CustomRepositoryConfigurationParser(props,
+                               connectionFactory);
+               subParser.setAccessControlProviderClassLoader(accessControlProviderClassLoader);
+               return subParser;
+       }
+
+       @Override
+       public WorkspaceSecurityConfig parseWorkspaceSecurityConfig(Element parent) throws ConfigurationException {
+               WorkspaceSecurityConfig workspaceSecurityConfig = super.parseWorkspaceSecurityConfig(parent);
+               workspaceSecurityConfig.getAccessControlProviderConfig().setClassLoader(accessControlProviderClassLoader);
+               return workspaceSecurityConfig;
+       }
+
+       public void setAccessControlProviderClassLoader(ClassLoader accessControlProviderClassLoader) {
+               this.accessControlProviderClassLoader = accessControlProviderClassLoader;
+       }
+
+}