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;
37 import javax.servlet.ServletContext;
40 import multex.Failure;
41 import org.apache.commons.collections.ExtendedProperties;
46 public class MirPropertiesConfiguration extends ExtendedProperties {
47 private static MirPropertiesConfiguration instance;
48 private static ServletContext context;
53 * Constructor for MirPropertiesConfiguration.
55 private MirPropertiesConfiguration(ServletContext ctx) throws IOException {
56 //loading the defaults-config
57 super(ctx.getRealPath("/WEB-INF/") + "/default.properties");
59 //loading the user-config
60 ExtendedProperties userConfig =
61 new ExtendedProperties(ctx.getRealPath("/WEB-INF/etc/") + "/config.properties");
63 //merging them to one config while overriding the defaults
64 this.combine(userConfig);
66 home = new File(ctx.getRealPath("/WEB-INF/")+"/");
69 public static synchronized MirPropertiesConfiguration instance() {
70 if (instance == null) {
71 if (context == null) {
72 throw new Error("Context was not set");
76 instance = new MirPropertiesConfiguration(context);
78 catch (IOException e) {
79 throw new Error("cannot load configuration: " + e.toString());
89 * @param context The context to set
91 public static void setContext(ServletContext context) {
92 MirPropertiesConfiguration.context = context;
96 * Returns the context.
98 * @return ServletContext
100 public static ServletContext getContext() {
105 * Returns all properties in a Map
108 public Map allSettings() {
109 Iterator iterator = this.getKeys();
110 Map returnMap = new HashMap();
111 while (iterator.hasNext()) {
112 String key = (String) iterator.next();
113 Object o = this.getProperty(key);
115 returnMap.put(key, o);
119 if (!returnMap.containsKey("Producer.DocRoot")) {
120 returnMap.put("Producer.DocRoot", "");
127 * Return mir's home directory.
128 * Normally this is the <code>WEB-INF</code> dir of the
129 * deployed mir servlets.
131 public File getHome() {
136 * Returns a file based on a configuration setting.
138 * The file may be configured with an absolute path, or
139 * it may be a relative path.
141 * Relative paths work relative to {@link #home} :
142 * normally this is the <code>WEB-INF</code> dir in a
143 * deployed java servlet.
145 public File getFile(String aKey) {
146 String path = getString(aKey);
148 File result = new File(path);
149 if (result.isAbsolute()) {
153 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) {