2 * Copyright (C) 2001, 2002 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 * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23 * (or with modified versions of the above that use the same license as the above),
24 * and distribute linked combinations including the two. You must obey the
25 * GNU General Public License in all respects for all of the code used other than
26 * the above mentioned libraries. If you modify this file, you may extend this
27 * exception to your version of the file, but you are not obligated to do so.
28 * If you do not wish to do so, delete this exception statement from your version.
33 import java.io.IOException;
34 import java.util.HashMap;
35 import java.util.Iterator;
38 import javax.servlet.ServletContext;
41 import multex.Failure;
43 import org.apache.commons.collections.ExtendedProperties;
48 public class MirPropertiesConfiguration extends ExtendedProperties {
49 private static MirPropertiesConfiguration instance;
50 private static ServletContext context;
55 * Constructor for MirPropertiesConfiguration.
57 private MirPropertiesConfiguration(ServletContext ctx) throws IOException {
58 //loading the defaults-config
59 super(ctx.getRealPath("/WEB-INF/") + "/default.properties");
61 //loading the user-config
62 ExtendedProperties userConfig =
63 new ExtendedProperties(ctx.getRealPath("/WEB-INF/etc/") + "/config.properties");
65 //merging them to one config while overriding the defaults
66 this.combine(userConfig);
68 home = new File(ctx.getRealPath("/WEB-INF/")+"/");
71 public static synchronized MirPropertiesConfiguration instance() {
72 if (instance == null) {
73 if (context == null) {
74 throw new Error("Context was not set");
78 instance = new MirPropertiesConfiguration(context);
80 catch (IOException e) {
81 throw new Error("cannot load configuration: " + e.toString());
91 * @param context The context to set
93 public static void setContext(ServletContext context) {
94 MirPropertiesConfiguration.context = context;
98 * Returns the context.
100 * @return ServletContext
102 public static ServletContext getContext() {
107 * Returns all properties in a Map
110 public Map allSettings() {
111 Iterator iterator = this.getKeys();
112 Map returnMap = new HashMap();
113 while (iterator.hasNext()) {
114 String key = (String) iterator.next();
115 Object o = this.getProperty(key);
117 returnMap.put(key, o);
121 if (!returnMap.containsKey("Producer.DocRoot")) {
122 returnMap.put("Producer.DocRoot", "");
129 * Return mir's home directory.
130 * Normally this is the <code>WEB-INF</code> dir of the
131 * deployed mir servlets.
133 public File getHome() {
138 * Returns a file based on a configuration setting.
140 * The file may be configured with an absolute path, or
141 * it may be a relative path.
143 * Relative paths work relative to {@link #home} :
144 * normally this is the <code>WEB-INF</code> dir in a
145 * deployed java servlet.
147 public File getFile(String aKey) {
148 String path = getString(aKey);
150 File result = new File(path);
151 if (result.isAbsolute()) {
154 return new File(home, path);
158 * @return the vlaue of this property as String
159 * @param key the key of this property
161 public String getString(String key) {
162 return getString(key, "");
167 * @return the value of this property as String
168 * @param key the key of the property
169 * @param defaultValue the default value of this property if it is null
170 * @see org.apache.commons.collections.ExtendedProperties#getString(java.lang.String, java.lang.String)
172 public String getString(String key, String defaultValue) {
173 Object object = getProperty(key);
175 if (defaultValue == null) {
180 if (object instanceof String) {
181 return (String)object;
183 return object.toString();
186 public boolean getBoolean(String aKey, boolean aDefaultValue) {
188 return getBoolean(aKey);
190 catch (Throwable t) {
191 return aDefaultValue;
195 public boolean getBoolean(String aKey) {
196 String value = getString(aKey).trim();
198 return "1".equals(value) || "y".equalsIgnoreCase(value) ||
199 "yes".equalsIgnoreCase(value) || "true".equalsIgnoreCase(value);
203 * Returns a property according to the given key
204 * @param key the key of the property
205 * @return the value of the property as Object, if no property available it returns a empty String
207 public Object getProperty(String key) {
208 if (super.getProperty(key) == null) {
212 return super.getProperty(key);
218 public static class PropertiesConfigExc extends Exc {
220 * Constructor for PropertiesConfigExc.
222 public PropertiesConfigExc(String msg) {
230 public static class PropertiesConfigFailure extends Failure {
232 * Constructor for PropertiesConfigExc.
234 public PropertiesConfigFailure(String msg, Throwable cause) {