image bugfixx - mir now depends on jai imagio
[mir.git] / source / mir / config / MirPropertiesConfiguration.java
index 2e39bfb..2d5c038 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001, 2002  The Mir-coders group
+ * Copyright (C) 2001, 2002 The Mir-coders group
  *
  * This file is part of Mir.
  *
  * 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,
+ * 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.
  */
 package mir.config;
 
@@ -42,27 +41,27 @@ import javax.servlet.ServletContext;
 import multex.Exc;
 import multex.Failure;
 
-import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.collections.ExtendedProperties;
 
 
 /**
  * @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 =
+  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","")
+    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", "")
   };
 
   /**
@@ -70,8 +69,13 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
    */
   private MirPropertiesConfiguration(ServletContext ctx, String ctxPath)
     throws IOException {
-    super(ctx.getRealPath("/WEB-INF/etc/") + "/config.properties",
-      ctx.getRealPath("/WEB-INF/") + "/default.properties");
+    //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);
     addProperty("Home", ctx.getRealPath("/WEB-INF/") + "/");
     checkMissing();
   }
@@ -86,8 +90,9 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
 
       try {
         instance = new MirPropertiesConfiguration(context, contextPath);
-      } catch (IOException e) {
-        e.printStackTrace();
+      }
+      catch (IOException e) {
+        throw new RuntimeException(e.toString());
       }
     }
 
@@ -110,17 +115,16 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
     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);
+      Object o = this.getProperty(key);
 
       if (o == null) {
         o = new Object();
@@ -132,7 +136,6 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
     return returnMap;
   }
 
-
   /**
    * Returns a String-property concatenated with the home-dir of the
    * installation
@@ -153,11 +156,11 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
    * Checks if one property is missing and adds a default value
    */
   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());
-                        }
-                }
+    for (int i = 0; i < neededWithValue.length; i++) {
+      if (super.getProperty(neededWithValue[i].getKey()) == null) {
+        addProperty(neededWithValue[i].getKey(), neededWithValue[i].getValue());
+      }
+    }
   }
 
   public File getFile(String key) throws FileNotFoundException {
@@ -172,17 +175,39 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
   }
 
   /**
+   * @return the vlaue of this property as String
+   * @param key the key of this property
    * @see org.apache.commons.configuration.Configuration#getString(java.lang.String)
    */
   public String getString(String key) {
-    if (super.getString(key) == null) {
-      return new String();
-    }
+    return getString(key, "");
+  }
+
 
-    return super.getString(key);
+  /**
+   * @return the value of this property as String
+   * @param key the key of the property
+   * @param defaultValue 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 key, String defaultValue) {
+    Object object = getProperty(key);
+    if(object == null){
+      if (defaultValue == null) {
+        return new String();
+      }
+      return defaultValue;
+    }
+    if (object instanceof String) {
+      return (String)object;
+    }
+    return object.toString();
   }
 
   /**
+   * 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
    * @see org.apache.commons.configuration.Configuration#getString(java.lang.String)
    */
   public Object getProperty(String key) {
@@ -217,28 +242,27 @@ public class MirPropertiesConfiguration extends PropertiesConfiguration {
     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;
-                }
-        }
+  /**
+   * 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;
+    }
+  }
 }