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.
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.
-
If a key is used more than once, the values are appended
like 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.excaped = 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!
addProperty
public void addProperty(String key,
Object token)
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"]
clearProperty
public void clearProperty(String key)
Clear a property in the configuration.
combine
public void combine(ExtendedProperties c)
Combines an existing Hashtable with this Hashtable.
Warning: It will overwrite previous entries without warning.
convertProperties
public static ExtendedProperties convertProperties(Properties p)
Convert a standard properties class into a configuration
class.
p
- properties object to convert into
a ExtendedProperties object.
- ExtendedProperties configuration created from the
properties object.
display
public void display()
Display the configuration for debugging
purposes.
getBoolean
public boolean getBoolean(String key)
Get a boolean associated with the given configuration key.
key
- The configuration key.
getBoolean
public Boolean getBoolean(String key,
Boolean defaultValue)
Get a boolean associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
- The associated boolean if key is found and has valid
format, default value otherwise.
getBoolean
public boolean getBoolean(String key,
boolean defaultValue)
Get a boolean associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
getByte
public byte getByte(String key)
Get a byte associated with the given configuration key.
key
- The configuration key.
getByte
public Byte getByte(String key,
Byte defaultValue)
Get a byte associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
- The associated byte if key is found and has valid
format, default value otherwise.
getByte
public byte getByte(String key,
byte defaultValue)
Get a byte associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
getDouble
public double getDouble(String key)
Get a double associated with the given configuration key.
key
- The configuration key.
getDouble
public Double getDouble(String key,
Double defaultValue)
Get a double associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
- The associated double if key is found and has valid
format, default value otherwise.
getDouble
public double getDouble(String key,
double defaultValue)
Get a double associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
getFloat
public float getFloat(String key)
Get a float associated with the given configuration key.
key
- The configuration key.
getFloat
public Float getFloat(String key,
Float defaultValue)
Get a float associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
- The associated float if key is found and has valid
format, default value otherwise.
getFloat
public float getFloat(String key,
float defaultValue)
Get a float associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
getInclude
public String getInclude()
Gets the property value for including other properties files.
By default it is "include".
getInt
public int getInt(String name)
The purpose of this method is to get the configuration resource
with the given name as an integer.
name
- The resource name.
- The value of the resource as an integer.
getInt
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.
name
- The resource namedef
- The default value of the resource.
- The value of the resource as an integer.
getInteger
public int getInteger(String key)
Get a int associated with the given configuration key.
key
- The configuration key.
getInteger
public Integer getInteger(String key,
Integer defaultValue)
Get a int associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
- The associated int if key is found and has valid
format, default value otherwise.
getInteger
public int getInteger(String key,
int defaultValue)
Get a int associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
getKeys
public Iterator getKeys()
Get the list of the keys contained in the configuration
repository.
getKeys
public Iterator getKeys(String prefix)
Get the list of the keys contained in the configuration
repository that match the specified prefix.
prefix
- The prefix to test against.
- An Iterator of keys that match the prefix.
getLong
public long getLong(String key)
Get a long associated with the given configuration key.
key
- The configuration key.
getLong
public Long getLong(String key,
Long defaultValue)
Get a long associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
- The associated long if key is found and has valid
format, default value otherwise.
getLong
public long getLong(String key,
long defaultValue)
Get a long associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
getProperties
public Properties getProperties(String key)
Get a list of properties associated with the given
configuration key.
key
- The configuration key.
- The associated properties if key is found.
getProperties
public Properties getProperties(String key,
Properties defaults)
Get a list of properties associated with the given
configuration key.
key
- The configuration key.
- The associated properties if key is found.
getProperty
public Object getProperty(String key)
Gets a property from the configuration.
key
- property to retrieve
- value as object. Will return user value if exists,
if not then default value if exists, otherwise null
getShort
public short getShort(String key)
Get a short associated with the given configuration key.
key
- The configuration key.
getShort
public Short getShort(String key,
Short defaultValue)
Get a short associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
- The associated short if key is found and has valid
format, default value otherwise.
getShort
public short getShort(String key,
short defaultValue)
Get a short associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
getString
public String getString(String key)
Get a string associated with the given configuration key.
key
- The configuration key.
getString
public String getString(String key,
String defaultValue)
Get a string associated with the given configuration key.
key
- The configuration key.defaultValue
- The default value.
- The associated string if key is found,
default value otherwise.
getStringArray
public String[] getStringArray(String key)
Get an array of strings associated with the given configuration
key.
key
- The configuration key.
- The associated string array if key is found.
getVector
public Vector getVector(String key)
Get a Vector of strings associated with the given configuration
key.
key
- The configuration key.
getVector
public Vector getVector(String key,
Vector defaultValue)
Get a Vector of strings associated with the given configuration
key.
key
- The configuration key.defaultValue
- The default value.
interpolate
protected String interpolate(String base)
isInitialized
public boolean isInitialized()
Indicate to client code whether property
resources have been initialized or not.
load
public void load(InputStream input)
throws IOException
Load the properties from the given input stream.
load
public void load(InputStream input,
String enc)
throws IOException
Load the properties from the given input stream
and using the specified encoding.
input
- An InputStream.enc
- An encoding.
save
public void save(OutputStream output,
String Header)
throws IOException
Save the properties to the given outputstream.
output
- An OutputStream.
setInclude
public void setInclude(String inc)
Sets the property value for including other properties files.
By default it is "include".
setProperty
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).
subset
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.
testBoolean
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.
true
or false
if the supplied
text maps to a boolean value, or null
otherwise.