Class MapConfiguration
- All Implemented Interfaces:
Cloneable
,Configuration
- Direct Known Subclasses:
EnvironmentConfiguration
,SystemConfiguration
A Map based Configuration.
This implementation of the Configuration
interface is
initialized with a java.util.Map
. The methods of the
Configuration
interface are implemented on top of the content of
this map. The following storage scheme is used:
Property keys are directly mapped to map keys, i.e. the
getProperty()
method directly performs a get()
on
the map. Analogously, setProperty()
or
addProperty()
operations write new data into the map. If a value
is added to an existing property, a java.util.List
is created,
which stores the values of this property.
An important use case of this class is to treat a map as a
Configuration
allowing access to its data through the richer
interface. This can be a bit problematic in some cases because the map may
contain values that need not adhere to the default storage scheme used by
typical configuration implementations, e.g. regarding lists. In such cases
care must be taken when manipulating the data through the
Configuration
interface, e.g. by calling
addProperty()
; results may be different than expected.
An important point is the handling of list delimiters: If delimiter parsing
is enabled (which it is per default), getProperty()
checks
whether the value of a property is a string and whether it contains the list
delimiter character. If this is the case, the value is split at the delimiter
resulting in a list. This split operation typically also involves trimming
the single values as the list delimiter character may be surrounded by
whitespace. Trimming can be disabled with the
setTrimmingDisabled(boolean)
method. The whole list splitting
behavior can be disabled using the
AbstractConfiguration.setDelimiterParsingDisabled(boolean)
method.
Notice that list splitting is only performed for single string values. If a property has multiple values, the single values are not split even if they contain the list delimiter character.
As the underlying Map
is directly used as store of the property
values, the thread-safety of this Configuration
implementation
depends on the map passed to the constructor.
Notes about type safety: For properties with multiple values this implementation
creates lists of type Object
and stores them. If a property is assigned
another value, the value is added to the list. This can cause problems if the
map passed to the constructor already contains lists of other types. This
should be avoided, otherwise it cannot be guaranteed that the application
might throw ClassCastException
exceptions later.
- Since:
- 1.1
- Version:
- $Id: MapConfiguration.java 1534429 2013-10-22 00:45:36Z henning $
- Author:
- Emmanuel Bourg
-
Field Summary
FieldsModifier and TypeFieldDescriptionThe Map decorated by this configuration.Fields inherited from class org.apache.commons.configuration.AbstractConfiguration
END_TOKEN, EVENT_ADD_PROPERTY, EVENT_CLEAR, EVENT_CLEAR_PROPERTY, EVENT_READ_PROPERTY, EVENT_SET_PROPERTY, START_TOKEN
-
Constructor Summary
ConstructorsConstructorDescriptionMapConfiguration
(Map<String, ?> map) Create a Configuration decorator around the specified Map.MapConfiguration
(Properties props) Creates a new instance ofMapConfiguration
and initializes its content from the specifiedProperties
object. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
addPropertyDirect
(String key, Object value) Adds a key/value pair to the Configuration.protected void
Removes the specified property from this configuration.clone()
Returns a copy of this object.boolean
containsKey
(String key) Check if the configuration contains the specified key.getKeys()
Get the list of the keys contained in the configuration.getMap()
Return the Map decorated by this configuration.getProperty
(String key) Gets a property from the configuration.boolean
isEmpty()
Check if the configuration is empty.boolean
Returns the flag whether trimming of property values is disabled.void
setTrimmingDisabled
(boolean trimmingDisabled) Sets a flag whether trimming of property values is disabled.Methods inherited from class org.apache.commons.configuration.AbstractConfiguration
addErrorLogListener, addProperty, append, clear, clearProperty, copy, createInterpolator, getBigDecimal, getBigDecimal, getBigInteger, getBigInteger, getBoolean, getBoolean, getBoolean, getByte, getByte, getByte, getDefaultListDelimiter, getDelimiter, getDouble, getDouble, getDouble, getFloat, getFloat, getFloat, getInt, getInt, getInteger, getInterpolator, getKeys, getList, getList, getListDelimiter, getLogger, getLong, getLong, getLong, getProperties, getProperties, getShort, getShort, getShort, getString, getString, getStringArray, getSubstitutor, interpolate, interpolate, interpolatedConfiguration, interpolateHelper, isDelimiterParsingDisabled, isScalarValue, isThrowExceptionOnMissing, resolveContainerStore, setDefaultListDelimiter, setDelimiter, setDelimiterParsingDisabled, setListDelimiter, setLogger, setProperty, setThrowExceptionOnMissing, subset
Methods inherited from class org.apache.commons.configuration.event.EventSource
addConfigurationListener, addErrorListener, clearConfigurationListeners, clearErrorListeners, createErrorEvent, createEvent, fireError, fireEvent, getConfigurationListeners, getErrorListeners, isDetailEvents, removeConfigurationListener, removeErrorListener, setDetailEvents
-
Field Details
-
map
The Map decorated by this configuration.
-
-
Constructor Details
-
MapConfiguration
Create a Configuration decorator around the specified Map. The map is used to store the configuration properties, any change will also affect the Map.- Parameters:
map
- the map
-
MapConfiguration
Creates a new instance ofMapConfiguration
and initializes its content from the specifiedProperties
object. The resulting configuration is not connected to theProperties
object, but all keys which are strings are copied (keys of other types are ignored).- Parameters:
props
- theProperties
object defining the content of this configuration- Throws:
NullPointerException
- if theProperties
object is null- Since:
- 1.8
-
-
Method Details
-
getMap
Return the Map decorated by this configuration.- Returns:
- the map this configuration is based onto
-
isTrimmingDisabled
Returns the flag whether trimming of property values is disabled.- Returns:
- true if trimming of property values is disabled; false otherwise
- Since:
- 1.7
-
setTrimmingDisabled
Sets a flag whether trimming of property values is disabled. This flag is only evaluated if list splitting is enabled. Refer to the header comment for more information about list splitting and trimming.- Parameters:
trimmingDisabled
- a flag whether trimming of property values should be disabled- Since:
- 1.7
-
getProperty
Description copied from interface:Configuration
Gets a property from the configuration. This is the most basic get method for retrieving values of properties. In a typical implementation of theConfiguration
interface the other get methods (that return specific data types) will internally make use of this method. On this level variable substitution is not yet performed. The returned object is an internal representation of the property value for the passed in key. It is owned by theConfiguration
object. So a caller should not modify this object. It cannot be guaranteed that this object will stay constant over time (i.e. further update operations on the configuration may change its internal state).- Specified by:
getProperty
in interfaceConfiguration
- Parameters:
key
- property to retrieve- Returns:
- the value to which this configuration maps the specified key, or null if the configuration contains no mapping for this key.
-
addPropertyDirect
Description copied from class:AbstractConfiguration
Adds a key/value pair to the Configuration. Override this method to provide write access to underlying Configuration store.- Specified by:
addPropertyDirect
in classAbstractConfiguration
- Parameters:
key
- key to use for mappingvalue
- object to store
-
isEmpty
Description copied from interface:Configuration
Check if the configuration is empty.- Specified by:
isEmpty
in interfaceConfiguration
- Returns:
true
if the configuration contains no property,false
otherwise.
-
containsKey
Description copied from interface:Configuration
Check if the configuration contains the specified key.- Specified by:
containsKey
in interfaceConfiguration
- Parameters:
key
- the key whose presence in this configuration is to be tested- Returns:
true
if the configuration contains a value for this key,false
otherwise
-
clearPropertyDirect
Description copied from class:AbstractConfiguration
Removes the specified property from this configuration. This method is called byclearProperty()
after it has done some preparations. It should be overridden in sub classes. This base implementation is just left empty.- Overrides:
clearPropertyDirect
in classAbstractConfiguration
- Parameters:
key
- the key to be removed
-
getKeys
Description copied from interface:Configuration
Get the list of the keys contained in the configuration. The returned iterator can be used to obtain all defined keys. Note that the exact behavior of the iterator'sremove()
method is specific to a concrete implementation. It may remove the corresponding property from the configuration, but this is not guaranteed. In any case it is no replacement for callingConfiguration.clearProperty(String)
for this property. So it is highly recommended to avoid using the iterator'sremove()
method.- Specified by:
getKeys
in interfaceConfiguration
- Returns:
- An Iterator.
-
clone
Returns a copy of this object. The returned configuration will contain the same properties as the original. Event listeners are not cloned.- Overrides:
clone
in classEventSource
- Returns:
- the copy
- Since:
- 1.3
-