001: /* ========================================================================
002: * JCommon : a free general purpose class library for the Java(tm) platform
003: * ========================================================================
004: *
005: * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
006: *
007: * Project Info: http://www.jfree.org/jcommon/index.html
008: *
009: * This library is free software; you can redistribute it and/or modify it
010: * under the terms of the GNU Lesser General Public License as published by
011: * the Free Software Foundation; either version 2.1 of the License, or
012: * (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful, but
015: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
016: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
017: * License for more details.
018: *
019: * You should have received a copy of the GNU Lesser General Public
020: * License along with this library; if not, write to the Free Software
021: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
022: * USA.
023: *
024: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
025: * in the United States and other countries.]
026: *
027: * ---------------------------------
028: * ExtendedConfigurationWrapper.java
029: * ---------------------------------
030: * (C)opyright 2002-2005, by Thomas Morgner and Contributors.
031: *
032: * Original Author: Thomas Morgner;
033: * Contributor(s): David Gilbert (for Object Refinery Limited);
034: *
035: * $Id: ExtendedConfigurationWrapper.java,v 1.6 2006/11/20 21:36:30 taqua Exp $
036: *
037: * Changes
038: * -------
039: * 20-May-2005 : Initial version.
040: */
041:
042: package org.jfree.util;
043:
044: import java.util.Iterator;
045: import java.util.Enumeration;
046:
047: /**
048: * A wrapper for the extended configuration interface around a plain configuration.
049: *
050: * @author Thomas Morgner
051: */
052: public class ExtendedConfigurationWrapper implements
053: ExtendedConfiguration {
054: /** The base configuration. */
055: private Configuration parent;
056:
057: /**
058: * Creates a wrapper around the given configuration.
059: *
060: * @param parent the wrapped up configuration.
061: * @throws NullPointerException if the parent is null.
062: */
063: public ExtendedConfigurationWrapper(final Configuration parent) {
064: if (parent == null) {
065: throw new NullPointerException(
066: "Parent given must not be null");
067: }
068: this .parent = parent;
069: }
070:
071: /**
072: * Returns the boolean value of a given configuration property. The boolean value true
073: * is returned, if the contained string is equal to 'true'.
074: *
075: * @param name the name of the property
076: * @return the boolean value of the property.
077: */
078: public boolean getBoolProperty(final String name) {
079: return getBoolProperty(name, false);
080: }
081:
082: /**
083: * Returns the boolean value of a given configuration property. The boolean value true
084: * is returned, if the contained string is equal to 'true'. If the property is not set,
085: * the default value is returned.
086: *
087: * @param name the name of the property
088: * @param defaultValue the default value to be returned if the property is not set
089: * @return the boolean value of the property.
090: */
091: public boolean getBoolProperty(final String name,
092: final boolean defaultValue) {
093: return "true".equals(parent.getConfigProperty(name, String
094: .valueOf(defaultValue)));
095: }
096:
097: /**
098: * Returns a given property as int value. Zero is returned if the
099: * property value is no number or the property is not set.
100: *
101: * @param name the name of the property
102: * @return the parsed number value or zero
103: */
104: public int getIntProperty(final String name) {
105: return getIntProperty(name, 0);
106: }
107:
108: /**
109: * Returns a given property as int value. The specified default value is returned if the
110: * property value is no number or the property is not set.
111: *
112: * @param name the name of the property
113: * @param defaultValue the value to be returned if the property is no integer value
114: * @return the parsed number value or the specified default value
115: */
116: public int getIntProperty(final String name, final int defaultValue) {
117: final String retval = parent.getConfigProperty(name);
118: if (retval == null) {
119: return defaultValue;
120: }
121: try {
122: return Integer.parseInt(retval);
123: } catch (Exception e) {
124: return defaultValue;
125: }
126: }
127:
128: /**
129: * Checks, whether a given property is defined.
130: *
131: * @param name the name of the property
132: * @return true, if the property is defined, false otherwise.
133: */
134: public boolean isPropertySet(final String name) {
135: return parent.getConfigProperty(name) != null;
136: }
137:
138: /**
139: * Returns all keys with the given prefix.
140: *
141: * @param prefix the prefix
142: * @return the iterator containing all keys with that prefix
143: */
144: public Iterator findPropertyKeys(final String prefix) {
145: return parent.findPropertyKeys(prefix);
146: }
147:
148: /**
149: * Returns the configuration property with the specified key.
150: *
151: * @param key the property key.
152: * @return the property value.
153: */
154: public String getConfigProperty(final String key) {
155: return parent.getConfigProperty(key);
156: }
157:
158: /**
159: * Returns the configuration property with the specified key (or the specified default
160: * value if there is no such property).
161: * <p/>
162: * If the property is not defined in this configuration, the code will lookup the
163: * property in the parent configuration.
164: *
165: * @param key the property key.
166: * @param defaultValue the default value.
167: * @return the property value.
168: */
169: public String getConfigProperty(final String key,
170: final String defaultValue) {
171: return parent.getConfigProperty(key, defaultValue);
172: }
173:
174: public Enumeration getConfigProperties() {
175: return parent.getConfigProperties();
176: }
177:
178: public Object clone() throws CloneNotSupportedException {
179: ExtendedConfigurationWrapper wrapper = (ExtendedConfigurationWrapper) super
180: .clone();
181: wrapper.parent = (Configuration) parent.clone();
182: return parent;
183: }
184: }
|