blob: 37df8e7b718a220264d84462233e1cf571396bb6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. 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.extension.configuration;
import java.io.File;
import java.net.URL;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
/**
* The <code>PropertiesNodeConfiguration</code> extends the Apache Commons
* <code>PropertiesConfiguration</code> by support for loading the properties
* from a repository property in addition to the standard loading source such
* as file, URL, and streams.
*
* @author Felix Meschberger
*/
public class PropertiesNodeConfiguration extends PropertiesConfiguration
implements RepositoryConfiguration {
/**
* The delegate object which takes care for actually loading and saving
* configuration to and from the repository.
*/
private final ConfigurationIODelegate delegate =
new ConfigurationIODelegate(this);
/**
* Creates an empty <code>PropertiesNodeConfiguration</code> object which
* can be used to synthesize a new Properties file by adding values and then
* saving(). An object constructed by this constructor can not be tickled
* into loading included files because it cannot supply a base for relative
* includes.
*/
public PropertiesNodeConfiguration() {
super();
}
/**
* Creates and loads the extended properties from the specified file. The
* specified file can contain "include = " properties which then are loaded
* and merged into the properties.
*
* @param fileName The name of the properties file to load.
*
* @throws ConfigurationException Error while loading the properties file
*/
public PropertiesNodeConfiguration(String fileName)
throws ConfigurationException {
super(fileName);
}
/**
* Creates and loads the extended properties from the specified file. The
* specified file can contain "include = " properties which then are loaded
* and merged into the properties.
*
* @param file The properties file to load.
*
* @throws ConfigurationException Error while loading the properties file
*/
public PropertiesNodeConfiguration(File file) throws ConfigurationException {
super(file);
}
/**
* Creates and loads the extended properties from the specified URL. The
* specified file can contain "include = " properties which then are loaded
* and merged into the properties.
*
* @param url The location of the properties file to load.
*
* @throws ConfigurationException Error while loading the properties file
*/
public PropertiesNodeConfiguration(URL url) throws ConfigurationException {
super(url);
}
/**
* Creates and loads the extended properties from the specified
* <code>node</code>. An object constructed by this constructor can not be
* tickled into loading included files because it cannot supply a base for
* relative includes.
*
* @param node The <code>Node</code> from which to load the configuration.
*
* @throws ConfigurationException Error while loading the properties file
*
*/
public PropertiesNodeConfiguration(javax.jcr.Node node)
throws ConfigurationException {
super();
setIncludesAllowed(false);
setNode(node);
load();
}
/**
* Returns the <code>Node</code> on which this configuration is based. If
* this is not a repository-based configuration object or has not been
* configured to load from the repository, this method returns
* <code>null</code>.
*/
public javax.jcr.Node getNode() {
return delegate.getNode();
}
/**
* Sets the <code>Node</code> on which this configuration is based.
*/
public void setNode(javax.jcr.Node node) {
delegate.setNode(node);
}
/**
* Loads the configuration from the underlying location.
*
* @throws ConfigurationException if loading of the configuration fails
*/
public void load() throws ConfigurationException {
delegate.load();
}
/**
* Loads the configuration from the <code>node</code>. The property to
* use is found following the the node's primary item trail: While the
* primary item is a node, the node's primary item is accessed. If it is a
* property which is not a reference, the property is returned. If the
* property is a reference, the reference is resolved and this step is
* repeated.
* <p>
* If no property can be found using above mentioned algorithm, loading the
* configuration fails.
*
* @param node The <code>Node</code> of the repository based configuration
* to load from.
* @throws ConfigurationException if an error occurs during the load
* operation or if no property can be found containing the
* properties "file".
*/
public void load(javax.jcr.Node node) throws ConfigurationException {
delegate.load(node);
}
/**
* Saves the configuration to the underlying location.
*
* @throws ConfigurationException if saving of the configuration fails
*/
public void save() throws ConfigurationException {
delegate.save();
}
/**
* Saves the configuration in the <code>node</code>. The same algorithm
* applies for finding the property to store the configuration in as is
* applied by the {@link #load(javax.jcr.Node)} method. If no property can
* be found, the configuration cannot be saved.
*
* @param node The <code>Node</code> of the repository based configuration
* to save the configuration in.
*
* @throws ConfigurationException if an error occurs during the save
* operation.
*/
public void save(javax.jcr.Node node) throws ConfigurationException {
delegate.save(node);
}
}