2 * Copyright (C) 2005 The Mir-coders group
4 * This file is part of Mir.
6 * Mir is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Mir is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Mir; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * In addition, as a special exception, The Mir-coders gives permission to link
21 * the code of this program with any library licensed under the Apache Software License.
22 * You must obey the GNU General Public License in all respects for all of the code used
23 * other than the above mentioned libraries. If you modify this file, you may extend this
24 * exception to your version of the file, but you are not obligated to do so.
25 * If you do not wish to do so, delete this exception statement from your version.
30 import multex.Failure;
31 import org.apache.commons.collections.ExtendedProperties;
33 import javax.servlet.ServletContext;
35 import java.io.IOException;
36 import java.util.HashMap;
37 import java.util.Iterator;
43 public class MirPropertiesConfiguration extends ExtendedProperties {
44 private static MirPropertiesConfiguration instance;
45 private static ServletContext context;
49 private MirPropertiesConfiguration(ServletContext aContext) throws IOException {
50 //loading the defaults-config
51 super(aContext.getRealPath("/WEB-INF/") + "/default.properties");
53 //loading the user-config
54 ExtendedProperties userConfig =
55 new ExtendedProperties(aContext.getRealPath("/WEB-INF/etc/") + "/config.properties");
57 //merging them to one config while overriding the defaults
58 this.combine(userConfig);
60 home = new File(aContext.getRealPath("/WEB-INF/")+"/");
63 public static synchronized MirPropertiesConfiguration instance() {
64 if (instance == null) {
65 if (context == null) {
66 throw new Error("Context was not set");
70 instance = new MirPropertiesConfiguration(context);
72 catch (IOException e) {
73 throw new Error("cannot load configuration: " + e.toString());
83 * @param context The context to set
85 public static void setContext(ServletContext context) {
86 MirPropertiesConfiguration.context = context;
90 * Returns the context.
92 * @return ServletContext
94 public static ServletContext getContext() {
99 * Returns all properties in a Map
103 public Map allSettings() {
104 Iterator iterator = this.getKeys();
105 Map returnMap = new HashMap();
106 while (iterator.hasNext()) {
107 String key = (String) iterator.next();
108 Object o = this.getProperty(key);
110 returnMap.put(key, o);
114 if (!returnMap.containsKey("Producer.DocRoot")) {
115 returnMap.put("Producer.DocRoot", "");
122 * Return mir's home directory.
123 * Normally this is the <code>WEB-INF</code> dir of the
124 * deployed mir servlets.
126 public File getHome() {
131 * Returns a file based on a configuration setting.
133 * The file may be configured with an absolute path, or
134 * it may be a relative path.
136 * Relative paths work relative to {@link #home} :
137 * normally this is the <code>WEB-INF</code> dir in a
138 * deployed java servlet.
140 public File getFile(String aKey) {
141 String path = getString(aKey);
143 File result = new File(path);
144 if (result.isAbsolute()) {
147 return new File(home, path);
151 * @return the vlaue of this property as String
152 * @param key the key of this property
154 public String getString(String key) {
155 return getString(key, "");
160 * @return the value of this property as String
161 * @param aKey the key of the property
162 * @param aDefaultValue the default value of this property if it is null
163 * @see org.apache.commons.collections.ExtendedProperties#getString(java.lang.String, java.lang.String)
165 public String getString(String aKey, String aDefaultValue) {
166 if (aDefaultValue == null) {
169 Object result = getProperty(aKey);
172 return aDefaultValue;
175 if (result instanceof String) {
176 return (String) result;
179 return result.toString();
182 public boolean getBoolean(String aKey, boolean aDefaultValue) {
184 return getBoolean(aKey);
186 catch (Throwable t) {
187 return aDefaultValue;
191 public boolean getBoolean(String aKey) {
192 String value = getString(aKey).trim();
194 return "1".equals(value) || "y".equalsIgnoreCase(value) ||
195 "yes".equalsIgnoreCase(value) || "true".equalsIgnoreCase(value);
199 * Returns a property according to the given key
200 * @param key the key of the property
201 * @return the value of the property as Object, if no property available it returns a empty String
203 public Object getProperty(String key) {
204 if (super.getProperty(key) == null) {
208 return super.getProperty(key);
214 public static class PropertiesConfigExc extends Exc {
216 * Constructor for PropertiesConfigExc.
218 public PropertiesConfigExc(String msg) {
226 public static class PropertiesConfigFailure extends Failure {
228 * Constructor for PropertiesConfigExc.
230 public PropertiesConfigFailure(String msg, Throwable cause) {