/* * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ package com.arsdigita.runtime; import com.arsdigita.util.parameter.AbstractParameterContext; import com.arsdigita.util.parameter.ErrorList; import org.apache.log4j.Logger; /** * AbstractConfig is a base class for groups of customizable * configuration {@link com.arsdigita.util.parameter parameters}. A * CCM Developer wishing to add a new group of configuration * parameters to his application will extend this class and provide a * public noargs constructer that registers his parameters with the * superclass. For example: * *
 * package com.arsdigita.exampleApp;
 *
 * public final class ExampleConfig extends AbstractConfig {
 *
 *     private Parameter m_string = new StringParameter
 *         ("example.string", Parameter.OPTIONAL, "default");
 *     private Parameter m_integer = new IntegerParameter
 *         ("example.integer", Parameter.OPTIONAL, new Integer(0));
 *     private Parameter m_boolean = new BooleanParameter
 *         ("example.boolean", Parameter.OPTIONAL, Boolean.TRUE);
 *
 *     public ExampleConfig() {
 *         register(m_string);
 *         register(m_integer);
 *         register(m_boolean);
 *         loadInfo();
 *     }
 *
 *     public String getString() {
 *         return (String) get(m_string);
 *     }
 *
 *     public int getInteger() {
 *         return ((Integer) get(m_integer)).intValue();
 *     }
 *
 *     public boolean getBoolean() {
 *         return Boolean.TRUE.equals(get(m_boolean));
 *     }
 *
 * }
 * 
* * When this pattern is followed, the resulting subclass of abstract * config may be used by developers writing java code to access the * values of customizable configuration parameters in a convenient and * type safe manner. In addition, the very same class is also usable * by the ccm configuration tools to allow customization and * validation of the new parameters. * * @author Justin Ross <jross@redhat.com> * @version $Id: AbstractConfig.java 287 2005-02-22 00:29:02Z sskracic $ **/ public abstract class AbstractConfig extends AbstractParameterContext { private static final Logger s_log = Logger.getLogger (AbstractConfig.class); /** * Default constructor for subclasses. */ protected AbstractConfig() {} /** * Loads this AbstractConfig object with values from the default * configuration registry. Any errors encountered during * unmarshaling and loading of configuration values are added to * the errors ErrorList. This method should not be * called from the constructor of a config object since the ccm * configuration tools need to be able to construct empty config * objects. * * @param errors The ErrorList used to record errors during * unmarshaling and loading. * * @see ConfigRegistry */ public final void load(ErrorList errors) { ConfigRegistry reg = new ConfigRegistry(); reg.load(this, errors); } /** * Invokes the {@link #load(ErrorList)} method with a new and * empty ErrorList for accumulating errors, and returns that * ErrorList. This method can be used in combination with the * {@link ErrorList#check()} method to load and assert that this * configuration object is valid in one simple idiom. For example: * *
     *     ExampleConfig conf = new ExampleConfig();
     *     conf.load().check();
     *     ...
     * 
* * @return Errors that may have been encountered during * configuration loading. * * @see #load(ErrorList) */ public final ErrorList load() { ErrorList errs = new ErrorList(); load(errs); return errs; } /** * @deprecated Use @{link #load()} instead. */ public final ErrorList load(final String resource) { return load(); } /** * @deprecated Use @{link #load()} instead. */ public final ErrorList require(final String resource) { return load(); } }