| PropertyManager.java |
/***************************************
* *
* JBoss: The OpenSource J2EE WebOS *
* *
* Distributable under LGPL license. *
* See terms of license at gnu.org. *
* *
***************************************/
package org.jboss.util.property;
import java.util.Map;
import java.util.Iterator;
import java.io.IOException;
import org.jboss.util.ThrowableHandler;
/**
* A more robust replacement of <tt>java.lang.System</tt> for property
* access.
*
* @version <tt>$Revision: 1.4 $</tt>
* @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
*/
public final class PropertyManager
{
/** Property reader list property name */
public static final String READER_PROPERTY_NAME = "org.jboss.util.property.reader";
/** Token which specifies the default property reader */
public static final String DEFAULT_PROPERTY_READER_TOKEN = "DEFAULT";
/** The default property reader name array */
private static final String[] DEFAULT_PROPERTY_READERS = {
DEFAULT_PROPERTY_READER_TOKEN
};
/** Default property container */
private static PropertyMap props;
/**
* Do not allow instantiation of this class.
*/
private PropertyManager() {}
/////////////////////////////////////////////////////////////////////////
// Property System Initialization //
/////////////////////////////////////////////////////////////////////////
/**
* Initialize the property system.
*/
static {
// construct default property container and initialze from system props
props = new PropertyMap();
props.putAll(System.getProperties());
// replace system props to enable notifications via System.setProperty()
System.setProperties(props);
// load properties from initial property readers
String[] readerNames = getArrayProperty(READER_PROPERTY_NAME,
DEFAULT_PROPERTY_READERS);
// construct each source and read its properties
for (int i=0; i<readerNames.length; i++) {
try {
if (readerNames[i].equals(DEFAULT_PROPERTY_READER_TOKEN)) {
load(new DefaultPropertyReader());
}
else {
load(readerNames[i]);
}
}
catch (IOException e) {
ThrowableHandler.add(e);
}
}
}
/////////////////////////////////////////////////////////////////////////
// Access to Default Map //
/////////////////////////////////////////////////////////////////////////
/**
* Get the default <tt>PropertyMap</tt>.
*
* @return Default <tt>PropertyMap</tt>.
*/
public static PropertyMap getDefaultPropertyMap() {
return props;
}
/////////////////////////////////////////////////////////////////////////
// Static Accessors to Default Property Map //
/////////////////////////////////////////////////////////////////////////
/**
* Add a property listener.
*
* @param listener Property listener to add.
*/
public static void addPropertyListener(final PropertyListener listener) {
props.addPropertyListener(listener);
}
/**
* Add an array of property listeners.
*
* @param listeners Array of property listeners to add.
*/
public static void addPropertyListeners(final PropertyListener[] listeners)
{
props.addPropertyListeners(listeners);
}
/**
* Remove a property listener.
*
* @param listener Property listener to remove.
* @return True if listener was removed.
*/
public static boolean removePropertyListener(final PropertyListener listener)
{
return props.removePropertyListener(listener);
}
/**
* Load properties from a map.
*
* @param prefix Prefix to append to all map keys (or <tt>null</tt>).
* @param map Map containing properties to load.
*/
public static void load(final String prefix,
final Map map)
throws PropertyException
{
props.load(prefix, map);
}
/**
* Load properties from a map.
*
* @param map Map containing properties to load.
*/
public static void load(final Map map)
throws PropertyException, IOException
{
props.load(map);
}
/**
* Load properties from a <tt>PropertyReader</tt>.
*
* @param reader <tt>PropertyReader</tt> to read properties from.
*/
public static void load(final PropertyReader reader)
throws PropertyException, IOException
{
props.load(reader);
}
/**
* Load properties from a <tt>PropertyReader</tt> specifed by the
* given class name.
*
* @param classname Class name of a <tt>PropertyReader</tt> to
* read from.
*/
public static void load(final String classname)
throws PropertyException, IOException
{
props.load(classname);
}
/**
* Set a property.
*
* @param name Property name.
* @param value Property value.
* @return Previous property value or <tt>null</tt>.
*/
public static String setProperty(final String name, final String value) {
return (String)props.setProperty(name, value);
}
/**
* Remove a property.
*
* @param name Property name.
* @return Removed property value or <tt>null</tt>.
*/
public static String removeProperty(final String name) {
return props.removeProperty(name);
}
/**
* Get a property.
*
* @param name Property name.
* @param defaultValue Default property value.
* @return Property value or default.
*/
public static String getProperty(final String name,
final String defaultValue)
{
return props.getProperty(name, defaultValue);
}
/**
* Get a property.
*
* @param name Property name.
* @return Property value or <tt>null</tt>.
*/
public static String getProperty(final String name) {
return props.getProperty(name);
}
/**
* Get an array style property.
*
* @param base Base property name.
* @param defaultValues Default property values.
* @return Array of property values or default.
*/
public static String[] getArrayProperty(final String base,
final String[] defaultValues)
{
return props.getArrayProperty(base, defaultValues);
}
/**
* Get an array style property.
*
* @param name Property name.
* @return Array of property values or empty array.
*/
public static String[] getArrayProperty(final String name) {
return props.getArrayProperty(name);
}
/**
* Return an iterator over all contained property names.
*
* @return Property name iterator.
*/
public static Iterator names() {
return props.names();
}
/**
* Check if this map contains a given property.
*
* @param name Property name.
* @return True if contains property.
*/
public static boolean containsProperty(final String name) {
return props.containsProperty(name);
}
/**
* Get a property group for the given property base.
*
* @param basename Base property name.
* @return Property group.
*/
public static PropertyGroup getPropertyGroup(final String basename) {
return props.getPropertyGroup(basename);
}
/**
* Get a property group for the given property base at the given index.
*
* @param basename Base property name.
* @param index Array property index.
* @return Property group.
*/
public static PropertyGroup getPropertyGroup(final String basename,
final int index)
{
return props.getPropertyGroup(basename, index);
}
}
| PropertyManager.java |