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; - } - } }