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.5 2006/12/03 15:33:33 taqua 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      public Enumeration getConfigProperties()
122      {
123        return keys();
124      }
125    
126      /**
127       * Sets the value of a configuration property.
128       *
129       * @param key   the property key.
130       * @param value the property value.
131       */
132      public void setConfigProperty(final String key, final String value)
133      {
134        if (value == null)
135        {
136          remove(key);
137        }
138        else
139        {
140          setProperty(key, value);
141        }
142      }
143    }