    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements.  See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License.  You may obtain a copy of the License at
    008     *
    009     *     http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017
    018    package org.apache.commons.configuration;
    019
    020    /**
    021     * <p>A specialized SAX2 XML parser that processes configuration objects.</p>
    022     *
    023     * <p>This class mimics to be a SAX compliant XML parser. It is able to iterate
    024     * over the keys in a configuration object and to generate corresponding SAX
    025     * events. By registering a <code>ContentHandler</code> at an instance
    026     * it is possible to perform XML processing on a configuration object.</p>
    027     *
    028     * @author <a href="mailto:oliver.heger@t-online.de">Oliver Heger</a>
    029     * @version $Id: BaseConfigurationXMLReader.java 439648 2006-09-02 20:42:10Z oheger $
    030     */
    031    public class BaseConfigurationXMLReader extends ConfigurationXMLReader
    032    {
    033        /** Stores the actual configuration.*/
    034        private Configuration config;
    035
    036        /**
    037         * Creates a new instance of <code>BaseConfigurationXMLReader</code>.
    038         */
    039        public BaseConfigurationXMLReader()
    040        {
    041            super();
    042        }
    043
    044        /**
    045         * Creates a new instance of <code>BaseConfigurationXMLReader</code> and
    046         * sets the configuration object to be parsed.
    047         *
    048         * @param conf the configuration to be parsed
    049         */
    050        public BaseConfigurationXMLReader(Configuration conf)
    051        {
    052            this();
    053            setConfiguration(conf);
    054        }
    055
    056        /**
    057         * Returns the actual configuration to be processed.
    058         *
    059         * @return the actual configuration
    060         */
    061        public Configuration getConfiguration()
    062        {
    063            return config;
    064        }
    065
    066        /**
    067         * Sets the configuration to be processed.
    068         *
    069         * @param conf the configuration
    070         */
    071        public void setConfiguration(Configuration conf)
    072        {
    073            config = conf;
    074        }
    075
    076        /**
    077         * Returns the configuration to be processed.
    078         *
    079         * @return the actual configuration
    080         */
    081        public Configuration getParsedConfiguration()
    082        {
    083            return getConfiguration();
    084        }
    085
    086        /**
    087         * The main SAX event generation method. This element uses an internal
    088         * <code>HierarchicalConfigurationConverter</code> object to iterate over
    089         * all keys in the actual configuration and to generate corresponding SAX
    090         * events.
    091         */
    092        protected void processKeys()
    093        {
    094            fireElementStart(getRootName(), null);
    095            new SAXConverter().process(getConfiguration());
    096            fireElementEnd(getRootName());
    097        }
    098
    099        /**
    100         * An internally used helper class to iterate over all configuration keys
    101         * ant to generate corresponding SAX events.
    102         *
    103         */
    104        class SAXConverter extends HierarchicalConfigurationConverter
    105        {
    106            /**
    107             * Callback for the start of an element.
    108             *
    109             * @param name the element name
    110             * @param value the element value
    111             */
    112            protected void elementStart(String name, Object value)
    113            {
    114                fireElementStart(name, null);
    115                if (value != null)
    116                {
    117                    fireCharacters(value.toString());
    118                }
    119            }
    120
    121            /**
    122             * Callback for the end of an element.
    123             *
    124             * @param name the element name
    125             */
    126            protected void elementEnd(String name)
    127            {
    128                fireElementEnd(name);
    129            }
    130        }
    131    }