| org.apache.commons.configuration.AbstractConfiguration org.apache.commons.configuration.HierarchicalConfiguration org.apache.commons.configuration.CombinedConfiguration
CombinedConfiguration | public class CombinedConfiguration extends HierarchicalConfiguration implements ConfigurationListener,Cloneable(Code) | |
A hierarchical composite configuration class.
This class maintains a list of configuration objects, which can be added
using the divers addConfiguration() methods. After that the
configurations can be accessed either by name (if one was provided when the
configuration was added) or by index. For the whole set of managed
configurations a logical node structure is constructed. For this purpose a
org.apache.commons.configuration.tree.NodeCombiner NodeCombiner
object can be set. This makes it possible to specify different algorithms for
the combination process.
The big advantage of this class is that it creates a truely hierarchical
structure of all the properties stored in the contained configurations - even
if some of them are no hierarchical configurations per se. So all enhanced
features provided by a hierarchical configuration (e.g. choosing an
expression engine) are applicable.
The class works by registering itself as an event listener add all added
configurations. So it gets notified whenever one of these configurations is
changed and can invalidate its internal node structure. The next time a
property is accessed the node structure will be re-constructed using the
current state of the managed configurations. Node that, depending on the used
NodeCombiner , this may be a complex operation.
It is not strictly forbidden to manipulate a
CombinedConfiguration directly, but the results may be
unpredictable. For instance some node combiners use special view nodes for
linking parts of the original configurations' data together. If new
properties are added to such a special node, they do not belong to any of the
managed configurations and thus hang in the air. It is also possible that
direct updates on a CombinedConfiguration are incompatible
with the used node combiner (e.g. if the
org.apache.commons.configuration.tree.OverrideCombiner OverrideCombiner
is used and properties are removed the resulting node structure may be
incorrect because some properties that were hidden by the removed properties
are not visible). So it is recommended to perform updates only on the managed
configurations.
Whenever the node structure of a CombinedConfiguration becomes
invalid (either because one of the contained configurations was modified or
because the invalidate() method was directly called) an event
is generated. So this can be detected by interested event listeners. This
also makes it possible to add a combined configuration into another one.
Implementation note: Adding and removing configurations to and from a
combined configuration is not thread-safe. If a combined configuration is
manipulated by multiple threads, the developer has to take care about
properly synchronization.
author: author: href="http://jakarta.apache.org/commons/configuration/team-list.html">Commons author: Configuration team since: 1.3 version: $Id: CombinedConfiguration.java 484692 2006-12-08 18:30:15Z oheger $ |
Inner Class :static class ConfigData | |
Field Summary | |
final public static int | EVENT_COMBINED_INVALIDATE Constant for the invalidate event that is fired when the internal node
structure becomes invalid. |
EVENT_COMBINED_INVALIDATE | final public static int EVENT_COMBINED_INVALIDATE(Code) | | Constant for the invalidate event that is fired when the internal node
structure becomes invalid.
|
CombinedConfiguration | public CombinedConfiguration(NodeCombiner comb)(Code) | | Creates a new instance of CombinedConfiguration and
initializes the combiner to be used.
Parameters: comb - the node combiner (can be null, then a union combineris used as default) |
addConfiguration | public void addConfiguration(AbstractConfiguration config, String name, String at)(Code) | | 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.
Parameters: config - the configuration to add (must not be null) Parameters: name - the name of this configuration (can be null) Parameters: at - the position of this configuration in the combined tree (can benull) |
addConfiguration | public void addConfiguration(AbstractConfiguration config, String name)(Code) | | Adds a new configuration to this combined configuration with an optional
name. The new configuration's properties will be added under the root of
the combined node structure.
Parameters: config - the configuration to add (must not be null) Parameters: name - the name of this configuration (can be null) |
addConfiguration | public void addConfiguration(AbstractConfiguration config)(Code) | | Adds a new configuration to this combined configuration. The new
configuration is not given a name. Its properties will be added under the
root of the combined node structure.
Parameters: config - the configuration to add (must not be null) |
clear | public void clear()(Code) | | Clears this configuration. All contained configurations will be removed.
|
clone | public Object clone()(Code) | | Returns a copy of this object. This implementation performs a deep clone,
i.e. all contained configurations will be cloned, too. For this to work,
all contained configurations must be cloneable. Registered event
listeners won't be cloned. The clone will use the same node combiner than
the original.
the copied object |
configurationChanged | public void configurationChanged(ConfigurationEvent event)(Code) | | Event listener call back for configuration update events. This method is
called whenever one of the contained configurations was modified. It
invalidates this combined configuration.
Parameters: event - the update event |
getConfiguration | public Configuration getConfiguration(int index)(Code) | | Returns 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.
Parameters: index - the index the configuration at this index |
getConfiguration | public Configuration getConfiguration(String name)(Code) | | Returns the configuration with the given name. This can be null
if no such configuration exists.
Parameters: name - the name of the configuration the configuration with this name |
getConfigurationNames | public Set getConfigurationNames()(Code) | | Returns 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.
a set with the names of the contained configurations (nevernull) |
getNodeCombiner | public NodeCombiner getNodeCombiner()(Code) | | Returns the node combiner that is used for creating the combined node
structure.
the node combiner |
getNumberOfConfigurations | public int getNumberOfConfigurations()(Code) | | Returns the number of configurations that are contained in this combined
configuration.
the number of contained configurations |
getProperty | public Object getProperty(String key)(Code) | | Returns the value of the specified property. This implementation
evaluates the force reload check flag. If it is set, all
contained configurations will be triggered before the value of the
requested property is retrieved.
Parameters: key - the key of the desired property the value of this property since: 1.4 |
getRootNode | public ConfigurationNode getRootNode()(Code) | | Returns the configuration root node of this combined configuration. This
method will construct a combined node structure using the current node
combiner if necessary.
the combined root node |
invalidate | public void invalidate()(Code) | | Invalidates this 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).
|
isForceReloadCheck | public boolean isForceReloadCheck()(Code) | | Returns a flag whether an enhanced reload check must be performed.
the force reload check flag since: 1.4 |
removeConfiguration | public boolean removeConfiguration(Configuration config)(Code) | | Removes the specified configuration from this combined configuration.
Parameters: config - the configuration to be removed a flag whether this configuration was found and could be removed |
removeConfiguration | public Configuration removeConfiguration(String name)(Code) | | Removes the configuration with the specified name.
Parameters: name - the name of the configuration to be removed the removed configuration (null if this configurationwas not found) |
removeConfigurationAt | public Configuration removeConfigurationAt(int index)(Code) | | Removes the configuration at the specified index.
Parameters: index - the index the removed configuration |
setForceReloadCheck | public void setForceReloadCheck(boolean forceReloadCheck)(Code) | | Sets the force reload check flag. If this flag is set, each property
access on this configuration will cause a reload check on the contained
configurations. This is a workaround for a problem with some reload
implementations that only check if a reload is required when they are
triggered. Per default this mode is disabled. If the force reload check
flag is set to true, accessing properties will be less
performant, but reloads on contained configurations will be detected.
Parameters: forceReloadCheck - the value of the flag since: 1.4 |
setNodeCombiner | public void setNodeCombiner(NodeCombiner nodeCombiner)(Code) | | 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.
Parameters: nodeCombiner - the node combiner |
Fields inherited from org.apache.commons.configuration.HierarchicalConfiguration | final public static int EVENT_ADD_NODES(Code)(Java Doc) final public static int EVENT_CLEAR_TREE(Code)(Java Doc)
|
Methods inherited from org.apache.commons.configuration.AbstractConfiguration | public void addErrorLogListener()(Code)(Java Doc) public void addProperty(String key, Object value)(Code)(Java Doc) abstract protected void addPropertyDirect(String key, Object value)(Code)(Java Doc) public void clear()(Code)(Java Doc) public void clearProperty(String key)(Code)(Java Doc) protected void clearPropertyDirect(String key)(Code)(Java Doc) abstract public boolean containsKey(String key)(Code)(Java Doc) protected ConfigurationInterpolator createInterpolator()(Code)(Java Doc) public BigDecimal getBigDecimal(String key)(Code)(Java Doc) public BigDecimal getBigDecimal(String key, BigDecimal defaultValue)(Code)(Java Doc) public BigInteger getBigInteger(String key)(Code)(Java Doc) public BigInteger getBigInteger(String key, BigInteger defaultValue)(Code)(Java Doc) public boolean getBoolean(String key)(Code)(Java Doc) public boolean getBoolean(String key, boolean defaultValue)(Code)(Java Doc) public Boolean getBoolean(String key, Boolean defaultValue)(Code)(Java Doc) public byte getByte(String key)(Code)(Java Doc) public byte getByte(String key, byte defaultValue)(Code)(Java Doc) public Byte getByte(String key, Byte defaultValue)(Code)(Java Doc) public static char getDefaultListDelimiter()(Code)(Java Doc) public static char getDelimiter()(Code)(Java Doc) public double getDouble(String key)(Code)(Java Doc) public double getDouble(String key, double defaultValue)(Code)(Java Doc) public Double getDouble(String key, Double defaultValue)(Code)(Java Doc) public float getFloat(String key)(Code)(Java Doc) public float getFloat(String key, float defaultValue)(Code)(Java Doc) public Float getFloat(String key, Float defaultValue)(Code)(Java Doc) public int getInt(String key)(Code)(Java Doc) public int getInt(String key, int defaultValue)(Code)(Java Doc) public Integer getInteger(String key, Integer defaultValue)(Code)(Java Doc) public ConfigurationInterpolator getInterpolator()(Code)(Java Doc) abstract public Iterator getKeys()(Code)(Java Doc) public Iterator getKeys(String prefix)(Code)(Java Doc) public List getList(String key)(Code)(Java Doc) public List getList(String key, List defaultValue)(Code)(Java Doc) public char getListDelimiter()(Code)(Java Doc) public Log getLogger()(Code)(Java Doc) public long getLong(String key)(Code)(Java Doc) public long getLong(String key, long defaultValue)(Code)(Java Doc) public Long getLong(String key, Long defaultValue)(Code)(Java Doc) public Properties getProperties(String key)(Code)(Java Doc) public Properties getProperties(String key, Properties defaults)(Code)(Java Doc) public short getShort(String key)(Code)(Java Doc) public short getShort(String key, short defaultValue)(Code)(Java Doc) public Short getShort(String key, Short defaultValue)(Code)(Java Doc) public String getString(String key)(Code)(Java Doc) public String getString(String key, String defaultValue)(Code)(Java Doc) public String[] getStringArray(String key)(Code)(Java Doc) public synchronized StrSubstitutor getSubstitutor()(Code)(Java Doc) protected String interpolate(String base)(Code)(Java Doc) protected Object interpolate(Object value)(Code)(Java Doc) protected String interpolateHelper(String base, List priorVariables)(Code)(Java Doc) public boolean isDelimiterParsingDisabled()(Code)(Java Doc) abstract public boolean isEmpty()(Code)(Java Doc) public boolean isThrowExceptionOnMissing()(Code)(Java Doc) protected Object resolveContainerStore(String key)(Code)(Java Doc) public static void setDefaultListDelimiter(char delimiter)(Code)(Java Doc) public static void setDelimiter(char delimiter)(Code)(Java Doc) public void setDelimiterParsingDisabled(boolean delimiterParsingDisabled)(Code)(Java Doc) public void setListDelimiter(char listDelimiter)(Code)(Java Doc) public void setLogger(Log log)(Code)(Java Doc) public void setProperty(String key, Object value)(Code)(Java Doc) public void setThrowExceptionOnMissing(boolean throwExceptionOnMissing)(Code)(Java Doc) public Configuration subset(String prefix)(Code)(Java Doc)
|
|
|