Package org.apache.commons.configuration2

# Class PatternSubtreeConfigurationWrapper

java.lang.Object
org.apache.commons.configuration2.event.BaseEventSource
org.apache.commons.configuration2.AbstractConfiguration
org.apache.commons.configuration2.AbstractHierarchicalConfiguration<ImmutableNode>
org.apache.commons.configuration2.BaseHierarchicalConfiguration
org.apache.commons.configuration2.PatternSubtreeConfigurationWrapper

All Implemented Interfaces:
  `Cloneable`, `Configuration`, `EventSource`, `FileBasedConfiguration`, `HierarchicalConfiguration<ImmutableNode>`, `ImmutableConfiguration`, `ImmutableHierarchicalConfiguration`, `FileBased`, `SynchronizerSupport`, `InMemoryNodeModelSupport`, `NodeKeyResolver<ImmutableNode>`, `NodeModelSupport<ImmutableNode>`

public class PatternSubtreeConfigurationWrapper extends BaseHierarchicalConfiguration implements FileBasedConfiguration
Wraps a BaseHierarchicalConfiguration and allows subtrees to be accessed via a configured path with replaceable tokens derived from the ConfigurationInterpolator. When used with injection frameworks such as Spring it allows components to be injected with subtrees of the configuration.

Since:
  1.6

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class org.apache.commons.configuration2.BaseHierarchicalConfiguration

  `BaseHierarchicalConfiguration.BuilderVisitor`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PatternSubtreeConfigurationWrapper(HierarchicalConfiguration<ImmutableNode> config, String path)`
  Constructor

- ## Method Summary

  Modifier and Type
  Method
  Description
  `<T extends Event>
  void`
  `addEventListener(EventType<T> eventType, EventListener<? super T> listener)`
  Adds an event listener for the specified event type.
  `protected void`
  `addNodesInternal(String key, Collection<? extends ImmutableNode> nodes)`
  Actually adds a collection of new nodes to this configuration.
  `protected void`
  `addPropertyInternal(String key, Object value)`
  Adds the property with the specified key.
  `void`
  `clearErrorListeners()`
  Removes all registered error listeners.
  `void`
  `clearEventListeners()`
  Removes all registered event listeners.
  `protected void`
  `clearInternal()`
  Clears this configuration.
  `protected void`
  `clearPropertyDirect(String key)`
  Removes the property with the given key.
  `protected Object`
  `clearTreeInternal(String key)`
  Actually clears the tree of elements referenced by the given key.
  `HierarchicalConfiguration<ImmutableNode>`
  `configurationAt(String key)`
  Returns a hierarchical subnode configuration for the node specified by the given key.
  `HierarchicalConfiguration<ImmutableNode>`
  `configurationAt(String key, boolean supportUpdates)`
  Returns a hierarchical sub configuration object that wraps the configuration node specified by the given key.
  `List<HierarchicalConfiguration<ImmutableNode>>`
  `configurationsAt(String key)`
  Returns a list of sub configurations for all configuration nodes selected by the given key.
  `protected boolean`
  `containsKeyInternal(String key)`
  Checks if the specified key is contained in this configuration.
  `BigDecimal`
  `getBigDecimal(String key)`
  Gets a `BigDecimal` associated with the given configuration key.
  `BigDecimal`
  `getBigDecimal(String key, BigDecimal defaultValue)`
  Gets a `BigDecimal` associated with the given configuration key.
  `BigInteger`
  `getBigInteger(String key)`
  Gets a `BigInteger` associated with the given configuration key.
  `BigInteger`
  `getBigInteger(String key, BigInteger defaultValue)`
  Gets a `BigInteger` associated with the given configuration key.
  `boolean`
  `getBoolean(String key)`
  Gets a boolean associated with the given configuration key.
  `boolean`
  `getBoolean(String key, boolean defaultValue)`
  Gets a boolean associated with the given configuration key.
  `Boolean`
  `getBoolean(String key, Boolean defaultValue)`
  Obtains the value of the specified key and tries to convert it into a `Boolean` object.
  `byte`
  `getByte(String key)`
  Gets a byte associated with the given configuration key.
  `byte`
  `getByte(String key, byte defaultValue)`
  Gets a byte associated with the given configuration key.
  `Byte`
  `getByte(String key, Byte defaultValue)`
  Gets a `Byte` associated with the given configuration key.
  `double`
  `getDouble(String key)`
  Gets a double associated with the given configuration key.
  `double`
  `getDouble(String key, double defaultValue)`
  Gets a double associated with the given configuration key.
  `Double`
  `getDouble(String key, Double defaultValue)`
  Gets a `Double` associated with the given configuration key.
  `<T extends Event>
  Collection<EventListener<? super T>>`
  `getEventListeners(EventType<T> eventType)`
  Gets a collection with all event listeners of the specified event type that are currently registered at this object.
  `ExpressionEngine`
  `getExpressionEngine()`
  Gets the expression engine used by this configuration.
  `float`
  `getFloat(String key)`
  Gets a float associated with the given configuration key.
  `float`
  `getFloat(String key, float defaultValue)`
  Gets a float associated with the given configuration key.
  `Float`
  `getFloat(String key, Float defaultValue)`
  Gets a `Float` associated with the given configuration key.
  `int`
  `getInt(String key)`
  Gets a int associated with the given configuration key.
  `int`
  `getInt(String key, int defaultValue)`
  Gets a int associated with the given configuration key.
  `Integer`
  `getInteger(String key, Integer defaultValue)`
  Gets an `Integer` associated with the given configuration key.
  `protected Iterator<String>`
  `getKeysInternal()`
  Gets an iterator with all keys defined in this configuration.
  `protected Iterator<String>`
  `getKeysInternal(String prefix)`
  Gets an iterator with all keys defined in this configuration that start with the given prefix.
  `List<Object>`
  `getList(String key)`
  Gets a List of the values associated with the given configuration key.
  `List<Object>`
  `getList(String key, List<?> defaultValue)`
  Gets a List of strings associated with the given configuration key.
  `long`
  `getLong(String key)`
  Gets a long associated with the given configuration key.
  `long`
  `getLong(String key, long defaultValue)`
  Gets a long associated with the given configuration key.
  `Long`
  `getLong(String key, Long defaultValue)`
  Gets a `Long` associated with the given configuration key.
  `protected int`
  `getMaxIndexInternal(String key)`
  Actually retrieves the maximum defined index for the given key.
  `Properties`
  `getProperties(String key)`
  Gets a list of properties associated with the given configuration key.
  `protected Object`
  `getPropertyInternal(String key)`
  Fetches the specified property.
  `short`
  `getShort(String key)`
  Gets a short associated with the given configuration key.
  `short`
  `getShort(String key, short defaultValue)`
  Gets a short associated with the given configuration key.
  `Short`
  `getShort(String key, Short defaultValue)`
  Gets a `Short` associated with the given configuration key.
  `String`
  `getString(String key)`
  Gets a string associated with the given configuration key.
  `String`
  `getString(String key, String defaultValue)`
  Gets a string associated with the given configuration key.
  `String[]`
  `getStringArray(String key)`
  Gets an array of strings associated with the given configuration key.
  `Configuration`
  `interpolatedConfiguration()`
  Returns a configuration with the same content as this configuration, but with all variables replaced by their actual values.
  `protected boolean`
  `isEmptyInternal()`
  Checks if this configuration is empty.
  `void`
  `read(Reader reader)`
  Reads the content of this object from the given reader.
  `<T extends Event>
  boolean`
  `removeEventListener(EventType<T> eventType, EventListener<? super T> listener)`
  Removes the event listener registration for the given event type and listener.
  `void`
  `setExpressionEngine(ExpressionEngine expressionEngine)`
  Sets the expression engine to be used by this configuration.
  `protected void`
  `setPropertyInternal(String key, Object value)`
  Sets the value of the specified property.
  `Configuration`
  `subset(String prefix)`
  Creates a new `Configuration` object containing all keys that start with the specified prefix.
  `void`
  `write(Writer writer)`
  Writes the content of this object to the given writer.

  ### Methods inherited from class org.apache.commons.configuration2.BaseHierarchicalConfiguration

  `childConfigurationsAt, childConfigurationsAt, cloneNodeModel, configurationsAt, createSubConfigurationForTrackedNode, getNodeModel, getSubConfigurationNodeSelector, getSubConfigurationParentModel, immutableChildConfigurationsAt, immutableConfigurationAt, immutableConfigurationAt, immutableConfigurationsAt, initSubConfigurationForThisParent, subnodeConfigurationChanged`

  ### Methods inherited from class org.apache.commons.configuration2.AbstractHierarchicalConfiguration

  `addNodes, addPropertyDirect, clearTree, clone, fetchNodeList, getMaxIndex, getModel, getRootElementName, getRootElementNameInternal, nodeDefined, nodeKey, resolveAddKey, resolveKey, resolveNodeKey, resolveUpdateKey, sizeInternal, toString`

  ### Methods inherited from class org.apache.commons.configuration2.AbstractConfiguration

  `addErrorLogListener, addProperty, append, beginRead, beginWrite, clear, clearProperty, cloneInterpolator, containsKey, copy, endRead, endWrite, get, get, getArray, getArray, getCollection, getCollection, getConfigurationDecoder, getConversionHandler, getDuration, getDuration, getEncodedString, getEncodedString, getInterpolator, getKeys, getKeys, getKeys, getKeysInternal, getList, getList, getListDelimiterHandler, getLogger, getProperties, getProperty, getSynchronizer, immutableSubset, initLogger, installInterpolator, interpolate, interpolate, isEmpty, isScalarValue, isThrowExceptionOnMissing, lock, setConfigurationDecoder, setConversionHandler, setDefaultLookups, setInterpolator, setListDelimiterHandler, setLogger, setParentInterpolator, setPrefixLookups, setProperty, setSynchronizer, setThrowExceptionOnMissing, size, unlock`

  ### Methods inherited from class org.apache.commons.configuration2.event.BaseEventSource

  `copyEventListeners, createErrorEvent, createEvent, fireError, fireEvent, getEventListenerRegistrations, isDetailEvents, setDetailEvents`

  ### Methods inherited from class java.lang.Object

  `equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface org.apache.commons.configuration2.Configuration

  `addProperty, clear, clearProperty, getInterpolator, installInterpolator, setInterpolator, setProperty`

  ### Methods inherited from interface org.apache.commons.configuration2.ImmutableConfiguration

  `containsKey, get, get, getArray, getArray, getCollection, getCollection, getDuration, getDuration, getEncodedString, getEncodedString, getEnum, getEnum, getKeys, getKeys, getKeys, getList, getList, getProperty, immutableSubset, isEmpty, size`

  ### Methods inherited from interface org.apache.commons.configuration2.sync.SynchronizerSupport

  `getSynchronizer, lock, setSynchronizer, unlock`

- ## Constructor Details

  - ### PatternSubtreeConfigurationWrapper

    public PatternSubtreeConfigurationWrapper(HierarchicalConfiguration<ImmutableNode> config, String path)
    Constructor
    Parameters:
      `config` - The Configuration to be wrapped.
      `path` - The base path pattern.

- ## Method Details

  - ### addPropertyInternal

    protected void addPropertyInternal(String key, Object value)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Adds the property with the specified key. This task will be delegated to the associated `ExpressionEngine`, so the passed in key must match the requirements of this implementation.
    Overrides:
      `addPropertyInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `key` - the key of the new property
      `value` - the value of the new property

  - ### clearInternal

    protected void clearInternal()
    Description copied from class: `AbstractHierarchicalConfiguration`
    Clears this configuration. This is a more efficient implementation than the one inherited from the base class. It delegates to the node model.
    Overrides:
      `clearInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`

  - ### clearPropertyDirect

    protected void clearPropertyDirect(String key)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Removes the property with the given key. Properties with names that start with the given key (i.e. properties below the specified key in the hierarchy) won't be affected. This implementation delegates to the node+ model.
    Overrides:
      `clearPropertyDirect` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `key` - the key of the property to be removed

  - ### containsKeyInternal

    protected boolean containsKeyInternal(String key)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Checks if the specified key is contained in this configuration. Note that for this configuration the term "contained" means that the key has an associated value. If there is a node for this key that has no value but children (either defined or undefined), this method will still return false .
    Overrides:
      `containsKeyInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `key` - the key to be checked
    Returns:
      a flag if this key is contained in this configuration

  - ### getBigDecimal

    public BigDecimal getBigDecimal(String key, BigDecimal defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a `BigDecimal` associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getBigDecimal` in interface `ImmutableConfiguration`
    Overrides:
      `getBigDecimal` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated BigDecimal if key is found and has valid format, default value otherwise.

  - ### getBigDecimal

    public BigDecimal getBigDecimal(String key)
    Description copied from class: `AbstractConfiguration`
    Gets a `BigDecimal` associated with the given configuration key.
    Specified by:
      `getBigDecimal` in interface `ImmutableConfiguration`
    Overrides:
      `getBigDecimal` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated BigDecimal if key is found and has valid format
    See Also:
      - `AbstractConfiguration.setThrowExceptionOnMissing(boolean)`

  - ### getBigInteger

    public BigInteger getBigInteger(String key, BigInteger defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a `BigInteger` associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getBigInteger` in interface `ImmutableConfiguration`
    Overrides:
      `getBigInteger` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated BigInteger if key is found and has valid format, default value otherwise.

  - ### getBigInteger

    public BigInteger getBigInteger(String key)
    Description copied from class: `AbstractConfiguration`
    Gets a `BigInteger` associated with the given configuration key.
    Specified by:
      `getBigInteger` in interface `ImmutableConfiguration`
    Overrides:
      `getBigInteger` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated BigInteger if key is found and has valid format
    See Also:
      - `AbstractConfiguration.setThrowExceptionOnMissing(boolean)`

  - ### getBoolean

    public boolean getBoolean(String key, boolean defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a boolean associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getBoolean` in interface `ImmutableConfiguration`
    Overrides:
      `getBoolean` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated boolean.

  - ### getBoolean

    public Boolean getBoolean(String key, Boolean defaultValue)
    Description copied from class: `AbstractConfiguration`
    Obtains the value of the specified key and tries to convert it into a `Boolean` object. If the property has no value, the passed in default value will be used.
    Specified by:
      `getBoolean` in interface `ImmutableConfiguration`
    Overrides:
      `getBoolean` in class `AbstractConfiguration`
    Parameters:
      `key` - the key of the property
      `defaultValue` - the default value
    Returns:
      the value of this key converted to a `Boolean`

  - ### getBoolean

    public boolean getBoolean(String key)
    Description copied from interface: `ImmutableConfiguration`
    Gets a boolean associated with the given configuration key.
    Specified by:
      `getBoolean` in interface `ImmutableConfiguration`
    Overrides:
      `getBoolean` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated boolean.

  - ### getByte

    public byte getByte(String key, byte defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a byte associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getByte` in interface `ImmutableConfiguration`
    Overrides:
      `getByte` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated byte.

  - ### getByte

    public Byte getByte(String key, Byte defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a `Byte` associated with the given configuration key.
    Specified by:
      `getByte` in interface `ImmutableConfiguration`
    Overrides:
      `getByte` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated byte if key is found and has valid format, default value otherwise.

  - ### getByte

    public byte getByte(String key)
    Description copied from interface: `ImmutableConfiguration`
    Gets a byte associated with the given configuration key.
    Specified by:
      `getByte` in interface `ImmutableConfiguration`
    Overrides:
      `getByte` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated byte.

  - ### getDouble

    public double getDouble(String key, double defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a double associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getDouble` in interface `ImmutableConfiguration`
    Overrides:
      `getDouble` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated double.

  - ### getDouble

    public Double getDouble(String key, Double defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a `Double` associated with the given configuration key.
    Specified by:
      `getDouble` in interface `ImmutableConfiguration`
    Overrides:
      `getDouble` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated double if key is found and has valid format, default value otherwise.

  - ### getDouble

    public double getDouble(String key)
    Description copied from interface: `ImmutableConfiguration`
    Gets a double associated with the given configuration key.
    Specified by:
      `getDouble` in interface `ImmutableConfiguration`
    Overrides:
      `getDouble` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated double.

  - ### getFloat

    public float getFloat(String key, float defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a float associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getFloat` in interface `ImmutableConfiguration`
    Overrides:
      `getFloat` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated float.

  - ### getFloat

    public Float getFloat(String key, Float defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a `Float` associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getFloat` in interface `ImmutableConfiguration`
    Overrides:
      `getFloat` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated float if key is found and has valid format, default value otherwise.

  - ### getFloat

    public float getFloat(String key)
    Description copied from interface: `ImmutableConfiguration`
    Gets a float associated with the given configuration key.
    Specified by:
      `getFloat` in interface `ImmutableConfiguration`
    Overrides:
      `getFloat` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated float.

  - ### getInt

    public int getInt(String key, int defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a int associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getInt` in interface `ImmutableConfiguration`
    Overrides:
      `getInt` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated int.

  - ### getInt

    public int getInt(String key)
    Description copied from interface: `ImmutableConfiguration`
    Gets a int associated with the given configuration key.
    Specified by:
      `getInt` in interface `ImmutableConfiguration`
    Overrides:
      `getInt` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated int.

  - ### getInteger

    public Integer getInteger(String key, Integer defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets an `Integer` associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getInteger` in interface `ImmutableConfiguration`
    Overrides:
      `getInteger` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated int if key is found and has valid format, default value otherwise.

  - ### getKeysInternal

    protected Iterator<String> getKeysInternal()
    Description copied from class: `AbstractHierarchicalConfiguration`
    Gets an iterator with all keys defined in this configuration. Note that the keys returned by this method will not contain any indices. This means that some structure will be lost.
    Overrides:
      `getKeysInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Returns:
      an iterator with the defined keys in this configuration

  - ### getKeysInternal

    protected Iterator<String> getKeysInternal(String prefix)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Gets an iterator with all keys defined in this configuration that start with the given prefix. The returned keys will not contain any indices. This implementation tries to locate a node whose key is the same as the passed in prefix. Then the subtree of this node is traversed, and the keys of all nodes encountered (including attributes) are added to the result set.
    Overrides:
      `getKeysInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `prefix` - the prefix of the keys to start with
    Returns:
      an iterator with the found keys

  - ### getList

    public List<Object> getList(String key, List<?> defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a List of strings associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getList` in interface `ImmutableConfiguration`
    Overrides:
      `getList` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated List of strings.
    See Also:
      - `ImmutableConfiguration.getList(Class, String, List)`

  - ### getList

    public List<Object> getList(String key)
    Description copied from class: `AbstractConfiguration`
    Gets a List of the values associated with the given configuration key. This method is different from the generic `getList()` method in that it does not recursively obtain all values stored for the specified property key. Rather, only the first level of the hierarchy is processed. So the resulting list may contain complex objects like arrays or collections - depending on the storage structure used by a concrete subclass. If the key doesn't map to an existing object, an empty List is returned.
    Specified by:
      `getList` in interface `ImmutableConfiguration`
    Overrides:
      `getList` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated List.
    See Also:
      - `AbstractConfiguration.getStringArray(String)`

  - ### getLong

    public long getLong(String key, long defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a long associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getLong` in interface `ImmutableConfiguration`
    Overrides:
      `getLong` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated long.

  - ### getLong

    public Long getLong(String key, Long defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a `Long` associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getLong` in interface `ImmutableConfiguration`
    Overrides:
      `getLong` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated long if key is found and has valid format, default value otherwise.

  - ### getLong

    public long getLong(String key)
    Description copied from interface: `ImmutableConfiguration`
    Gets a long associated with the given configuration key.
    Specified by:
      `getLong` in interface `ImmutableConfiguration`
    Overrides:
      `getLong` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated long.

  - ### getProperties

    public Properties getProperties(String key)
    Description copied from interface: `ImmutableConfiguration`
    Gets a list of properties associated with the given configuration key. This method expects the given key to have an arbitrary number of String values, each of which is of the form `key=value`. These strings are split at the equals sign, and the key parts will become keys of the returned `Properties` object, the value parts become values.
    Specified by:
      `getProperties` in interface `ImmutableConfiguration`
    Overrides:
      `getProperties` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated properties if key is found.

  - ### getPropertyInternal

    protected Object getPropertyInternal(String key)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Fetches the specified property. This task is delegated to the associated expression engine.
    Overrides:
      `getPropertyInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `key` - the key to be looked up
    Returns:
      the found value

  - ### getShort

    public short getShort(String key, short defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a short associated with the given configuration key.
    Specified by:
      `getShort` in interface `ImmutableConfiguration`
    Overrides:
      `getShort` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated short.

  - ### getShort

    public Short getShort(String key, Short defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a `Short` associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getShort` in interface `ImmutableConfiguration`
    Overrides:
      `getShort` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated short if key is found and has valid format, default value otherwise.

  - ### getShort

    public short getShort(String key)
    Description copied from interface: `ImmutableConfiguration`
    Gets a short associated with the given configuration key.
    Specified by:
      `getShort` in interface `ImmutableConfiguration`
    Overrides:
      `getShort` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated short.

  - ### getString

    public String getString(String key, String defaultValue)
    Description copied from interface: `ImmutableConfiguration`
    Gets a string associated with the given configuration key. If the key doesn't map to an existing object, the default value is returned.
    Specified by:
      `getString` in interface `ImmutableConfiguration`
    Overrides:
      `getString` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
      `defaultValue` - The default value.
    Returns:
      The associated string if key is found and has valid format, default value otherwise.

  - ### getString

    public String getString(String key)
    Description copied from class: `AbstractConfiguration`
    Gets a string associated with the given configuration key.
    Specified by:
      `getString` in interface `ImmutableConfiguration`
    Overrides:
      `getString` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated string.
    See Also:
      - `AbstractConfiguration.setThrowExceptionOnMissing(boolean)`

  - ### getStringArray

    public String[] getStringArray(String key)
    Description copied from class: `AbstractConfiguration`
    Gets an array of strings associated with the given configuration key. If the key doesn't map to an existing object, an empty array is returned. When a property is added to a configuration, it is checked whether it contains multiple values. This is obvious if the added object is a list or an array. For strings the association `ListDelimiterHandler` is consulted to find out whether the string can be split into multiple values.
    Specified by:
      `getStringArray` in interface `ImmutableConfiguration`
    Overrides:
      `getStringArray` in class `AbstractConfiguration`
    Parameters:
      `key` - The configuration key.
    Returns:
      The associated string array if key is found.
    See Also:
      - `AbstractConfiguration.setListDelimiterHandler(ListDelimiterHandler)`

  - ### isEmptyInternal

    protected boolean isEmptyInternal()
    Description copied from class: `AbstractHierarchicalConfiguration`
    Checks if this configuration is empty. Empty means that there are no keys with any values, though there can be some (empty) nodes.
    Overrides:
      `isEmptyInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Returns:
      a flag if this configuration is empty

  - ### setPropertyInternal

    protected void setPropertyInternal(String key, Object value)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Sets the value of the specified property.
    Overrides:
      `setPropertyInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `key` - the key of the property to set
      `value` - the new value of this property

  - ### subset

    public Configuration subset(String prefix)
    Description copied from class: `BaseHierarchicalConfiguration`
    Creates a new `Configuration` object containing all keys that start with the specified prefix. This implementation will return a `BaseHierarchicalConfiguration` object so that the structure of the keys will be saved. The nodes selected by the prefix (it is possible that multiple nodes are selected) are mapped to the root node of the returned configuration, i.e. their children and attributes will become children and attributes of the new root node. However, a value of the root node is only set if exactly one of the selected nodes contain a value (if multiple nodes have a value, there is simply no way to decide how these values are merged together). Note that the returned `Configuration` object is not connected to its source configuration: updates on the source configuration are not reflected in the subset and vice versa. The returned configuration uses the same `Synchronizer` as this configuration.
    Specified by:
      `subset` in interface `Configuration`
    Overrides:
      `subset` in class `BaseHierarchicalConfiguration`
    Parameters:
      `prefix` - the prefix of the keys for the subset
    Returns:
      a new configuration object representing the selected subset
    See Also:
      - `SubsetConfiguration`

  - ### getExpressionEngine

    public ExpressionEngine getExpressionEngine()
    Description copied from class: `AbstractHierarchicalConfiguration`
    Gets the expression engine used by this configuration. This method will never return null; if no specific expression engine was set, the default expression engine will be returned.
    Specified by:
      `getExpressionEngine` in interface `ImmutableHierarchicalConfiguration`
    Overrides:
      `getExpressionEngine` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Returns:
      the current expression engine

  - ### setExpressionEngine

    public void setExpressionEngine(ExpressionEngine expressionEngine)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Sets the expression engine to be used by this configuration. All property keys this configuration has to deal with will be interpreted by this engine.
    Specified by:
      `setExpressionEngine` in interface `HierarchicalConfiguration<ImmutableNode>`
    Overrides:
      `setExpressionEngine` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `expressionEngine` - the new expression engine; can be null, then the default expression engine will be used

  - ### addNodesInternal

    protected void addNodesInternal(String key, Collection<? extends ImmutableNode> nodes)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Actually adds a collection of new nodes to this configuration. This method is called by `addNodes()`. It can be overridden by subclasses that need to adapt this operation.
    Overrides:
      `addNodesInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `key` - the key where the nodes are to be added; can be null, then they are added to the root node
      `nodes` - a collection with the `Node` objects to be added

  - ### configurationAt

    public HierarchicalConfiguration<ImmutableNode> configurationAt(String key, boolean supportUpdates)
    Description copied from class: `BaseHierarchicalConfiguration`

    Returns a hierarchical sub configuration object that wraps the configuration node specified by the given key. This method provides an easy means of accessing sub trees of a hierarchical configuration. In the returned configuration the sub tree can directly be accessed, it becomes the root node of this configuration. Because of this the passed in key must select exactly one configuration node; otherwise an `IllegalArgumentException` will be thrown.

    The difference between this method and the `Configuration.subset(String)` method is that `subset()` supports arbitrary subsets of configuration nodes while `configurationAt()` only returns a single sub tree. Please refer to the documentation of the `SubnodeConfiguration` class to obtain further information about sub configurations and when they should be used.

    With the `supportUpdate` flag the behavior of the returned sub configuration regarding updates of its parent configuration can be determined. If set to false, the configurations return on independent nodes structures. So changes made on one configuration cannot be seen by the other one. A value of true in contrast creates a direct connection between both configurations - they are then using the same underlying data structures as much as possible. There are however changes which break this connection; for instance, if the sub tree the sub configuration belongs to is completely removed from the parent configuration. If such a change happens, the sub configuration becomes detached from its parent. It can still be used in a normal way, but changes on it are not reflected by the parent and vice verse. Also, it is not possible to reattach a once detached sub configuration.

    The result of this implementation depends on the `supportUpdates` flag: If it is false, a plain `BaseHierarchicalConfiguration` is returned using the selected node as root node. This is suitable for read-only access to properties. Because the configuration returned in this case is not connected to the parent configuration, updates on properties made by one configuration are not reflected by the other one. A value of true for this parameter causes a tracked node to be created, and result is a `SubnodeConfiguration` based on this tracked node. This configuration is really connected to its parent, so that updated properties are visible on both.
    Specified by:
      `configurationAt` in interface `HierarchicalConfiguration<ImmutableNode>`
    Overrides:
      `configurationAt` in class `BaseHierarchicalConfiguration`
    Parameters:
      `key` - the key that selects the sub tree
      `supportUpdates` - a flag whether the returned sub configuration should be directly connected to its parent
    Returns:
      a hierarchical configuration that contains this sub tree
    See Also:
      - `SubnodeConfiguration`

  - ### configurationAt

    public HierarchicalConfiguration<ImmutableNode> configurationAt(String key)
    Description copied from class: `BaseHierarchicalConfiguration`
    Returns a hierarchical subnode configuration for the node specified by the given key. This is a short form for `configurationAt(key, <b>false</b>)`. This is a short form for `configurationAt(key, <b>false</b>)`.
    Specified by:
      `configurationAt` in interface `HierarchicalConfiguration<ImmutableNode>`
    Overrides:
      `configurationAt` in class `BaseHierarchicalConfiguration`
    Parameters:
      `key` - the key that selects the sub tree
    Returns:
      a hierarchical configuration that contains this sub tree
    See Also:
      - `SubnodeConfiguration`

  - ### configurationsAt

    public List<HierarchicalConfiguration<ImmutableNode>> configurationsAt(String key)
    Description copied from class: `BaseHierarchicalConfiguration`
    Returns a list of sub configurations for all configuration nodes selected by the given key. This method will evaluate the passed in key (using the current `ExpressionEngine`) and then create a sub configuration for each returned node (like `HierarchicalConfiguration.configurationAt(String)` ). This is especially useful when dealing with list-like structures. As an example consider the configuration that contains data about database tables and their fields. If you need access to all fields of a certain table, you can simply do

         List fields = config.configurationsAt("tables.table(0).fields.field");
         for(Iterator it = fields.iterator(); it.hasNext();)
         {
             BaseHierarchicalConfiguration sub = (BaseHierarchicalConfiguration) it.next();
             // now the children and attributes of the field node can be
             // directly accessed
             String fieldName = sub.getString("name");
             String fieldType = sub.getString("type");
             ...

    The configuration objects returned are not connected to the parent configuration. This implementation creates sub configurations in the same way as described for `BaseHierarchicalConfiguration.configurationAt(String)`.
    Specified by:
      `configurationsAt` in interface `HierarchicalConfiguration<ImmutableNode>`
    Overrides:
      `configurationsAt` in class `BaseHierarchicalConfiguration`
    Parameters:
      `key` - the key for selecting the desired nodes
    Returns:
      a list with hierarchical configuration objects; each configuration represents one of the nodes selected by the passed in key

  - ### clearTreeInternal

    protected Object clearTreeInternal(String key)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Actually clears the tree of elements referenced by the given key. This method is called by `clearTree()`. Subclasses that need to adapt this operation can override this method. This base implementation delegates to the node model.
    Overrides:
      `clearTreeInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `key` - the key of the property to be removed
    Returns:
      an object with information about the nodes that have been removed (this is needed for firing a meaningful event of type CLEAR_TREE)

  - ### getMaxIndexInternal

    protected int getMaxIndexInternal(String key)
    Description copied from class: `AbstractHierarchicalConfiguration`
    Actually retrieves the maximum defined index for the given key. This method is called by `getMaxIndex()`. Subclasses that need to adapt this operation have to override this method.
    Overrides:
      `getMaxIndexInternal` in class `AbstractHierarchicalConfiguration<ImmutableNode>`
    Parameters:
      `key` - the key to be checked
    Returns:
      the maximum defined index for this key

  - ### interpolatedConfiguration

    public Configuration interpolatedConfiguration()
    Description copied from class: `BaseHierarchicalConfiguration`
    Returns a configuration with the same content as this configuration, but with all variables replaced by their actual values. This implementation is specific for hierarchical configurations. It clones the current configuration and runs a specialized visitor on the clone, which performs interpolation on the single configuration nodes.
    Overrides:
      `interpolatedConfiguration` in class `BaseHierarchicalConfiguration`
    Returns:
      a configuration with all variables interpolated

  - ### addEventListener

    public <T extends Event> void addEventListener(EventType<T> eventType, EventListener<? super T> listener)
    Description copied from interface: `EventSource`
    Adds an event listener for the specified event type. This listener is notified about events of this type and all its sub types.
    Specified by:
      `addEventListener` in interface `EventSource`
    Overrides:
      `addEventListener` in class `BaseEventSource`
    Type Parameters:
      `T` - the type of events processed by this listener
    Parameters:
      `eventType` - the event type (must not be null)
      `listener` - the listener to be registered (must not be null)

  - ### removeEventListener

    public <T extends Event> boolean removeEventListener(EventType<T> eventType, EventListener<? super T> listener)
    Description copied from interface: `EventSource`
    Removes the event listener registration for the given event type and listener. An event listener instance may be registered multiple times for different event types. Therefore, when removing a listener the event type of the registration in question has to be specified. The return value indicates whether a registration was removed. A value of false means that no such combination of event type and listener was found.
    Specified by:
      `removeEventListener` in interface `EventSource`
    Overrides:
      `removeEventListener` in class `BaseEventSource`
    Type Parameters:
      `T` - the type of events processed by this listener
    Parameters:
      `eventType` - the event type
      `listener` - the event listener to be removed
    Returns:
      a flag whether a listener registration was removed

  - ### getEventListeners

    public <T extends Event> Collection<EventListener<? super T>> getEventListeners(EventType<T> eventType)
    Description copied from class: `BaseEventSource`
    Gets a collection with all event listeners of the specified event type that are currently registered at this object.
    Overrides:
      `getEventListeners` in class `BaseEventSource`
    Type Parameters:
      `T` - the event type
    Parameters:
      `eventType` - the event type object
    Returns:
      a collection with the event listeners of the specified event type (this collection is a snapshot of the currently registered listeners; it cannot be manipulated)

  - ### clearEventListeners

    public void clearEventListeners()
    Description copied from class: `BaseEventSource`
    Removes all registered event listeners.
    Overrides:
      `clearEventListeners` in class `BaseEventSource`

  - ### clearErrorListeners

    public void clearErrorListeners()
    Description copied from class: `BaseEventSource`
    Removes all registered error listeners.
    Overrides:
      `clearErrorListeners` in class `BaseEventSource`

  - ### write

    public void write(Writer writer) throws ConfigurationException, IOException
    Description copied from interface: `FileBased`
    Writes the content of this object to the given writer. Client code should not call this method directly, but use a `FileHandler` for writing data.
    Specified by:
      `write` in interface `FileBased`
    Parameters:
      `writer` - the writer
    Throws:
      `ConfigurationException` - if a non-I/O related problem occurs, e.g. the data read does not have the expected format
      `IOException` - if an I/O error occurs.

  - ### read

    public void read(Reader reader) throws ConfigurationException, IOException
    Description copied from interface: `FileBased`
    Reads the content of this object from the given reader. Client code should not call this method directly, but use a `FileHandler` for reading data.
    Specified by:
      `read` in interface `FileBased`
    Parameters:
      `reader` - the reader
    Throws:
      `ConfigurationException` - if a non-I/O related problem occurs, e.g. the data read does not have the expected format
      `IOException` - if an I/O error occurs.