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    import java.util.Iterator;
021    
022    import org.apache.commons.logging.Log;
023    import org.apache.commons.logging.LogFactory;
024    
025    /**
026     * A configuration based on the system properties.
027     *
028     * @author Emmanuel Bourg
029     * @version $Id: SystemConfiguration.java 1210204 2011-12-04 20:38:02Z oheger $
030     * @since 1.1
031     */
032    public class SystemConfiguration extends MapConfiguration
033    {
034        /** The logger. */
035        private static Log log = LogFactory.getLog(SystemConfiguration.class);
036    
037        /**
038         * Create a Configuration based on the system properties.
039         *
040         * @see System#getProperties
041         */
042        public SystemConfiguration()
043        {
044            super(System.getProperties());
045        }
046    
047        /**
048         * The method allows system properties to be set from a property file.
049         * @param fileName The name of the property file.
050         * @throws Exception if an error occurs.
051         * @since 1.6
052         */
053        public static void setSystemProperties(String fileName) throws Exception
054        {
055            setSystemProperties(null, fileName);
056        }
057    
058        /**
059         * The method allows system properties to be set from a property file.
060         * @param basePath The base path to look for the property file.
061         * @param fileName The name of the property file.
062         * @throws Exception if an error occurs.
063         * @since 1.6
064         */
065        public static void setSystemProperties(String basePath, String fileName) throws Exception
066        {
067            PropertiesConfiguration config = fileName.endsWith(".xml")
068                ? new XMLPropertiesConfiguration() : new PropertiesConfiguration();
069            if (basePath != null)
070            {
071                config.setBasePath(basePath);
072            }
073            config.setFileName(fileName);
074            config.load();
075            setSystemProperties(config);
076        }
077    
078        /**
079         * Set System properties from a configuration file.
080         * @param systemConfig The configuration containing the properties to be set.
081         * @since 1.6
082         */
083        public static void setSystemProperties(PropertiesConfiguration systemConfig)
084        {
085            Iterator<String> iter = systemConfig.getKeys();
086            while (iter.hasNext())
087            {
088                String key = iter.next();
089                String value = (String) systemConfig.getProperty(key);
090                if (log.isDebugEnabled())
091                {
092                    log.debug("Setting system property " + key + " to " + value);
093                }
094                System.setProperty(key, value);
095            }
096        }
097    }