public class

ExtendedProperties

extends Hashtable<K, V>
java.lang.Object
   ↳ java.util.Dictionary<K, V>
     ↳ java.util.Hashtable<K, V>
       ↳ org.apache.commons.collections.ExtendedProperties

Class Overview

This class extends normal Java properties by adding the possibility to use the same key many times concatenating the value strings instead of overwriting them.

Please consider using the PropertiesConfiguration class in Commons-Configuration as soon as it is released.

The Extended Properties syntax is explained here:

  • Each property has the syntax key = value
  • The key may use any character but the equal sign '='.
  • value may be separated on different lines if a backslash is placed at the end of the line that continues below.
  • If value is a list of strings, each token is separated by a comma ','.
  • Commas in each token are escaped placing a backslash right before the comma.
  • Backslashes are escaped by using two consecutive backslashes i.e. \\
  • If a key is used more than once, the values are appended as if they were on the same line separated with commas.
  • Blank lines and lines starting with character '#' are skipped.
  • If a property is named "include" (or whatever is defined by setInclude() and getInclude() and the value of that property is the full path to a file on disk, that file will be included into the ConfigurationsRepository. You can also pull in files relative to the parent configuration file. So if you have something like the following: include = additional.properties Then "additional.properties" is expected to be in the same directory as the parent configuration file. Duplicate name values will be replaced, so be careful.

Here is an example of a valid extended properties file:

      # lines starting with # are comments

      # This is the simplest property
      key = value

      # A long property may be separated on multiple lines
      longvalue = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
                  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

      # This is a property with many tokens
      tokens_on_a_line = first token, second token

      # This sequence generates exactly the same result
      tokens_on_multiple_lines = first token
      tokens_on_multiple_lines = second token

      # commas may be escaped in tokens
      commas.escaped = Hi\, what'up?
 

NOTE: this class has not been written for performance nor low memory usage. In fact, it's way slower than it could be and generates too much memory garbage. But since performance is not an issue during intialization (and there is not much time to improve it), I wrote it this way. If you don't like it, go ahead and tune it up!

Summary

Constants
String END_TOKEN
String START_TOKEN
Fields
protected String basePath Base path of the configuration file used to create this ExtendedProperties object.
protected String file The file connected to this repository (holding comments and such).
protected String fileSeparator File separator.
protected static String include This is the name of the property that can point to other properties file for including other properties files.
protected boolean isInitialized Has this configuration been intialized.
protected ArrayList keysAsListed These are the keys in the order they listed in the configuration file.
Public Constructors
ExtendedProperties()
Creates an empty extended properties object.
ExtendedProperties(String file)
Creates and loads the extended properties from the specified file.
ExtendedProperties(String file, String defaultFile)
Creates and loads the extended properties from the specified file.
Public Methods
void addProperty(String key, Object value)
Add a property to the configuration.
void clearProperty(String key)
Clear a property in the configuration.
void combine(ExtendedProperties props)
Combines an existing Hashtable with this Hashtable.
static ExtendedProperties convertProperties(Properties props)
Convert a standard properties class into a configuration class.
void display()
Display the configuration for debugging purposes to System.out.
Boolean getBoolean(String key, Boolean defaultValue)
Get a boolean associated with the given configuration key.
boolean getBoolean(String key)
Get a boolean associated with the given configuration key.
boolean getBoolean(String key, boolean defaultValue)
Get a boolean associated with the given configuration key.
byte getByte(String key)
Get a byte associated with the given configuration key.
Byte getByte(String key, Byte defaultValue)
Get a byte associated with the given configuration key.
byte getByte(String key, byte defaultValue)
Get a byte associated with the given configuration key.
Double getDouble(String key, Double defaultValue)
Get a double associated with the given configuration key.
double getDouble(String key)
Get a double associated with the given configuration key.
double getDouble(String key, double defaultValue)
Get a double associated with the given configuration key.
Float getFloat(String key, Float defaultValue)
Get a float associated with the given configuration key.
float getFloat(String key)
Get a float associated with the given configuration key.
float getFloat(String key, float defaultValue)
Get a float associated with the given configuration key.
String getInclude()
Gets the property value for including other properties files.
int getInt(String name, int def)
The purpose of this method is to get the configuration resource with the given name as an integer, or a default value.
int getInt(String name)
The purpose of this method is to get the configuration resource with the given name as an integer.
Integer getInteger(String key, Integer defaultValue)
Get a int associated with the given configuration key.
int getInteger(String key, int defaultValue)
Get a int associated with the given configuration key.
int getInteger(String key)
Get a int associated with the given configuration key.
Iterator getKeys()
Get the list of the keys contained in the configuration repository.
Iterator getKeys(String prefix)
Get the list of the keys contained in the configuration repository that match the specified prefix.
List getList(String key, List defaultValue)
Get a List of strings associated with the given configuration key.
List getList(String key)
Get a List of strings associated with the given configuration key.
Long getLong(String key, Long defaultValue)
Get a long associated with the given configuration key.
long getLong(String key)
Get a long associated with the given configuration key.
long getLong(String key, long defaultValue)
Get a long associated with the given configuration key.
Properties getProperties(String key)
Get a list of properties associated with the given configuration key.
Properties getProperties(String key, Properties defaults)
Get a list of properties associated with the given configuration key.
Object getProperty(String key)
Gets a property from the configuration.
short getShort(String key)
Get a short associated with the given configuration key.
Short getShort(String key, Short defaultValue)
Get a short associated with the given configuration key.
short getShort(String key, short defaultValue)
Get a short associated with the given configuration key.
String getString(String key, String defaultValue)
Get a string associated with the given configuration key.
String getString(String key)
Get a string associated with the given configuration key.
String[] getStringArray(String key)
Get an array of strings associated with the given configuration key.
Vector getVector(String key)
Get a Vector of strings associated with the given configuration key.
Vector getVector(String key, Vector defaultValue)
Get a Vector of strings associated with the given configuration key.
boolean isInitialized()
Indicate to client code whether property resources have been initialized or not.
void load(InputStream input)
Load the properties from the given input stream.
synchronized void load(InputStream input, String enc)
Load the properties from the given input stream and using the specified encoding.
synchronized void save(OutputStream output, String header)
Save the properties to the given output stream.
void setInclude(String inc)
Sets the property value for including other properties files.
void setProperty(String key, Object value)
Set a property, this will replace any previously set values.
ExtendedProperties subset(String prefix)
Create an ExtendedProperties object that is a subset of this one.
String testBoolean(String value)
Test whether the string represent by value maps to a boolean value or not.
Protected Methods
String interpolate(String base)
Interpolate key names to handle ${key} stuff
String interpolateHelper(String base, List priorVariables)
Recursive handler for multiple levels of interpolation.
[Expand]
Inherited Methods
From class java.util.Hashtable
From class java.util.Dictionary
From class java.lang.Object
From interface java.util.Map

Constants

protected static final String END_TOKEN

Constant Value: "}"

protected static final String START_TOKEN

Constant Value: "${"

Fields

protected String basePath

Base path of the configuration file used to create this ExtendedProperties object.

protected String file

The file connected to this repository (holding comments and such).

protected String fileSeparator

File separator.

protected static String include

This is the name of the property that can point to other properties file for including other properties files.

protected boolean isInitialized

Has this configuration been intialized.

protected ArrayList keysAsListed

These are the keys in the order they listed in the configuration file. This is useful when you wish to perform operations with configuration information in a particular order.

Public Constructors

public ExtendedProperties ()

Creates an empty extended properties object.

public ExtendedProperties (String file)

Creates and loads the extended properties from the specified file.

Parameters
file the filename to load
Throws
IOException if a file error occurs

public ExtendedProperties (String file, String defaultFile)

Creates and loads the extended properties from the specified file.

Parameters
file the filename to load
defaultFile a second filename to load default values from
Throws
IOException if a file error occurs

Public Methods

public void addProperty (String key, Object value)

Add a property to the configuration. If it already exists then the value stated here will be added to the configuration entry. For example, if resource.loader = file is already present in the configuration and you addProperty("resource.loader", "classpath") Then you will end up with a Vector like the following: ["file", "classpath"]

Parameters
key the key to add
value the value to add

public void clearProperty (String key)

Clear a property in the configuration.

Parameters
key the property key to remove along with corresponding value

public void combine (ExtendedProperties props)

Combines an existing Hashtable with this Hashtable.

Warning: It will overwrite previous entries without warning.

Parameters
props the properties to combine

public static ExtendedProperties convertProperties (Properties props)

Convert a standard properties class into a configuration class.

NOTE: From Commons Collections 3.2 this method will pick up any default parent Properties of the specified input object.

Parameters
props the properties object to convert
Returns
  • new ExtendedProperties created from props

public void display ()

Display the configuration for debugging purposes to System.out.

public Boolean getBoolean (String key, Boolean defaultValue)

Get a boolean associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated boolean if key is found and has valid format, default value otherwise.
Throws
ClassCastException is thrown if the key maps to an object that is not a Boolean.

public boolean getBoolean (String key)

Get a boolean associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated boolean.
Throws
NoSuchElementException is thrown if the key doesn't map to an existing object.
ClassCastException is thrown if the key maps to an object that is not a Boolean.

public boolean getBoolean (String key, boolean defaultValue)

Get a boolean associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated boolean.
Throws
ClassCastException is thrown if the key maps to an object that is not a Boolean.

public byte getByte (String key)

Get a byte associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated byte.
Throws
NoSuchElementException is thrown if the key doesn't map to an existing object.
ClassCastException is thrown if the key maps to an object that is not a Byte.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public Byte getByte (String key, Byte defaultValue)

Get a byte associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated byte if key is found and has valid format, default value otherwise.
Throws
ClassCastException is thrown if the key maps to an object that is not a Byte.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public byte getByte (String key, byte defaultValue)

Get a byte associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated byte.
Throws
ClassCastException is thrown if the key maps to an object that is not a Byte.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public Double getDouble (String key, Double defaultValue)

Get a double associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated double if key is found and has valid format, default value otherwise.
Throws
ClassCastException is thrown if the key maps to an object that is not a Double.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public double getDouble (String key)

Get a double associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated double.
Throws
NoSuchElementException is thrown if the key doesn't map to an existing object.
ClassCastException is thrown if the key maps to an object that is not a Double.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public double getDouble (String key, double defaultValue)

Get a double associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated double.
Throws
ClassCastException is thrown if the key maps to an object that is not a Double.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public Float getFloat (String key, Float defaultValue)

Get a float associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated float if key is found and has valid format, default value otherwise.
Throws
ClassCastException is thrown if the key maps to an object that is not a Float.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public float getFloat (String key)

Get a float associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated float.
Throws
NoSuchElementException is thrown if the key doesn't map to an existing object.
ClassCastException is thrown if the key maps to an object that is not a Float.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public float getFloat (String key, float defaultValue)

Get a float associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated float.
Throws
ClassCastException is thrown if the key maps to an object that is not a Float.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public String getInclude ()

Gets the property value for including other properties files. By default it is "include".

Returns
  • A String.

public int getInt (String name, int def)

The purpose of this method is to get the configuration resource with the given name as an integer, or a default value.

Parameters
name The resource name
def The default value of the resource.
Returns
  • The value of the resource as an integer.

public int getInt (String name)

The purpose of this method is to get the configuration resource with the given name as an integer.

Parameters
name The resource name.
Returns
  • The value of the resource as an integer.

public Integer getInteger (String key, Integer defaultValue)

Get a int associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated int if key is found and has valid format, default value otherwise.
Throws
ClassCastException is thrown if the key maps to an object that is not a Integer.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public int getInteger (String key, int defaultValue)

Get a int associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated int.
Throws
ClassCastException is thrown if the key maps to an object that is not a Integer.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public int getInteger (String key)

Get a int associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated int.
Throws
NoSuchElementException is thrown if the key doesn't map to an existing object.
ClassCastException is thrown if the key maps to an object that is not a Integer.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public Iterator getKeys ()

Get the list of the keys contained in the configuration repository.

Returns
  • an Iterator over the keys

public Iterator getKeys (String prefix)

Get the list of the keys contained in the configuration repository that match the specified prefix.

Parameters
prefix the prefix to match
Returns
  • an Iterator of keys that match the prefix

public List getList (String key, List defaultValue)

Get a List of strings associated with the given configuration key.

The list is a copy of the internal data of this object, and as such you may alter it freely.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated List.
Throws
ClassCastException is thrown if the key maps to an object that is not a List.

public List getList (String key)

Get a List of strings associated with the given configuration key.

The list is a copy of the internal data of this object, and as such you may alter it freely.

Parameters
key The configuration key.
Returns
  • The associated List object.
Throws
ClassCastException is thrown if the key maps to an object that is not a List.

public Long getLong (String key, Long defaultValue)

Get a long associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated long if key is found and has valid format, default value otherwise.
Throws
ClassCastException is thrown if the key maps to an object that is not a Long.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public long getLong (String key)

Get a long associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated long.
Throws
NoSuchElementException is thrown if the key doesn't map to an existing object.
ClassCastException is thrown if the key maps to an object that is not a Long.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public long getLong (String key, long defaultValue)

Get a long associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated long.
Throws
ClassCastException is thrown if the key maps to an object that is not a Long.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public Properties getProperties (String key)

Get a list of properties associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated properties if key is found.
Throws
ClassCastException is thrown if the key maps to an object that is not a String/List.
IllegalArgumentException if one of the tokens is malformed (does not contain an equals sign).

public Properties getProperties (String key, Properties defaults)

Get a list of properties associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated properties if key is found.
Throws
ClassCastException is thrown if the key maps to an object that is not a String/List.
IllegalArgumentException if one of the tokens is malformed (does not contain an equals sign).

public Object getProperty (String key)

Gets a property from the configuration.

Parameters
key property to retrieve
Returns
  • value as object. Will return user value if exists, if not then default value if exists, otherwise null

public short getShort (String key)

Get a short associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated short.
Throws
NoSuchElementException is thrown if the key doesn't map to an existing object.
ClassCastException is thrown if the key maps to an object that is not a Short.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public Short getShort (String key, Short defaultValue)

Get a short associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated short if key is found and has valid format, default value otherwise.
Throws
ClassCastException is thrown if the key maps to an object that is not a Short.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public short getShort (String key, short defaultValue)

Get a short associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated short.
Throws
ClassCastException is thrown if the key maps to an object that is not a Short.
NumberFormatException is thrown if the value mapped by the key has not a valid number format.

public String getString (String key, String defaultValue)

Get a string associated with the given configuration key.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated string if key is found, default value otherwise.
Throws
ClassCastException is thrown if the key maps to an object that is not a String.

public String getString (String key)

Get a string associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated string.
Throws
ClassCastException is thrown if the key maps to an object that is not a String.

public String[] getStringArray (String key)

Get an array of strings associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated string array if key is found.
Throws
ClassCastException is thrown if the key maps to an object that is not a String/List.

public Vector getVector (String key)

Get a Vector of strings associated with the given configuration key.

Parameters
key The configuration key.
Returns
  • The associated Vector.
Throws
ClassCastException is thrown if the key maps to an object that is not a Vector.

public Vector getVector (String key, Vector defaultValue)

Get a Vector of strings associated with the given configuration key.

The list is a copy of the internal data of this object, and as such you may alter it freely.

Parameters
key The configuration key.
defaultValue The default value.
Returns
  • The associated Vector.
Throws
ClassCastException is thrown if the key maps to an object that is not a Vector.

public boolean isInitialized ()

Indicate to client code whether property resources have been initialized or not.

public void load (InputStream input)

Load the properties from the given input stream.

Parameters
input the InputStream to load from
Throws
IOException if an IO error occurs

public synchronized void load (InputStream input, String enc)

Load the properties from the given input stream and using the specified encoding.

Parameters
input the InputStream to load from
enc the encoding to use
Throws
IOException if an IO error occurs

public synchronized void save (OutputStream output, String header)

Save the properties to the given output stream.

The stream is not closed, but it is flushed.

Parameters
output an OutputStream, may be null
header a textual comment to act as a file header
Throws
IOException if an IO error occurs

public void setInclude (String inc)

Sets the property value for including other properties files. By default it is "include".

Parameters
inc A String.

public void setProperty (String key, Object value)

Set a property, this will replace any previously set values. Set values is implicitly a call to clearProperty(key), addProperty(key,value).

Parameters
key the key to set
value the value to set

public ExtendedProperties subset (String prefix)

Create an ExtendedProperties object that is a subset of this one. Take into account duplicate keys by using the setProperty() in ExtendedProperties.

Parameters
prefix the prefix to get a subset for
Returns
  • a new independent ExtendedProperties

public String testBoolean (String value)

Test whether the string represent by value maps to a boolean value or not. We will allow true, on, and yes for a true boolean value, and false, off, and no for false boolean values. Case of value to test for boolean status is ignored.

Parameters
value the value to test for boolean state
Returns
  • true or false if the supplied text maps to a boolean value, or null otherwise.

Protected Methods

protected String interpolate (String base)

Interpolate key names to handle ${key} stuff

Parameters
base string to interpolate
Returns
  • returns the key name with the ${key} substituted

protected String interpolateHelper (String base, List priorVariables)

Recursive handler for multiple levels of interpolation. When called the first time, priorVariables should be null.

Parameters
base string with the ${key} variables
priorVariables serves two purposes: to allow checking for loops, and creating a meaningful exception message should a loop occur. It's 0'th element will be set to the value of base from the first call. All subsequent interpolated variables are added afterward.
Returns
  • the string with the interpolation taken care of