X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fconfig%2FMirPropertiesConfiguration.java;h=125dff05c04ef72a3d1ff581206458cb7e92fdc6;hb=88455349028d7ecd46fe04ff8662b584c54c6143;hp=2d618e0e8c892aaff60502869eb0dcc393a9bfee;hpb=9bda4109c822999212425fba5f7cd539ec952806;p=mir.git
diff --git a/source/mir/config/MirPropertiesConfiguration.java b/source/mir/config/MirPropertiesConfiguration.java
index 2d618e0e..125dff05 100755
--- a/source/mir/config/MirPropertiesConfiguration.java
+++ b/source/mir/config/MirPropertiesConfiguration.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2001, 2002 The Mir-coders group
+ * Copyright (C) 2005 The Mir-coders group
*
* This file is part of Mir.
*
@@ -18,77 +18,62 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with the com.oreilly.servlet library, any library
- * licensed under the Apache Software License, The Sun (tm) Java Advanced
- * Imaging library (JAI), The Sun JIMI library (or with modified versions of
- * the above that use the same license as the above), and distribute linked
- * combinations including the two. You must obey the GNU General Public
- * License in all respects for all of the code used other than the above
- * mentioned libraries. If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so. If you do
- * not wish to do so, delete this exception statement from your version.
+ * the code of this program with any library licensed under the Apache Software License.
+ * You must obey the GNU General Public License in all respects for all of the code used
+ * other than the above mentioned libraries. If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
*/
package mir.config;
import multex.Exc;
import multex.Failure;
+import org.apache.commons.collections.ExtendedProperties;
-import org.apache.commons.configuration.PropertiesConfiguration;
-
+import javax.servlet.ServletContext;
import java.io.File;
-import java.io.FileNotFoundException;
import java.io.IOException;
-
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import javax.servlet.ServletContext;
-
-
/**
* @author idefix
*/
-public class MirPropertiesConfiguration extends PropertiesConfiguration {
+public class MirPropertiesConfiguration extends ExtendedProperties {
private static MirPropertiesConfiguration instance;
private static ServletContext context;
- private static String contextPath;
-
- //if one of these properties is not present a new
- //property is added with its default value;
- private static NeededProperty[] neededWithValue =
- {
- new NeededProperty("Producer.DocRoot",""),
- new NeededProperty("Producer.ImageRoot",""),
- new NeededProperty("Producer.Image.Path",""),
- new NeededProperty("Producer.Media.Path",""),
- new NeededProperty("Producer.RealMedia.Path",""),
- new NeededProperty("Producer.Image.IconPath","")
- };
+
+ private File home;
/**
* Constructor for MirPropertiesConfiguration.
*/
- private MirPropertiesConfiguration(ServletContext ctx, String ctxPath)
- throws IOException {
- super(ctx.getRealPath("/WEB-INF/etc/") + "/config.properties",
- ctx.getRealPath("/WEB-INF/") + "/default.properties");
- addProperty("Home", ctx.getRealPath("/WEB-INF/") + "/");
- checkMissing();
+ private MirPropertiesConfiguration(ServletContext ctx) throws IOException {
+ //loading the defaults-config
+ super(ctx.getRealPath("/WEB-INF/") + "/default.properties");
+
+ //loading the user-config
+ ExtendedProperties userConfig =
+ new ExtendedProperties(ctx.getRealPath("/WEB-INF/etc/") + "/config.properties");
+
+ //merging them to one config while overriding the defaults
+ this.combine(userConfig);
+
+ home = new File(ctx.getRealPath("/WEB-INF/")+"/");
}
- public static synchronized MirPropertiesConfiguration instance()
- throws PropertiesConfigExc {
+ public static synchronized MirPropertiesConfiguration instance() {
if (instance == null) {
if (context == null) {
- throw new MirPropertiesConfiguration.PropertiesConfigExc(
- "Context was not set");
+ throw new Error("Context was not set");
}
try {
- instance = new MirPropertiesConfiguration(context, contextPath);
- } catch (IOException e) {
- e.printStackTrace();
+ instance = new MirPropertiesConfiguration(context);
+ }
+ catch (IOException e) {
+ throw new Error("cannot load configuration: " + e.toString());
}
}
@@ -97,6 +82,7 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
/**
* Sets the context.
+ *
* @param context The context to set
*/
public static void setContext(ServletContext context) {
@@ -105,86 +91,116 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
/**
* Returns the context.
+ *
* @return ServletContext
*/
public static ServletContext getContext() {
return context;
}
- /**
- * Returns all properties in a Map
- * @return Map
- */
+ /**
+ * Returns all properties in a Map
+ * @return Map
+ */
public Map allSettings() {
Iterator iterator = this.getKeys();
Map returnMap = new HashMap();
-
while (iterator.hasNext()) {
String key = (String) iterator.next();
- Object o = this.getString(key);
-
- if (o == null) {
- o = new Object();
- }
+ Object o = this.getProperty(key);
returnMap.put(key, o);
}
+ // ML: hack for now
+ if (!returnMap.containsKey("Producer.DocRoot")) {
+ returnMap.put("Producer.DocRoot", "");
+ }
+
return returnMap;
}
+ /**
+ * Return mir's home directory.
+ * Normally this is the WEB-INF
dir of the
+ * deployed mir servlets.
+ */
+ public File getHome() {
+ return home;
+ }
/**
- * Returns a String-property concatenated with the home-dir of the
- * installation
- * @param key
- * @return String
+ * Returns a file based on a configuration setting.
+ *
+ * The file may be configured with an absolute path, or
+ * it may be a relative path.
+ *
+ * Relative paths work relative to {@link #home} :
+ * normally this is the WEB-INF
dir in a
+ * deployed java servlet.
*/
- public String getStringWithHome(String key) {
- String returnString = getString(key);
+ public File getFile(String aKey) {
+ String path = getString(aKey);
- if (returnString == null) {
- returnString = new String();
+ File result = new File(path);
+ if (result.isAbsolute()) {
+ return result;
}
-
- return getString("Home") + returnString;
+ return new File(home, path);
}
/**
- * Checks if one property is missing and adds a default value
+ * @return the vlaue of this property as String
+ * @param key the key of this property
*/
- private void checkMissing() {
- for (int i = 0; i < neededWithValue.length; i++) {
- if (super.getProperty(neededWithValue[i].getKey()) == null) {
- addProperty(neededWithValue[i].getKey(), neededWithValue[i].getValue());
- }
- }
+ public String getString(String key) {
+ return getString(key, "");
}
- public File getFile(String key) throws FileNotFoundException {
- String path = getStringWithHome(key);
- File returnFile = new File(path);
- if (returnFile.exists()) {
- return returnFile;
- } else {
- throw new FileNotFoundException();
+ /**
+ * @return the value of this property as String
+ * @param aKey the key of the property
+ * @param aDefaultValue the default value of this property if it is null
+ * @see org.apache.commons.collections.ExtendedProperties#getString(java.lang.String, java.lang.String)
+ */
+ public String getString(String aKey, String aDefaultValue) {
+ if (aDefaultValue == null) {
+ aDefaultValue = "";
+ }
+ Object result = getProperty(aKey);
+
+ if (result == null){
+ return aDefaultValue;
+ }
+
+ if (result instanceof String) {
+ return (String) result;
}
+
+ return result.toString();
}
- /**
- * @see org.apache.commons.configuration.Configuration#getString(java.lang.String)
- */
- public String getString(String key) {
- if (super.getString(key) == null) {
- return new String();
+ public boolean getBoolean(String aKey, boolean aDefaultValue) {
+ try {
+ return getBoolean(aKey);
+ }
+ catch (Throwable t) {
+ return aDefaultValue;
}
+ }
+
+ public boolean getBoolean(String aKey) {
+ String value = getString(aKey).trim();
- return super.getString(key);
+ return "1".equals(value) || "y".equalsIgnoreCase(value) ||
+ "yes".equalsIgnoreCase(value) || "true".equalsIgnoreCase(value);
}
/**
- * @see org.apache.commons.configuration.Configuration#getString(java.lang.String)
+ * Returns a property according to the given key
+ * @param key the key of the property
+ * @return the value of the property as Object, if no property available it returns a empty String
*/
public Object getProperty(String key) {
if (super.getProperty(key) == null) {
@@ -200,7 +216,6 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
public static class PropertiesConfigExc extends Exc {
/**
* Constructor for PropertiesConfigExc.
- * @param arg0
*/
public PropertiesConfigExc(String msg) {
super(msg);
@@ -213,33 +228,9 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
public static class PropertiesConfigFailure extends Failure {
/**
* Constructor for PropertiesConfigExc.
- * @param arg0
*/
public PropertiesConfigFailure(String msg, Throwable cause) {
super(msg, cause);
}
-
}
-
- /**
- * A Class for properties to be checked
- * @author idefix
- */
- private static class NeededProperty {
- private String _key;
- private String _value;
-
- public NeededProperty(String key, String value) {
- _key = key;
- _value = value;
- }
-
- public String getKey() {
- return _key;
- }
-
- public String getValue() {
- return _value;
- }
- }
}