View Javadoc
1   package org.argeo.cms.internal.jcr;
2   
3   import java.util.Properties;
4   
5   import org.apache.jackrabbit.core.config.ConfigurationException;
6   import org.apache.jackrabbit.core.config.RepositoryConfigurationParser;
7   import org.apache.jackrabbit.core.config.WorkspaceSecurityConfig;
8   import org.apache.jackrabbit.core.util.db.ConnectionFactory;
9   import org.w3c.dom.Element;
10  
11  /**
12   * A {@link RepositoryConfigurationParser} providing more flexibility with
13   * classloaders.
14   */
15  @SuppressWarnings("restriction")
16  class CustomRepositoryConfigurationParser extends RepositoryConfigurationParser {
17  	private ClassLoader accessControlProviderClassLoader = null;
18  
19  	public CustomRepositoryConfigurationParser(Properties variables) {
20  		super(variables);
21  	}
22  
23  	public CustomRepositoryConfigurationParser(Properties variables, ConnectionFactory connectionFactory) {
24  		super(variables, connectionFactory);
25  	}
26  
27  	@Override
28  	protected RepositoryConfigurationParser createSubParser(Properties variables) {
29  		Properties props = new Properties(getVariables());
30  		props.putAll(variables);
31  		CustomRepositoryConfigurationParser subParser = new CustomRepositoryConfigurationParser(props,
32  				connectionFactory);
33  		subParser.setAccessControlProviderClassLoader(accessControlProviderClassLoader);
34  		return subParser;
35  	}
36  
37  	@Override
38  	public WorkspaceSecurityConfig parseWorkspaceSecurityConfig(Element parent) throws ConfigurationException {
39  		WorkspaceSecurityConfig workspaceSecurityConfig = super.parseWorkspaceSecurityConfig(parent);
40  		workspaceSecurityConfig.getAccessControlProviderConfig().setClassLoader(accessControlProviderClassLoader);
41  		return workspaceSecurityConfig;
42  	}
43  
44  	public void setAccessControlProviderClassLoader(ClassLoader accessControlProviderClassLoader) {
45  		this.accessControlProviderClassLoader = accessControlProviderClassLoader;
46  	}
47  
48  }