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     * DefaultConfiguration.java
029     * -------------------------
030     * (C)opyright 2003, 2004, by Thomas Morgner and Contributors.
031     *
032     * Original Author:  Thomas Morgner;
033     * Contributor(s):   David Gilbert (for Object Refinery Limited);
034     *
035     * $Id: DefaultConfiguration.java,v 1.6 2008/09/10 09:21:30 mungady Exp $
036     *
037     * Changes
038     * -------
039     * 04.06.2003 : Initial version (TM);
040     *
041     */
042    
043    package org.jfree.util;
044    
045    import java.util.Collections;
046    import java.util.Enumeration;
047    import java.util.Iterator;
048    import java.util.Properties;
049    import java.util.TreeSet;
050    
051    import org.jfree.base.config.ModifiableConfiguration;
052    
053    /**
054     * Default configuration.
055     *
056     * @author Thomas Morgner.
057     */
058    public class DefaultConfiguration extends Properties
059        implements ModifiableConfiguration
060    {
061    
062      /**
063       * Creates an empty property list with no default values.
064       */
065      public DefaultConfiguration()
066      {
067        super();
068      }
069    
070      /**
071       * Returns the configuration property with the specified key.
072       *
073       * @param key the property key.
074       * @return the property value.
075       */
076      public String getConfigProperty(final String key)
077      {
078        return getProperty(key);
079      }
080    
081      /**
082       * Returns the configuration property with the specified key (or the
083       * specified default value if there is no such property).
084       * <p/>
085       * If the property is not defined in this configuration, the code will
086       * lookup the property in the parent configuration.
087       *
088       * @param key          the property key.
089       * @param defaultValue the default value.
090       * @return the property value.
091       */
092      public String getConfigProperty(final String key, final String defaultValue)
093      {
094        return getProperty(key, defaultValue);
095      }
096    
097      /**
098       * Searches all property keys that start with a given prefix.
099       *
100       * @param prefix the prefix that all selected property keys should share
101       * @return the properties as iterator.
102       */
103      public Iterator findPropertyKeys(final String prefix)
104      {
105        final TreeSet collector = new TreeSet();
106        final Enumeration enum1 = keys();
107        while (enum1.hasMoreElements())
108        {
109          final String key = (String) enum1.nextElement();
110          if (key.startsWith(prefix))
111          {
112            if (collector.contains(key) == false)
113            {
114              collector.add(key);
115            }
116          }
117        }
118        return Collections.unmodifiableSet(collector).iterator();
119      }
120    
121      /**
122       * Returns an enumeration of the property keys.
123       *
124       * @return An enumeration of the property keys.
125       */
126      public Enumeration getConfigProperties()
127      {
128        return keys();
129      }
130    
131      /**
132       * Sets the value of a configuration property.
133       *
134       * @param key   the property key.
135       * @param value the property value.
136       */
137      public void setConfigProperty(final String key, final String value)
138      {
139        if (value == null)
140        {
141          remove(key);
142        }
143        else
144        {
145          setProperty(key, value);
146        }
147      }
148    }