org.apache.commons.configuration
Class DefaultConfigurationBuilder

java.lang.Object
  extended by org.apache.commons.configuration.event.EventSource
      extended by org.apache.commons.configuration.AbstractConfiguration
          extended by org.apache.commons.configuration.HierarchicalConfiguration
              extended by org.apache.commons.configuration.AbstractHierarchicalFileConfiguration
                  extended by org.apache.commons.configuration.XMLConfiguration
                      extended by org.apache.commons.configuration.DefaultConfigurationBuilder
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Configuration, ConfigurationBuilder, ConfigurationListener, FileConfiguration, org.xml.sax.EntityResolver

public class DefaultConfigurationBuilder
extends XMLConfiguration
implements ConfigurationBuilder

A factory class that creates a composite configuration from an XML based configuration definition file.

This class provides an easy and flexible means for loading multiple configuration sources and combining the results into a single configuration object. The sources to be loaded are defined in an XML document that can contain certain tags representing the different supported configuration classes. If such a tag is found, the corresponding Configuration class is instantiated and initialized using the classes of the beanutils package (namely XMLBeanDeclaration will be used to extract the configuration's initialization parameters, which allows for complex initialization scenarios).

It is also possible to add custom tags to the configuration definition file. For this purpose register your own ConfigurationProvider implementation for your tag using the addConfigurationProvider() method. This provider will then be called when the corresponding custom tag is detected. For the default configuration classes providers are already registered.

The configuration definition file has the following basic structure:

 <configuration systemProperties="properties file name">
   <header>
     <!-- Optional meta information about the composite configuration -->
   </header>
   <override>
     <!-- Declarations for override configurations -->
   </override>
   <additional>
     <!-- Declarations for union configurations -->
   </additional>
 </configuration>
 

The name of the root element (here configuration) is arbitrary. The optional systemProperties attribute identifies the path to a property file containing properties that should be added to the system properties. If specified on the root element, the system properties are set before the rest of the configuration is processed.

There are two sections (both of them are optional) for declaring override and additional configurations. Configurations in the former section are evaluated in the order of their declaration, and properties of configurations declared earlier hide those of configurations declared later. Configurations in the latter section are combined to a union configuration, i.e. all of their properties are added to a large hierarchical configuration. Configuration declarations that occur as direct children of the root element are treated as override declarations.

Each configuration declaration consists of a tag whose name is associated with a ConfigurationProvider. This can be one of the predefined tags like properties, or xml, or a custom tag, for which a configuration provider was registered. Attributes and sub elements with specific initialization parameters can be added. There are some reserved attributes with a special meaning that can be used in every configuration declaration:

Attribute Meaning
config-name Allows to specify a name for this configuration. This name can be used to obtain a reference to the configuration from the resulting combined configuration (see below).
config-at With this attribute an optional prefix can be specified for the properties of the corresponding configuration.
config-optional Declares a configuration as optional. This means that errors that occur when creating the configuration are ignored. (However ConfigurationErrorListeners registered at the builder instance will get notified about this error: they receive an event of type EVENT_ERR_LOAD_OPTIONAL. The key property of this event contains the name of the optional configuration source that caused this problem.)

The optional header section can contain some meta data about the created configuration itself. For instance, it is possible to set further properties of the NodeCombiner objects used for constructing the resulting configuration.

The default configuration object returned by this builder is an instance of the CombinedConfiguration class. The return value of the getConfiguration() method can be casted to this type, and the getConfiguration(boolean) method directly declares CombinedConfiguration as return type. This allows for convenient access to the configuration objects maintained by the combined configuration (e.g. for updates of single configuration objects). It has also the advantage that the properties stored in all declared configuration objects are collected and transformed into a single hierarchical structure, which can be accessed using different expression engines. The actual CombinedConfiguration implementation can be overridden by specifying the class in the config-class attribute of the result element.

Additional ConfigurationProviders can be added by configuring them in the header section.

 <providers>
   <provider config-tag="tag name" config-class="provider fully qualified class name"/>
 </providers>
 

Additional variable resolvers can be added by configuring them in the header section.

 <lookups>
   <lookup config-prefix="prefix" config-class="StrLookup fully qualified class name"/>
 </lookups>
 

All declared override configurations are directly added to the resulting combined configuration. If they are given names (using the config-name attribute), they can directly be accessed using the getConfiguration(String) method of CombinedConfiguration. The additional configurations are altogether added to another combined configuration, which uses a union combiner. Then this union configuration is added to the resulting combined configuration under the name defined by the ADDITIONAL_NAME constant.

Implementation note: This class is not thread-safe. Especially the getConfiguration() methods should be called by a single thread only.

Since:
1.3
Version:
$Id: DefaultConfigurationBuilder.java 727834 2008-12-18 22:16:32Z rgoers $
Author:
Commons Configuration team
See Also:
Serialized Form

Nested Class Summary
(package private) static class DefaultConfigurationBuilder.ConfigurationBeanFactory
          A specialized BeanFactory implementation that handles configuration declarations.
(package private) static class DefaultConfigurationBuilder.ConfigurationBuilderProvider
          A specialized configuration provider class that allows to include other configuration definition files.
static class DefaultConfigurationBuilder.ConfigurationDeclaration
           A specialized BeanDeclaration implementation that represents the declaration of a configuration source.
static class DefaultConfigurationBuilder.ConfigurationProvider
           A base class for creating and initializing configuration sources.
static class DefaultConfigurationBuilder.FileConfigurationProvider
          A specialized provider implementation that deals with file based configurations.
(package private) static class DefaultConfigurationBuilder.FileExtensionConfigurationProvider
          A specialized configuration provider for file based configurations that can handle configuration sources whose concrete type depends on the extension of the file to be loaded.
static class DefaultConfigurationBuilder.XMLConfigurationProvider
          A specialized configuration provider for XML configurations.
 
Nested classes/interfaces inherited from class org.apache.commons.configuration.XMLConfiguration
XMLConfiguration.XMLBuilderVisitor, XMLConfiguration.XMLNode
 
Nested classes/interfaces inherited from class org.apache.commons.configuration.AbstractHierarchicalFileConfiguration
AbstractHierarchicalFileConfiguration.FileConfigurationDelegate
 
Nested classes/interfaces inherited from class org.apache.commons.configuration.HierarchicalConfiguration
HierarchicalConfiguration.BuilderVisitor, HierarchicalConfiguration.CloneVisitor, HierarchicalConfiguration.DefinedKeysVisitor, HierarchicalConfiguration.DefinedVisitor, HierarchicalConfiguration.Node, HierarchicalConfiguration.NodeVisitor
 
Field Summary
static java.lang.String ADDITIONAL_NAME
          Constant for the name of the additional configuration.
(package private) static java.lang.String ATTR_AT
          Constant for the at attribute without the reserved prefix.
(package private) static java.lang.String ATTR_AT_RES
          Constant for the reserved at attribute.
(package private) static java.lang.String ATTR_ATNAME
          Constant for the name of the at attribute.
(package private) static java.lang.String ATTR_FILENAME
          Constant for the file name attribute.
(package private) static java.lang.String ATTR_FORCECREATE
          Constant for the forceCreate attribute.
(package private) static java.lang.String ATTR_NAME
          Constant for the reserved name attribute.
(package private) static java.lang.String ATTR_OPTIONAL
          Constant for the optional attribute without the reserved prefix.
(package private) static java.lang.String ATTR_OPTIONAL_RES
          Constant for the reserved optional attribute.
(package private) static java.lang.String ATTR_OPTIONALNAME
          Constant for the name of the optional attribute.
private static DefaultConfigurationBuilder.ConfigurationProvider BUILDER_PROVIDER
          Constant for the provider for configuration definition files.
(package private) static java.lang.String CONFIG_BEAN_FACTORY_NAME
          Constant for the name of the configuration bean factory.
(package private) static java.lang.String[] CONFIG_SECTIONS
          An array with the names of top level configuration sections.
private  java.lang.String configurationBasePath
          Stores the base path to the configuration sources to load.
private  CombinedConfiguration constructedConfiguration
          Stores the configuration that is currently constructed.
private static DefaultConfigurationBuilder.ConfigurationProvider[] DEFAULT_PROVIDERS
          An array with the providers for the default tags.
private static java.lang.String[] DEFAULT_TAGS
          An array with the names of the default tags.
static int EVENT_ERR_LOAD_OPTIONAL
          Constant for the type of error events caused by optional configurations that cannot be loaded.
(package private) static java.lang.String EXT_XML
          Constant for the XML file extension.
private static DefaultConfigurationBuilder.ConfigurationProvider JNDI_PROVIDER
          Constant for the provider for JNDI sources.
(package private) static java.lang.String KEY_ADDITIONAL_LIST
          Constant for the key that points to the list nodes definition of the additional combiner.
(package private) static java.lang.String KEY_COMBINER
          Constant for the key of the combiner in the result declaration.
(package private) static java.lang.String KEY_CONFIGURATION_LOOKUPS
          Constant for the key for defining variable resolvers
(package private) static java.lang.String KEY_CONFIGURATION_PROVIDERS
          Constant for the key for defining providers in the configuration file.
(package private) static java.lang.String KEY_LOOKUP_KEY
          Constant for the prefix attribute for lookups.
(package private) static java.lang.String KEY_OVERRIDE
          Constant for an expression that selects override configurations in the override section.
(package private) static java.lang.String KEY_OVERRIDE_LIST
          Constant for the key that points to the list nodes definition of the override combiner.
(package private) static java.lang.String KEY_PROVIDER_KEY
          Constant for the tag attribute for providers.
(package private) static java.lang.String KEY_RESULT
          Constant for the key of the result declaration.
(package private) static java.lang.String KEY_SYSTEM_PROPS
          Constant for the tag attribute for providers.
(package private) static java.lang.String KEY_UNION
          Constant for an expression that selects the union configurations.
private static DefaultConfigurationBuilder.ConfigurationProvider PLIST_PROVIDER
          Constant for the provider for plist files.
private static DefaultConfigurationBuilder.ConfigurationProvider PROPERTIES_PROVIDER
          Constant for the provider for properties files.
private  java.util.Map providers
          Stores a map with the registered configuration providers.
(package private) static java.lang.String SEC_HEADER
          Constant for the name of the header section.
private static long serialVersionUID
          The serial version UID.
private static DefaultConfigurationBuilder.ConfigurationProvider SYSTEM_PROVIDER
          Constant for the provider for system properties.
private static DefaultConfigurationBuilder.ConfigurationProvider XML_PROVIDER
          Constant for the provider for XML files.
 
Fields inherited from class org.apache.commons.configuration.HierarchicalConfiguration
EVENT_ADD_NODES, EVENT_CLEAR_TREE, EVENT_SUBNODE_CHANGED
 
Fields inherited from class org.apache.commons.configuration.AbstractConfiguration
END_TOKEN, EVENT_ADD_PROPERTY, EVENT_CLEAR, EVENT_CLEAR_PROPERTY, EVENT_READ_PROPERTY, EVENT_SET_PROPERTY, START_TOKEN
 
Constructor Summary
DefaultConfigurationBuilder()
          Creates a new instance of DefaultConfigurationBuilder.
DefaultConfigurationBuilder(java.io.File file)
          Creates a new instance of DefaultConfigurationBuilder and sets the specified configuration definition file.
DefaultConfigurationBuilder(java.lang.String fileName)
          Creates a new instance of DefaultConfigurationBuilder and sets the specified configuration definition file.
DefaultConfigurationBuilder(java.net.URL url)
          Creates a new instance of DefaultConfigurationBuilder and sets the specified configuration definition file.
 
Method Summary
 void addConfigurationProvider(java.lang.String tagName, DefaultConfigurationBuilder.ConfigurationProvider provider)
          Adds a configuration provider for the specified tag.
private  AbstractConfiguration createConfigurationAt(DefaultConfigurationBuilder.ConfigurationDeclaration decl)
          Creates a configuration object from the specified configuration declaration.
protected  CombinedConfiguration createResultConfiguration()
          Creates the resulting combined configuration.
private  java.util.List fetchChildConfigs(ConfigurationNode node)
          Returns a list with SubnodeConfiguration objects for the child nodes of the specified configuration node.
private  java.util.List fetchChildConfigs(java.lang.String key)
          Returns a list with SubnodeConfiguration objects for the child nodes of the node specified by the given key.
private  java.util.List fetchTopLevelOverrideConfigs()
          Finds the override configurations that are defined as top level elements in the configuration definition file.
protected  void fireError(int type, java.lang.String propName, java.lang.Object propValue, java.lang.Throwable ex)
          Creates an error event object and delivers it to all registered error listeners.
 Configuration getConfiguration()
          Returns the configuration provided by this builder.
 CombinedConfiguration getConfiguration(boolean load)
          Returns the configuration provided by this builder.
 java.lang.String getConfigurationBasePath()
          Returns the base path for the configuration sources to load.
protected  void initCombinedConfiguration(CombinedConfiguration config, java.util.List containedConfigs, java.lang.String keyListNodes)
          Initializes a combined configuration for the configurations of a specific section.
protected  void initSystemProperties()
          If a property file is configured add the properties to the System properties.
protected  java.lang.Object interpolate(java.lang.Object value)
          Performs interpolation.
 DefaultConfigurationBuilder.ConfigurationProvider providerForTag(java.lang.String tagName)
          Returns the configuration provider for the given tag.
private  void registerBeanFactory()
          Registers the bean factory used by this class if necessary.
protected  void registerConfiguredLookups()
          Registers StrLookups defined in the configuration.
protected  void registerConfiguredProviders()
          Registers providers defined in the configuration.
protected  void registerDefaultProviders()
          Registers the default configuration providers supported by this class.
 DefaultConfigurationBuilder.ConfigurationProvider removeConfigurationProvider(java.lang.String tagName)
          Removes the configuration provider for the specified tag name.
 void setConfigurationBasePath(java.lang.String configurationBasePath)
          Sets the base path for the configuration sources to load.
 
Methods inherited from class org.apache.commons.configuration.XMLConfiguration
addNodes, clear, clone, createDelegate, createDocument, createDocumentBuilder, createNode, createTransformer, getDocument, getDocumentBuilder, getPublicID, getRegisteredEntities, getRootElementName, getSystemID, initProperties, isAttributeSplittingDisabled, isValidating, load, load, registerEntityId, resolveEntity, save, setAttributeSplittingDisabled, setDocumentBuilder, setPublicID, setRootElementName, setSystemID, setValidating
 
Methods inherited from class org.apache.commons.configuration.AbstractHierarchicalFileConfiguration
addPropertyDirect, clearProperty, clearTree, configurationChanged, containsKey, fetchNodeList, getBasePath, getDelegate, getEncoding, getFile, getFileName, getKeys, getKeys, getProperty, getReloadingStrategy, getURL, isAutoSave, isEmpty, load, load, load, load, load, reload, save, save, save, save, save, save, setAutoSave, setBasePath, setDelegate, setEncoding, setFile, setFileName, setProperty, setReloadingStrategy, setURL, subnodeConfigurationChanged
 
Methods inherited from class org.apache.commons.configuration.HierarchicalConfiguration
clearNode, clearNode, clearReferences, configurationAt, configurationAt, configurationsAt, createAddPath, createSubnodeConfiguration, createSubnodeConfiguration, fetchAddNode, findLastPathNode, findPropertyNodes, getDefaultExpressionEngine, getExpressionEngine, getMaxIndex, getRoot, getRootNode, interpolatedConfiguration, nodeDefined, nodeDefined, registerSubnodeConfiguration, removeNode, removeNode, setDefaultExpressionEngine, setExpressionEngine, setRoot, setRootNode, subset
 
Methods inherited from class org.apache.commons.configuration.AbstractConfiguration
addErrorLogListener, addProperty, append, clearPropertyDirect, copy, createInterpolator, getBigDecimal, getBigDecimal, getBigInteger, getBigInteger, getBoolean, getBoolean, getBoolean, getByte, getByte, getByte, getDefaultListDelimiter, getDelimiter, getDouble, getDouble, getDouble, getFloat, getFloat, getFloat, getInt, getInt, getInteger, getInterpolator, getList, getList, getListDelimiter, getLogger, getLong, getLong, getLong, getProperties, getProperties, getShort, getShort, getShort, getString, getString, getStringArray, getSubstitutor, interpolate, interpolateHelper, isDelimiterParsingDisabled, isThrowExceptionOnMissing, resolveContainerStore, setDefaultListDelimiter, setDelimiter, setDelimiterParsingDisabled, setListDelimiter, setLogger, setThrowExceptionOnMissing
 
Methods inherited from class org.apache.commons.configuration.event.EventSource
addConfigurationListener, addErrorListener, clearConfigurationListeners, clearErrorListeners, createErrorEvent, createEvent, fireEvent, getConfigurationListeners, getErrorListeners, isDetailEvents, removeConfigurationListener, removeErrorListener, setDetailEvents
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.commons.configuration.Configuration
addProperty, getBigDecimal, getBigDecimal, getBigInteger, getBigInteger, getBoolean, getBoolean, getBoolean, getByte, getByte, getByte, getDouble, getDouble, getDouble, getFloat, getFloat, getFloat, getInt, getInt, getInteger, getList, getList, getLong, getLong, getLong, getProperties, getShort, getShort, getShort, getString, getString, getStringArray, subset
 

Field Detail

ADDITIONAL_NAME

public static final java.lang.String ADDITIONAL_NAME
Constant for the name of the additional configuration. If the configuration definition file contains an additional section, a special union configuration is created and added under this name to the resulting combined configuration.


EVENT_ERR_LOAD_OPTIONAL

public static final int EVENT_ERR_LOAD_OPTIONAL
Constant for the type of error events caused by optional configurations that cannot be loaded.

See Also:
Constant Field Values

CONFIG_BEAN_FACTORY_NAME

static final java.lang.String CONFIG_BEAN_FACTORY_NAME
Constant for the name of the configuration bean factory.


ATTR_NAME

static final java.lang.String ATTR_NAME
Constant for the reserved name attribute.

See Also:
Constant Field Values

ATTR_ATNAME

static final java.lang.String ATTR_ATNAME
Constant for the name of the at attribute.

See Also:
Constant Field Values

ATTR_AT_RES

static final java.lang.String ATTR_AT_RES
Constant for the reserved at attribute.

See Also:
Constant Field Values

ATTR_AT

static final java.lang.String ATTR_AT
Constant for the at attribute without the reserved prefix.

See Also:
Constant Field Values

ATTR_OPTIONALNAME

static final java.lang.String ATTR_OPTIONALNAME
Constant for the name of the optional attribute.

See Also:
Constant Field Values

ATTR_OPTIONAL_RES

static final java.lang.String ATTR_OPTIONAL_RES
Constant for the reserved optional attribute.

See Also:
Constant Field Values

ATTR_OPTIONAL

static final java.lang.String ATTR_OPTIONAL
Constant for the optional attribute without the reserved prefix.

See Also:
Constant Field Values

ATTR_FILENAME

static final java.lang.String ATTR_FILENAME
Constant for the file name attribute.

See Also:
Constant Field Values

ATTR_FORCECREATE

static final java.lang.String ATTR_FORCECREATE
Constant for the forceCreate attribute.

See Also:
Constant Field Values

KEY_SYSTEM_PROPS

static final java.lang.String KEY_SYSTEM_PROPS
Constant for the tag attribute for providers.

See Also:
Constant Field Values

SEC_HEADER

static final java.lang.String SEC_HEADER
Constant for the name of the header section.

See Also:
Constant Field Values

KEY_UNION

static final java.lang.String KEY_UNION
Constant for an expression that selects the union configurations.

See Also:
Constant Field Values

CONFIG_SECTIONS

static final java.lang.String[] CONFIG_SECTIONS
An array with the names of top level configuration sections.


KEY_OVERRIDE

static final java.lang.String KEY_OVERRIDE
Constant for an expression that selects override configurations in the override section.

See Also:
Constant Field Values

KEY_OVERRIDE_LIST

static final java.lang.String KEY_OVERRIDE_LIST
Constant for the key that points to the list nodes definition of the override combiner.

See Also:
Constant Field Values

KEY_ADDITIONAL_LIST

static final java.lang.String KEY_ADDITIONAL_LIST
Constant for the key that points to the list nodes definition of the additional combiner.

See Also:
Constant Field Values

KEY_CONFIGURATION_PROVIDERS

static final java.lang.String KEY_CONFIGURATION_PROVIDERS
Constant for the key for defining providers in the configuration file.

See Also:
Constant Field Values

KEY_PROVIDER_KEY

static final java.lang.String KEY_PROVIDER_KEY
Constant for the tag attribute for providers.

See Also:
Constant Field Values

KEY_CONFIGURATION_LOOKUPS

static final java.lang.String KEY_CONFIGURATION_LOOKUPS
Constant for the key for defining variable resolvers

See Also:
Constant Field Values

KEY_LOOKUP_KEY

static final java.lang.String KEY_LOOKUP_KEY
Constant for the prefix attribute for lookups.

See Also:
Constant Field Values

KEY_RESULT

static final java.lang.String KEY_RESULT
Constant for the key of the result declaration. This key can point to a bean declaration, which defines properties of the resulting combined configuration.

See Also:
Constant Field Values

KEY_COMBINER

static final java.lang.String KEY_COMBINER
Constant for the key of the combiner in the result declaration.

See Also:
Constant Field Values

EXT_XML

static final java.lang.String EXT_XML
Constant for the XML file extension.

See Also:
Constant Field Values

PROPERTIES_PROVIDER

private static final DefaultConfigurationBuilder.ConfigurationProvider PROPERTIES_PROVIDER
Constant for the provider for properties files.


XML_PROVIDER

private static final DefaultConfigurationBuilder.ConfigurationProvider XML_PROVIDER
Constant for the provider for XML files.


JNDI_PROVIDER

private static final DefaultConfigurationBuilder.ConfigurationProvider JNDI_PROVIDER
Constant for the provider for JNDI sources.


SYSTEM_PROVIDER

private static final DefaultConfigurationBuilder.ConfigurationProvider SYSTEM_PROVIDER
Constant for the provider for system properties.


PLIST_PROVIDER

private static final DefaultConfigurationBuilder.ConfigurationProvider PLIST_PROVIDER
Constant for the provider for plist files.


BUILDER_PROVIDER

private static final DefaultConfigurationBuilder.ConfigurationProvider BUILDER_PROVIDER
Constant for the provider for configuration definition files.


DEFAULT_TAGS

private static final java.lang.String[] DEFAULT_TAGS
An array with the names of the default tags.


DEFAULT_PROVIDERS

private static final DefaultConfigurationBuilder.ConfigurationProvider[] DEFAULT_PROVIDERS
An array with the providers for the default tags.


serialVersionUID

private static final long serialVersionUID
The serial version UID.

See Also:
Constant Field Values

constructedConfiguration

private CombinedConfiguration constructedConfiguration
Stores the configuration that is currently constructed.


providers

private java.util.Map providers
Stores a map with the registered configuration providers.


configurationBasePath

private java.lang.String configurationBasePath
Stores the base path to the configuration sources to load.

Constructor Detail

DefaultConfigurationBuilder

public DefaultConfigurationBuilder()
Creates a new instance of DefaultConfigurationBuilder. A configuration definition file is not yet loaded. Use the diverse setter methods provided by file based configurations to specify the configuration definition file.


DefaultConfigurationBuilder

public DefaultConfigurationBuilder(java.io.File file)
Creates a new instance of DefaultConfigurationBuilder and sets the specified configuration definition file.

Parameters:
file - the configuration definition file

DefaultConfigurationBuilder

public DefaultConfigurationBuilder(java.lang.String fileName)
                            throws ConfigurationException
Creates a new instance of DefaultConfigurationBuilder and sets the specified configuration definition file.

Parameters:
fileName - the name of the configuration definition file
Throws:
ConfigurationException - if an error occurs when the file is loaded

DefaultConfigurationBuilder

public DefaultConfigurationBuilder(java.net.URL url)
                            throws ConfigurationException
Creates a new instance of DefaultConfigurationBuilder and sets the specified configuration definition file.

Parameters:
url - the URL to the configuration definition file
Throws:
ConfigurationException - if an error occurs when the file is loaded
Method Detail

getConfigurationBasePath

public java.lang.String getConfigurationBasePath()
Returns the base path for the configuration sources to load. This path is used to resolve relative paths in the configuration definition file.

Returns:
the base path for configuration sources

setConfigurationBasePath

public void setConfigurationBasePath(java.lang.String configurationBasePath)
Sets the base path for the configuration sources to load. Normally a base path need not to be set because it is determined by the location of the configuration definition file to load. All relative paths in this file are resolved relative to this file. Setting a base path makes sense if such relative paths should be otherwise resolved, e.g. if the configuration file is loaded from the class path and all sub configurations it refers to are stored in a special config directory.

Parameters:
configurationBasePath - the new base path to set

addConfigurationProvider

public void addConfigurationProvider(java.lang.String tagName,
                                     DefaultConfigurationBuilder.ConfigurationProvider provider)
Adds a configuration provider for the specified tag. Whenever this tag is encountered in the configuration definition file this provider will be called to create the configuration object.

Parameters:
tagName - the name of the tag in the configuration definition file
provider - the provider for this tag

removeConfigurationProvider

public DefaultConfigurationBuilder.ConfigurationProvider removeConfigurationProvider(java.lang.String tagName)
Removes the configuration provider for the specified tag name.

Parameters:
tagName - the tag name
Returns:
the removed configuration provider or null if none was registered for that tag

providerForTag

public DefaultConfigurationBuilder.ConfigurationProvider providerForTag(java.lang.String tagName)
Returns the configuration provider for the given tag.

Parameters:
tagName - the name of the tag
Returns:
the provider that was registered for this tag or null if there is none

getConfiguration

public Configuration getConfiguration()
                               throws ConfigurationException
Returns the configuration provided by this builder. Loads and parses the configuration definition file and creates instances for the declared configurations.

Specified by:
getConfiguration in interface ConfigurationBuilder
Returns:
the configuration
Throws:
ConfigurationException - if an error occurs

getConfiguration

public CombinedConfiguration getConfiguration(boolean load)
                                       throws ConfigurationException
Returns the configuration provided by this builder. If the boolean parameter is true, the configuration definition file will be loaded. It will then be parsed, and instances for the declared configurations will be created.

Parameters:
load - a flag whether the configuration definition file should be loaded; a value of false would make sense if the file has already been created or its content was manipulated using some of the property accessor methods
Returns:
the configuration
Throws:
ConfigurationException - if an error occurs

createResultConfiguration

protected CombinedConfiguration createResultConfiguration()
                                                   throws ConfigurationException
Creates the resulting combined configuration. This method is called by getConfiguration(). It checks whether the header section of the configuration definition file contains a result element. If this is the case, it will be used to initialize the properties of the newly created configuration object.

Returns:
the resulting configuration object
Throws:
ConfigurationException - if an error occurs

initCombinedConfiguration

protected void initCombinedConfiguration(CombinedConfiguration config,
                                         java.util.List containedConfigs,
                                         java.lang.String keyListNodes)
                                  throws ConfigurationException
Initializes a combined configuration for the configurations of a specific section. This method is called for the override and for the additional section (if it exists).

Parameters:
config - the configuration to be initialized
containedConfigs - the list with the declaratinos of the contained configurations
keyListNodes - a list with the declaration of list nodes
Throws:
ConfigurationException - if an error occurs

registerDefaultProviders

protected void registerDefaultProviders()
Registers the default configuration providers supported by this class. This method will be called during initialization. It registers configuration providers for the tags that are supported by default.


registerConfiguredProviders

protected void registerConfiguredProviders()
                                    throws ConfigurationException
Registers providers defined in the configuration.

Throws:
ConfigurationException - if an error occurs

registerConfiguredLookups

protected void registerConfiguredLookups()
                                  throws ConfigurationException
Registers StrLookups defined in the configuration.

Throws:
ConfigurationException - if an error occurs

initSystemProperties

protected void initSystemProperties()
                             throws ConfigurationException
If a property file is configured add the properties to the System properties.

Throws:
ConfigurationException - if an error occurs.

interpolate

protected java.lang.Object interpolate(java.lang.Object value)
Performs interpolation. This method will not only take this configuration instance into account (which is the one that loaded the configuration definition file), but also the so far constructed combined configuration. So variables can be used that point to properties that are defined in configuration sources loaded by this builder.

Overrides:
interpolate in class AbstractConfiguration
Parameters:
value - the value to be interpolated
Returns:
the interpolated value

fireError

protected void fireError(int type,
                         java.lang.String propName,
                         java.lang.Object propValue,
                         java.lang.Throwable ex)
Description copied from class: EventSource
Creates an error event object and delivers it to all registered error listeners.

Overrides:
fireError in class EventSource
Parameters:
type - the event's type
propName - the name of the affected property (can be null)
propValue - the value of the affected property (can be null)
ex - the Throwable object that caused this error event

createConfigurationAt

private AbstractConfiguration createConfigurationAt(DefaultConfigurationBuilder.ConfigurationDeclaration decl)
                                             throws ConfigurationException
Creates a configuration object from the specified configuration declaration.

Parameters:
decl - the configuration declaration
Returns:
the new configuration object
Throws:
ConfigurationException - if an error occurs

fetchChildConfigs

private java.util.List fetchChildConfigs(ConfigurationNode node)
Returns a list with SubnodeConfiguration objects for the child nodes of the specified configuration node.

Parameters:
node - the start node
Returns:
a list with subnode configurations for the node's children

fetchChildConfigs

private java.util.List fetchChildConfigs(java.lang.String key)
Returns a list with SubnodeConfiguration objects for the child nodes of the node specified by the given key.

Parameters:
key - the key (must define exactly one node)
Returns:
a list with subnode configurations for the node's children

fetchTopLevelOverrideConfigs

private java.util.List fetchTopLevelOverrideConfigs()
Finds the override configurations that are defined as top level elements in the configuration definition file. This method will fetch the child elements of the root node and remove the nodes that represent other configuration sections. The remaining nodes are treated as definitions for override configurations.

Returns:
a list with subnode configurations for the top level override configurations

registerBeanFactory

private void registerBeanFactory()
Registers the bean factory used by this class if necessary. This method is called by the constructor to ensure that the required bean factory is available.