/* * Copyright 2006 Le Duc Bao, Ralf Joachim * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.castor.ddlgen; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Enumeration; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Handle the configuration for DDL generator including load configuration files, * manage configuration values. * * @author <a href="mailto:leducbao AT gmail DOT com">Le Duc Bao</a> * @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a> * @version $Revision: 5951 $ $Date: 2006-04-25 16:09:10 -0600 (Tue, 25 Apr 2006) $ * @since 1.1 */ public class Configuration { //-------------------------------------------------------------------------- /** The <a href="http://jakarta.apache.org/commons/logging/">Jakarta * Commons Logging</a> instance used for all logging. */ private static final Log LOG = LogFactory.getLog(Configuration.class); /** String representation of boolean <code>true</code>. */ public static final String TRUE = "true"; /** String representation of boolean <code>false</code>. */ public static final String FALSE = "false"; //-------------------------------------------------------------------------- /** * handle configuration. */ private final Properties _conf = new Properties(); //-------------------------------------------------------------------------- /** * Constructor for Configuration. */ public Configuration() { super(); addProperties(System.getProperties()); } //-------------------------------------------------------------------------- /** * get boolean value associated with key in the configuration files. * * @param key key * @return return value associated with key. If not exists, throw an * exception * @throws WrongFormatException format error * @throws KeyNotFoundException key error */ public final boolean getBoolValue(final String key) throws WrongFormatException, KeyNotFoundException { String value = this.getStringValue(key); if (value == null) { throw new KeyNotFoundException("can not found key " + key); } if (TRUE.equals(value)) { return true; } if (FALSE.equals(value)) { return false; } throw new WrongFormatException("require boolean (true/false), receive " + value + " for key=" + key); } /** * get boolean value associated with key in the configuration files. * * @param key key * @param defaultValue default value * @return return value associated with key. If not exists, return the default value */ public final boolean getBoolValue(final String key, final boolean defaultValue) { String value = null; try { value = this.getStringValue(key); } catch (KeyNotFoundException e) { return defaultValue; } if (value == null) { return defaultValue; } if (TRUE.equals(value)) { return true; } if (FALSE.equals(value)) { return false; } return defaultValue; } /** * Get property with given name as Integer value. If property is not * available or can not be interpreted as integer null will be returned. * * @param name Name of the property. * @return The configured Integer property or null if property is not * available or can not be interpreted as integer. */ public final Integer getInteger(final String name) { String value = _conf.getProperty(name); if (value == null) { return null; } try { return Integer.valueOf(value); } catch (NumberFormatException ex) { return null; } } /** * get String value associated with key in the configuration files. * * @param key key * @return return value associated with key. If not exists, throw an * exception * @throws KeyNotFoundException key error */ public final String getStringValue(final String key) throws KeyNotFoundException { String value = (String) _conf.get(key); if (value == null || "".equals(value)) { throw new KeyNotFoundException( "Can not find value correspondence to " + key); } return value; } /** * get String value associated with key in the configuration files. * * @param key key * @param defaultValue default value * @return return value associated with key. If not exists, return default * value */ public final String getStringValue(final String key, final String defaultValue) { String value = (String) _conf.get(key); if (value == null || "".equals(value)) { value = defaultValue; } return value; } /** * add properties (key, value) for configuration, the existed item will * be overwrited. * @param props properties */ public final void addProperties(final Properties props) { if (props != null) { Object key; Object value; for (Enumeration<Object> e = props.keys(); e.hasMoreElements(); ) { key = e.nextElement(); value = props.get(key); _conf.put(key, value); } } } /** * add properties (key, value) for configuration, the existed item will * be overwrited. * * @param filename a properties file * @throws GeneratorException generator error */ public final void addProperties(final String filename) throws GeneratorException { Properties props = new Properties(); URL url = null; try { try { url = new URL(filename); } catch (MalformedURLException ex) { url = getClass().getClassLoader().getResource(filename); } if (url != null) { props.load(url.openStream()); addProperties(props); } else { String msg = "Could not obtain the configuration file '" + filename + "' from the Castor JAR."; LOG.error(msg); throw new GeneratorException(msg); } } catch (IOException ex) { String msg = "Could not read the configuration file '" + url.toExternalForm() + "' from the Castor JAR."; LOG.error(msg, ex); throw new GeneratorException(msg, ex); } } /** * set property value, this will overwrite the loaded value. * * @param key key * @param value value */ public final void setProperty(final String key, final String value) { _conf.put(key, value); } //-------------------------------------------------------------------------- }