a small bugfix
[mir.git] / source / mir / config / MirPropertiesConfiguration.java
1 /*
2  * Copyright (C) 2001, 2002  The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
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.
10  *
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.
15  *
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
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with the com.oreilly.servlet library, any library
22  * licensed under the Apache Software License, The Sun (tm) Java Advanced
23  * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24  * the above that use the same license as the above), and distribute linked
25  * combinations including the two.  You must obey the GNU General Public
26  * License in all respects for all of the code used other than the above
27  * mentioned libraries.  If you modify this file, you may extend this exception
28  * to your version of the file, but you are not obligated to do so.  If you do
29  * not wish to do so, delete this exception statement from your version.
30  */
31 package mir.config;
32
33 import multex.Exc;
34 import multex.Failure;
35
36 import org.apache.commons.configuration.PropertiesConfiguration;
37
38 import java.io.File;
39 import java.io.FileNotFoundException;
40 import java.io.IOException;
41
42 import java.util.HashMap;
43 import java.util.Iterator;
44 import java.util.Map;
45
46 import javax.servlet.ServletContext;
47
48
49 /**
50  * @author idefix
51  */
52 public class MirPropertiesConfiguration extends PropertiesConfiguration {
53   private static MirPropertiesConfiguration instance;
54   private static ServletContext context;
55   private static String contextPath;
56
57   /**
58    * Constructor for MirPropertiesConfiguration.
59    */
60   private MirPropertiesConfiguration(ServletContext ctx, String ctxPath)
61     throws IOException {
62     super(ctx.getRealPath("/WEB-INF/etc/") + "/config.properties",
63       ctx.getRealPath("/WEB-INF/etc/") + "/default.properties");
64     this.addProperty("Home", ctx.getRealPath("/WEB-INF/") + "/");
65   }
66
67   public static synchronized MirPropertiesConfiguration instance()
68     throws PropertiesConfigExc {
69     if (instance == null) {
70       if (context == null) {
71         throw new MirPropertiesConfiguration.PropertiesConfigExc(
72           "Context was not set");
73       }
74
75       try {
76         instance = new MirPropertiesConfiguration(context, contextPath);
77       } catch (IOException e) {
78         e.printStackTrace();
79       }
80     }
81
82     return instance;
83   }
84
85   /**
86    * Sets the context.
87    * @param context The context to set
88    */
89   public static void setContext(ServletContext context) {
90     MirPropertiesConfiguration.context = context;
91   }
92
93   public Map allSettings() {
94     Iterator iterator = this.getKeys();
95     Map returnMap = new HashMap();
96
97     while (iterator.hasNext()) {
98       String key = (String) iterator.next();
99       returnMap.put(key, this.getProperty(key));
100     }
101
102     return returnMap;
103   }
104
105   /**
106    * Returns the context.
107    * @return ServletContext
108    */
109   public static ServletContext getContext() {
110     return context;
111   }
112
113   public String getStringWithHome(String key) {
114     String returnString = getString(key);
115
116     if (returnString == null) {
117       returnString = new String();
118     }
119
120     return getString("Home") + returnString;
121   }
122
123   public File getFile(String key) throws FileNotFoundException {
124     String path = getStringWithHome(key);
125     File returnFile = new File(path);
126
127     if (returnFile.exists()) {
128       return returnFile;
129     } else {
130       throw new FileNotFoundException();
131     }
132   }
133
134   /**
135    * @see org.apache.commons.configuration.Configuration#getString(java.lang.String)
136    */
137   public String getString(String key) {
138     if (super.getString(key) == null) {
139       return new String();
140     }
141
142     return super.getString(key);
143   }
144
145   /**
146    * @author idefix
147    */
148   public static class PropertiesConfigExc extends Exc {
149     /**
150      * Constructor for PropertiesConfigExc.
151      * @param arg0
152      */
153     public PropertiesConfigExc(String msg) {
154       super(msg);
155     }
156   }
157
158   /**
159    * @author idefix
160    */
161   public static class PropertiesConfigFailure extends Failure {
162     /**
163      * Constructor for PropertiesConfigExc.
164      * @param arg0
165      */
166     public PropertiesConfigFailure(String msg, Throwable cause) {
167       super(msg, cause);
168     }
169   }
170 }