/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.core.config;
import javax.jcr.RepositoryException;
import org.apache.jackrabbit.core.fs.FileSystem;
import org.apache.jackrabbit.core.fs.FileSystemFactory;
import org.apache.jackrabbit.core.query.QueryHandler;
import org.apache.jackrabbit.core.query.QueryHandlerContext;
import org.apache.jackrabbit.core.query.QueryHandlerFactory;
import org.apache.jackrabbit.core.state.ISMLocking;
import org.apache.jackrabbit.core.state.ISMLockingFactory;
/**
* Workspace configuration. This configuration class is used to create
* configured workspace objects.
* <p>
* The contained configuration information are: the home directory and name of
* the workspace, the file system, the persistence manager, the search index and
* the item state manager locking configuration. The search index and the item
* state manager locking and the security config are optional parts.
*/
public class WorkspaceConfig
implements FileSystemFactory, ISMLockingFactory, QueryHandlerFactory {
/**
* Workspace home directory.
*/
private final String home;
/**
* Workspace name.
*/
private final String name;
/**
* Flag indicating whether this workspace participates in a cluster.
*/
private final boolean clustered;
/**
* Workspace file system factory.
*/
private FileSystemFactory fsf;
/**
* Workspace persistence manager configuration.
*/
private PersistenceManagerConfig pmc;
/**
* Query handler factory, or <code>null</code> if search is not configured.
*/
private QueryHandlerFactory qhf;
/**
* The item state manager locking factory.
*/
private ISMLockingFactory ismLockingFactory;
/**
* Workspace security configuration. Can be <code>null</code>.
*/
private final WorkspaceSecurityConfig workspaceSecurityConfig;
/**
* Optional configuration for the xml import behavior. Up to now this consists
* of a single configuration point: the treatment
* of protected nodes and properties that is defined by a set of classes
* implementing {@link org.apache.jackrabbit.core.xml.ProtectedNodeImporter}
* or {@link org.apache.jackrabbit.core.xml.ProtectedPropertyImporter}.
*/
private final ImportConfig importConfig;
/**
* Default lock timeout in seconds.
*/
private final long defaultLockTimeout;
/**
* Creates a workspace configuration object.
*
* @param home home directory
* @param name workspace name
* @param clustered
* @param fsf file system factory
* @param pmc persistence manager configuration
* @param qhf query handler factory, or <code>null</code> if not configured
* @param ismLockingFactory the item state manager locking factory
* @param workspaceSecurityConfig the workspace specific security configuration.
*/
public WorkspaceConfig(String home, String name, boolean clustered,
FileSystemFactory fsf, PersistenceManagerConfig pmc,
QueryHandlerFactory qhf,
ISMLockingFactory ismLockingFactory,
WorkspaceSecurityConfig workspaceSecurityConfig) {
this(home, name, clustered, fsf, pmc, qhf, ismLockingFactory, workspaceSecurityConfig, null, Long.MAX_VALUE);
}
/**
* Creates a workspace configuration object.
*
* @param home home directory
* @param name workspace name
* @param clustered
* @param fsf file system factory
* @param pmc persistence manager configuration
* @param qhf query handler factory, or <code>null</code> if not configured
* @param ismLockingFactory the item state manager locking factory
* @param workspaceSecurityConfig the workspace specific security configuration.
*/
public WorkspaceConfig(String home, String name, boolean clustered,
FileSystemFactory fsf, PersistenceManagerConfig pmc,
QueryHandlerFactory qhf,
ISMLockingFactory ismLockingFactory,
WorkspaceSecurityConfig workspaceSecurityConfig,
ImportConfig importConfig) {
this(home, name, clustered, fsf, pmc, qhf, ismLockingFactory, workspaceSecurityConfig, importConfig, Long.MAX_VALUE);
}
/**
* Creates a workspace configuration object.
*
* @param home home directory
* @param name workspace name
* @param clustered
* @param fsf file system factory
* @param pmc persistence manager configuration
* @param qhf query handler factory, or <code>null</code> if not configured
* @param ismLockingFactory the item state manager locking factory
* @param workspaceSecurityConfig the workspace specific security configuration.
* @param defaultLockTimeout default timeout for locks (in seconds)
*/
public WorkspaceConfig(String home, String name, boolean clustered, FileSystemFactory fsf,
PersistenceManagerConfig pmc, QueryHandlerFactory qhf, ISMLockingFactory ismLockingFactory,
WorkspaceSecurityConfig workspaceSecurityConfig, ImportConfig importConfig, long defaultLockTimeout) {
this.home = home;
this.name = name;
this.clustered = clustered;
this.fsf = fsf;
this.pmc = pmc;
this.qhf = qhf;
this.ismLockingFactory = ismLockingFactory;
this.workspaceSecurityConfig = workspaceSecurityConfig;
this.importConfig = importConfig;
this.defaultLockTimeout = defaultLockTimeout;
}
/**
* Returns the workspace home directory.
*
* @return workspace home directory
*/
public String getHomeDir() {
return home;
}
/**
* Returns the workspace name.
*
* @return the workspace name
*/
public String getName() {
return name;
}
/**
* Returns a flag indicating whether this workspace participates in a cluster.
*
* @return <code>true</code> if this workspace participates in a cluster;
* <code>false</code> otherwise
*/
public boolean isClustered() {
return clustered;
}
/**
* Returns the default lock timeout in number of seconds or
* <code>Long.MAX_VALUE</code> when not specified.
*
* @return default lock timeout in number of seconds or
* <code>Long.MAX_VALUE</code> when not specified
*/
public long getDefaultLockTimeout() {
return defaultLockTimeout;
}
/**
* Creates and returns the configured workspace locking strategy.
*
* @return the configured {@link ISMLocking}
* @throws RepositoryException if the locking strategy can not be created
*/
public ISMLocking getISMLocking() throws RepositoryException {
return ismLockingFactory.getISMLocking();
}
/**
* Creates and returns the configured workspace file system.
*
* @return the configured {@link FileSystem}
* @throws RepositoryException if the file system can not be created
*/
public FileSystem getFileSystem() throws RepositoryException {
return fsf.getFileSystem();
}
/**
* Returns the workspace persistence manager configuration.
*
* @return persistence manager configuration
*/
public PersistenceManagerConfig getPersistenceManagerConfig() {
return pmc;
}
/**
* Checks whether search configuration is present.
*
* @return <code>true</code> if search is configured,
* <code>false</code> otherwise
*/
public boolean isSearchEnabled() {
return qhf != null;
}
/**
* Returns an initialized query handler, or <code>null</code> if one
* was not configured.
*
* @return initialized query handler, or <code>null</code>
*/
public QueryHandler getQueryHandler(QueryHandlerContext context)
throws RepositoryException {
if (qhf != null) {
return qhf.getQueryHandler(context);
} else {
return null;
}
}
/**
* @return workspace-specific security settings.
* @see WorkspaceSecurityConfig
*/
public WorkspaceSecurityConfig getSecurityConfig() {
return workspaceSecurityConfig;
}
/**
* @return xml import settings
*/
public ImportConfig getImportConfig() {
return importConfig;
}
}