public class CompositeConfiguration extends AbstractConfiguration implements Cloneable
CompositeConfiguration allows you to add multiple Configuration objects to an aggregated
configuration. If you add Configuration1, and then Configuration2, any properties shared will mean that the value
defined by Configuration1 will be returned. If Configuration1 doesn't have the property, then Configuration2 will be
checked. You can add multiple different types or the same type of properties file.
When querying properties the order in which child configurations have been added is relevant. To deal with property updates, a so-called in-memory configuration is used. Per default, such a configuration is created automatically. All property writes target this special configuration. There are constructors which allow you to provide a specific in-memory configuration. If used that way, the in-memory configuration is always the last one in the list of child configurations. This means that for query operations all other configurations take precedence.
Alternatively it is possible to mark a child configuration as in-memory configuration when it is added. In this case the treatment of the in-memory configuration is slightly different: it remains in the list of child configurations at the position it was added, i.e. its priority for property queries can be defined by adding the child configurations in the correct order.
This configuration class uses a Synchronizer to control concurrent access. While all methods for reading and
writing configuration properties make use of this Synchronizer per default, the methods for managing the list
of child configurations and the in-memory configuration
(addConfiguration(), getNumberOfConfigurations(), removeConfiguration(),
getConfiguration(), getInMemoryConfiguration()) are guarded, too. Because most methods for accessing configuration
data delegate to the list of child configurations, the thread-safety of a CompositeConfiguration object also
depends on the Synchronizer objects used by these children.
| Constructor and Description |
|---|
CompositeConfiguration()
Creates an empty CompositeConfiguration object which can then be added some other Configuration files
|
CompositeConfiguration(Collection<? extends Configuration> configurations)
Create a CompositeConfiguration with an empty in memory configuration and adds the collection of configurations
specified.
|
CompositeConfiguration(Configuration inMemoryConfiguration)
Creates a CompositeConfiguration object with a specified in-memory configuration.
|
CompositeConfiguration(Configuration inMemoryConfiguration,
Collection<? extends Configuration> configurations)
Creates a CompositeConfiguration with a specified in-memory configuration, and then adds the given
collection of configurations.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addConfiguration(Configuration config)
Add a configuration.
|
void |
addConfiguration(Configuration config,
boolean asInMemory)
Adds a child configuration and optionally makes it the in-memory configuration.
|
void |
addConfigurationFirst(Configuration config)
Add a configuration to the start of the list of child configurations.
|
void |
addConfigurationFirst(Configuration config,
boolean asInMemory)
Adds a child configuration to the start of the collection and optionally makes it the in-memory
configuration.
|
protected void |
addPropertyDirect(String key,
Object token)
Add this property to the in-memory Configuration.
|
protected void |
clearInternal()
Removes all child configurations and reinitializes the in-memory configuration.
|
protected void |
clearPropertyDirect(String key)
Removes the specified property from this configuration.
|
Object |
clone()
Returns a copy of this object.
|
protected boolean |
containsKeyInternal(String key)
Actually checks whether the specified key is contained in this configuration.
|
Configuration |
getConfiguration(int index)
Return the configuration at the specified index.
|
Configuration |
getInMemoryConfiguration()
Returns the "in memory configuration".
|
protected Iterator<String> |
getKeysInternal()
Actually creates an iterator for iterating over the keys in this configuration.
|
protected Iterator<String> |
getKeysInternal(String key)
Returns an
Iterator with all property keys starting with the specified prefix. |
List<Object> |
getList(String key,
List<?> defaultValue)
Gets a List of strings associated with the given configuration key.
|
int |
getNumberOfConfigurations()
Return the number of configurations.
|
protected Object |
getPropertyInternal(String key)
Read property from underlying composite
|
Configuration |
getSource(String key)
Returns the configuration source, in which the specified key is defined.
|
String[] |
getStringArray(String key)
Get an array of strings associated with the given configuration key.
|
protected boolean |
isEmptyInternal()
Actually checks whether this configuration contains data.
|
void |
removeConfiguration(Configuration config)
Remove a configuration.
|
void |
setListDelimiterHandler(ListDelimiterHandler listDelimiterHandler)
Sets the
ListDelimiterHandler to be used by this instance. |
addErrorLogListener, addProperty, addPropertyInternal, append, beginRead, beginWrite, clear, clearProperty, cloneInterpolator, containsKey, copy, endRead, endWrite, get, get, getArray, getArray, getBigDecimal, getBigDecimal, getBigInteger, getBigInteger, getBoolean, getBoolean, getBoolean, getByte, getByte, getByte, getCollection, getCollection, getConfigurationDecoder, getConversionHandler, getDouble, getDouble, getDouble, getDuration, getDuration, getEncodedString, getEncodedString, getFloat, getFloat, getFloat, getInt, getInt, getInteger, getInterpolator, getKeys, getKeys, getList, getList, getList, getListDelimiterHandler, getLogger, getLong, getLong, getLong, getProperties, getProperties, getProperty, getShort, getShort, getShort, getString, getString, getSynchronizer, immutableSubset, initLogger, installInterpolator, interpolate, interpolate, interpolatedConfiguration, isEmpty, isScalarValue, isThrowExceptionOnMissing, lock, setConfigurationDecoder, setConversionHandler, setDefaultLookups, setInterpolator, setLogger, setParentInterpolator, setPrefixLookups, setProperty, setPropertyInternal, setSynchronizer, setThrowExceptionOnMissing, size, sizeInternal, subset, unlockaddEventListener, clearErrorListeners, clearEventListeners, copyEventListeners, createErrorEvent, createEvent, fireError, fireEvent, getEventListenerRegistrations, getEventListeners, isDetailEvents, removeEventListener, setDetailEventsequals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetEnum, getEnumpublic CompositeConfiguration()
public CompositeConfiguration(Configuration inMemoryConfiguration)
CompositeConfiguration. Note: Use this constructor if you want to set a special
type of in-memory configuration. If you have a configuration which should act as both a child configuration and as
in-memory configuration, use addConfiguration(Configuration, boolean) with a value of true instead.inMemoryConfiguration - the in memory configuration to usepublic CompositeConfiguration(Collection<? extends Configuration> configurations)
configurations - the collection of configurations to addpublic CompositeConfiguration(Configuration inMemoryConfiguration, Collection<? extends Configuration> configurations)
inMemoryConfiguration - the in memory configuration to useconfigurations - the collection of configurations to addCompositeConfiguration(Configuration)public void addConfiguration(Configuration config)
config - the configuration to addpublic void addConfiguration(Configuration config, boolean asInMemory)
config - the configuration to be addedasInMemory - true if this configuration becomes the new in-memory configuration, false
otherwisepublic void addConfigurationFirst(Configuration config)
config - the configuration to addpublic void addConfigurationFirst(Configuration config, boolean asInMemory)
config - the configuration to be addedasInMemory - true if this configuration becomes the new in-memory configuration, false
otherwisepublic void removeConfiguration(Configuration config)
config - The configuration to removepublic int getNumberOfConfigurations()
protected void clearInternal()
clearInternal in class AbstractConfigurationprotected void addPropertyDirect(String key, Object token)
addPropertyDirect in class AbstractConfigurationkey - The Key to add the property to.token - The Value to add.protected Object getPropertyInternal(String key)
getPropertyInternal in class AbstractConfigurationkey - key to use for mappingprotected Iterator<String> getKeysInternal()
AbstractConfigurationgetKeys(), it has to be defined by concrete subclasses.getKeysInternal in class AbstractConfigurationIterator with all property keys in this configurationprotected Iterator<String> getKeysInternal(String key)
AbstractConfigurationIterator with all property keys starting with the specified prefix. This method is called by
AbstractConfiguration.getKeys(String). It is fully implemented by delegating to getKeysInternal() and returning a special
iterator which filters for the passed in prefix. Subclasses can override it if they can provide a more efficient way
to iterate over specific keys only.getKeysInternal in class AbstractConfigurationkey - the prefix for the keys to be taken into accountIterator returning the filtered keysprotected boolean isEmptyInternal()
AbstractConfigurationisEmpty(). It has to be
defined by concrete subclasses.isEmptyInternal in class AbstractConfigurationprotected void clearPropertyDirect(String key)
AbstractConfigurationclearProperty() after it has
done some preparations. It must be overridden in sub classes.clearPropertyDirect in class AbstractConfigurationkey - the key to be removedprotected boolean containsKeyInternal(String key)
AbstractConfigurationcontainsKey(). It has to be defined by concrete subclasses.containsKeyInternal in class AbstractConfigurationkey - the key in questionpublic List<Object> getList(String key, List<?> defaultValue)
ImmutableConfigurationgetList in interface ImmutableConfigurationgetList in class AbstractConfigurationkey - The configuration key.defaultValue - The default value.ImmutableConfiguration.getList(Class, String, List)public String[] getStringArray(String key)
AbstractConfigurationListDelimiterHandler is consulted to find out whether the string can be split into multiple values.getStringArray in interface ImmutableConfigurationgetStringArray in class AbstractConfigurationkey - The configuration key.AbstractConfiguration.setListDelimiterHandler(ListDelimiterHandler)public Configuration getConfiguration(int index)
index - The index of the configuration to retrievepublic Configuration getInMemoryConfiguration()
public Object clone()
clone in class BaseEventSourcepublic void setListDelimiterHandler(ListDelimiterHandler listDelimiterHandler)
Sets the ListDelimiterHandler to be used by this instance. This object is invoked every time when dealing
with string properties that may contain a list delimiter and thus have to be split to multiple values. Per default, a
ListDelimiterHandler implementation is set which does not support list splitting. This can be changed for
instance by setting a DefaultListDelimiterHandler object.
Warning: Be careful when changing the list delimiter handler when the configuration has already been loaded/populated. List handling is typically applied already when properties are added to the configuration. If later another handler is set which processes lists differently, results may be unexpected; some operations may even cause exceptions.
This implementation ensures that the in memory configuration is correctly initialized.setListDelimiterHandler in class AbstractConfigurationlistDelimiterHandler - the ListDelimiterHandler to be used (must not be null)public Configuration getSource(String key)
IllegalArgumentException is thrown. In this case the source configuration cannot be determined.key - the key to be checkedIllegalArgumentException - if the source configuration cannot be determinedCopyright © 2001–2022 The Apache Software Foundation. All rights reserved.