001    /**
002     * ========================================
003     * JFreeReport : a free Java report library
004     * ========================================
005     *
006     * Project Info:  http://reporting.pentaho.org/
007     *
008     * (C) Copyright 2000-2007, by Object Refinery Limited, Pentaho Corporation and Contributors.
009     *
010     * This library is free software; you can redistribute it and/or modify it under the terms
011     * of the GNU Lesser General Public License as published by the Free Software Foundation;
012     * either version 2.1 of the License, or (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public License along with this
019     * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020     * Boston, MA 02111-1307, USA.
021     *
022     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023     * in the United States and other countries.]
024     *
025     * ------------
026     * $Id: ConfigStorage.java 3048 2007-07-28 18:02:42Z tmorgner $
027     * ------------
028     * (C) Copyright 2000-2005, by Object Refinery Limited.
029     * (C) Copyright 2005-2007, by Pentaho Corporation.
030     */
031    
032    package org.jfree.report.modules.preferences.base;
033    
034    import org.jfree.util.Configuration;
035    
036    /**
037     * Config storage implementations are used to store a set of properties to a certain key.
038     * <p/>
039     * A valid configuration path does not contain dots, semicolons or colons.
040     * <p/>
041     * A valid path obeys to the same rules as java identifiers ..
042     *
043     * @author Thomas Morgner
044     */
045    public interface ConfigStorage
046    {
047      /**
048       * Stores the given properties on the defined path.
049       *
050       * @param configPath the path on where to store the properties.
051       * @param properties the properties which should be stored.
052       * @throws ConfigStoreException if an error occured.
053       */
054      public void store (String configPath, Configuration properties)
055              throws ConfigStoreException;
056    
057      /**
058       * Loads the properties from the given path, specifying the given properties as
059       * default.
060       *
061       * @param configPath the configuration path from where to read the properties.
062       * @param defaults   the property set that acts as fallback to provide default values.
063       * @return the loaded properties
064       *
065       * @throws ConfigStoreException if an error occured.
066       */
067      public Configuration load (String configPath, Configuration defaults)
068              throws ConfigStoreException;
069    
070      /**
071       * Tests, whether some configuration data exists for the given configuration.
072       *
073       * @param configPath the configuration path to the property storage.
074       * @return true, if there are properties under this path, false otherwise.
075       */
076      public boolean isAvailable (String configPath);
077    }