Class DynamicCombinedConfiguration

All Implemented Interfaces:
Cloneable, Configuration, EventListener<ConfigurationEvent>, EventSource, HierarchicalConfiguration<ImmutableNode>, ImmutableConfiguration, ImmutableHierarchicalConfiguration, SynchronizerSupport, InMemoryNodeModelSupport, NodeKeyResolver<ImmutableNode>, NodeModelSupport<ImmutableNode>

DynamicCombinedConfiguration allows a set of CombinedConfigurations to be used.

Each CombinedConfiguration is referenced by a key that is dynamically constructed from a key pattern on each call. The key pattern will be resolved using the configured ConfigurationInterpolator.

This Configuration implementation uses the configured Synchronizer to guard itself against concurrent access. If there are multiple threads accessing an instance concurrently, a fully functional Synchronizer implementation (e.g. ReadWriteSynchronizer) has to be used to ensure consistency and to avoid exceptions. The Synchronizer assigned to an instance is also passed to child configuration objects when they are created.

Since:
1.6
  • Constructor Details

    • DynamicCombinedConfiguration

      Creates a new instance of DynamicCombinedConfiguration and initializes the combiner to be used.
      Parameters:
      comb - the node combiner (can be null, then a union combiner is used as default)
    • DynamicCombinedConfiguration

      Creates a new instance of DynamicCombinedConfiguration that uses a union combiner.
      See Also:
  • Method Details

    • setKeyPattern

      public void setKeyPattern(String pattern)
    • getKeyPattern

    • setLoggerName

      public void setLoggerName(String name)
      Sets the name of the Logger to use on each CombinedConfiguration.
      Parameters:
      name - The Logger name.
    • getNodeCombiner

      Gets the node combiner that is used for creating the combined node structure.
      Overrides:
      getNodeCombiner in class CombinedConfiguration
      Returns:
      the node combiner
    • setNodeCombiner

      public void setNodeCombiner(NodeCombiner nodeCombiner)
      Sets the node combiner. This object will be used when the combined node structure is to be constructed. It must not be null, otherwise an IllegalArgumentException exception is thrown. Changing the node combiner causes an invalidation of this combined configuration, so that the new combiner immediately takes effect.
      Overrides:
      setNodeCombiner in class CombinedConfiguration
      Parameters:
      nodeCombiner - the node combiner
    • addConfiguration

      public void addConfiguration(Configuration config, String name, String at)
      Adds a new configuration to this combined configuration. It is possible (but not mandatory) to give the new configuration a name. This name must be unique, otherwise a ConfigurationRuntimeException will be thrown. With the optional at argument you can specify where in the resulting node structure the content of the added configuration should appear. This is a string that uses dots as property delimiters (independent on the current expression engine). For instance if you pass in the string "database.tables", all properties of the added configuration will occur in this branch.
      Overrides:
      addConfiguration in class CombinedConfiguration
      Parameters:
      config - the configuration to add (must not be null)
      name - the name of this configuration (can be null)
      at - the position of this configuration in the combined tree (can be null)
    • getNumberOfConfigurations

      Gets the number of configurations that are contained in this combined configuration.
      Overrides:
      getNumberOfConfigurations in class CombinedConfiguration
      Returns:
      the number of contained configurations
    • getConfiguration

      public Configuration getConfiguration(int index)
      Gets the configuration at the specified index. The contained configurations are numbered in the order they were added to this combined configuration. The index of the first configuration is 0.
      Overrides:
      getConfiguration in class CombinedConfiguration
      Parameters:
      index - the index
      Returns:
      the configuration at this index
    • getConfiguration

      Gets the configuration with the given name. This can be null if no such configuration exists.
      Overrides:
      getConfiguration in class CombinedConfiguration
      Parameters:
      name - the name of the configuration
      Returns:
      the configuration with this name
    • getConfigurationNames

      Gets a set with the names of all configurations contained in this combined configuration. Of course here are only these configurations listed, for which a name was specified when they were added.
      Overrides:
      getConfigurationNames in class CombinedConfiguration
      Returns:
      a set with the names of the contained configurations (never null)
    • removeConfiguration

      Removes the configuration with the specified name.
      Overrides:
      removeConfiguration in class CombinedConfiguration
      Parameters:
      name - the name of the configuration to be removed
      Returns:
      the removed configuration (null if this configuration was not found)
    • removeConfiguration

      public boolean removeConfiguration(Configuration config)
      Removes the specified configuration from this combined configuration.
      Overrides:
      removeConfiguration in class CombinedConfiguration
      Parameters:
      config - the configuration to be removed
      Returns:
      a flag whether this configuration was found and could be removed
    • removeConfigurationAt

      Removes the configuration at the specified index.
      Overrides:
      removeConfigurationAt in class CombinedConfiguration
      Parameters:
      index - the index
      Returns:
      the removed configuration
    • 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: CombinedConfiguration
      Clears this configuration. All contained configurations will be removed.
      Overrides:
      clearInternal in class CombinedConfiguration
    • 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

      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:
    • 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

      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:
    • 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

      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:
    • 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:
    • 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

      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

      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:
    • 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:
    • 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
    • sizeInternal

      protected int sizeInternal()
      Description copied from class: AbstractHierarchicalConfiguration
      Actually calculates the size of this configuration. This method is called by size() with a read lock held. The base implementation provided here calculates the size based on the iterator returned by getKeys(). Sub classes which can determine the size in a more efficient way should override this method. This implementation is slightly more efficient than the default implementation. It does not iterate over the key set, but directly queries its size after it has been constructed. Note that constructing the key set is still an O(n) operation.
      Overrides:
      sizeInternal in class AbstractHierarchicalConfiguration<ImmutableNode>
      Returns:
      the size of this configuration (i.e. the number of keys)
    • 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:
    • 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:
    • configurationAt

      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:
    • configurationsAt

      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

      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
    • getSource

      Gets the configuration source, in which the specified key is defined. This method will determine the configuration node that is identified by the given key. The following constellations are possible:
      • If no node object is found for this key, null is returned.
      • If the key maps to multiple nodes belonging to different configuration sources, a IllegalArgumentException is thrown (in this case no unique source can be determined).
      • If exactly one node is found for the key, the (child) configuration object, to which the node belongs is determined and returned.
      • For keys that have been added directly to this combined configuration and that do not belong to the namespaces defined by existing child configurations this configuration will be returned.
      Overrides:
      getSource in class CombinedConfiguration
      Parameters:
      key - the key of a configuration property
      Returns:
      the configuration, to which this property belongs or null if the key cannot be resolved
      Throws:
      IllegalArgumentException - if the key maps to multiple properties and the source cannot be determined, or if the key is null
    • clearEventListeners

      public void clearEventListeners()
      Description copied from class: BaseEventSource
      Removes all registered event listeners.
      Overrides:
      clearEventListeners in class BaseEventSource
    • 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
    • clearErrorListeners

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

      public void invalidate()
      Invalidates the current combined configuration. This means that the next time a property is accessed the combined node structure must be re-constructed. Invalidation of a combined configuration also means that an event of type EVENT_COMBINED_INVALIDATE is fired. Note that while other events most times appear twice (once before and once after an update), this event is only fired once (after update).
      Overrides:
      invalidate in class CombinedConfiguration
    • invalidateAll

      public void invalidateAll()
    • beginRead

      protected void beginRead(boolean optimize)
      Notifies this configuration's Synchronizer that a read operation is about to start. This method is called by all methods which access this configuration in a read-only mode. Subclasses may override it to perform additional actions before this read operation. The boolean optimize argument can be evaluated by overridden methods in derived classes. Some operations which require a lock do not need a fully initialized configuration object. By setting this flag to true, such operations can give a corresponding hint. An overridden implementation of beginRead() can then decide to skip some initialization steps. All basic operations in this class (and most of the basic Configuration implementations) call this method with a parameter value of false. In any case the inherited method must be called! Otherwise, proper synchronization is not guaranteed. This implementation checks whether a combined root node is available. If not, it is constructed by requesting a write lock. This implementation ensures that the current configuration is initialized. The lock counter is increased.
      Overrides:
      beginRead in class CombinedConfiguration
      Parameters:
      optimize - a flag whether optimization can be performed
    • beginWrite

      protected void beginWrite(boolean optimize)
      Notifies this configuration's Synchronizer that an update operation is about to start. This method is called by all methods which modify this configuration. Subclasses may override it to perform additional operations before an update. For a description of the boolean optimize argument refer to the documentation of beginRead(). In any case the inherited method must be called! Otherwise, proper synchronization is not guaranteed. This implementation checks whether a combined root node is available. If not, it is constructed now. This implementation ensures that the current configuration is initialized. If necessary, a new child configuration instance is created.
      Overrides:
      beginWrite in class CombinedConfiguration
      Parameters:
      optimize - a flag whether optimization can be performed
      See Also:
    • endRead

      protected void endRead()
      Notifies this configuration's Synchronizer that a read operation has finished. This method is called by all methods which access this configuration in a read-only manner at the end of their execution. Subclasses may override it to perform additional actions after this read operation. In any case the inherited method must be called! Otherwise, the read lock will not be released. This implementation clears the current configuration if necessary.
      Overrides:
      endRead in class AbstractConfiguration
    • endWrite

      protected void endWrite()
      Notifies this configuration's Synchronizer that an update operation has finished. This method is called by all methods which modify this configuration at the end of their execution. Subclasses may override it to perform additional operations after an update. In any case the inherited method must be called! Otherwise, the write lock will not be released. This implementation clears the current configuration if necessary.
      Overrides:
      endWrite in class AbstractConfiguration