the new config-class based on apache.commons.config
[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  
32 package mir.config;
33
34 import java.io.File;
35 import java.io.FileNotFoundException;
36 import java.io.IOException;
37 import java.util.HashMap;
38 import java.util.Iterator;
39 import java.util.Map;
40
41 import javax.servlet.ServletContext;
42
43 import multex.Exc;
44 import multex.Failure;
45
46 import org.apache.commons.configuration.PropertiesConfiguration;
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     this.addProperty("RootUri", ctxPath);
66         }
67
68   public static synchronized MirPropertiesConfiguration instance()
69         throws PropertiesConfigExc {
70     if(instance == null){
71       if(context == null || contextPath == null || contextPath.length() == 0){
72         throw new MirPropertiesConfiguration.PropertiesConfigExc("Context was not set");
73       }
74       try {
75         instance = new MirPropertiesConfiguration(context,contextPath);
76       } catch (IOException e) {
77         e.printStackTrace();
78       }                              
79     }
80     return instance;
81   }
82
83   /**
84    * Sets the context.
85    * @param context The context to set
86    */
87   public static void setContext(ServletContext context) {
88     MirPropertiesConfiguration.context = context;
89   }
90   
91   /**
92    * Sets the contextPath.
93    * @param contextPath The contextPath to set
94    */
95   public static void setContextPath(String contextPath) {
96     MirPropertiesConfiguration.contextPath = contextPath;
97   }
98   
99   public Map allSettings(){
100                 Iterator iterator = this.getKeys();
101                 Map returnMap = new HashMap();
102                 while(iterator.hasNext()){
103                   String key = (String)iterator.next();
104                         returnMap.put(key,this.getProperty(key));                       
105                 }
106     return returnMap;
107   }
108
109
110   /**
111    * Returns the context.
112    * @return ServletContext
113    */
114   public static ServletContext getContext() {
115     return context;
116   }
117         
118         public String getStringWithHome(String key){
119           String returnString = getString(key);
120           if(returnString == null){
121             returnString = new String();
122           }
123           return getString("Home") + returnString;
124         }
125         
126         public File getFile(String key) throws FileNotFoundException{
127           String path = getStringWithHome(key);
128           File returnFile = new File(path);
129           if(returnFile.exists()){
130             return returnFile; 
131           } else {
132             throw new FileNotFoundException();
133           }
134         }
135         
136   /**
137    * @see org.apache.commons.configuration.Configuration#getString(java.lang.String)
138    */
139   public String getString(String key) {
140     if(super.getString(key) == null){
141       return new String();
142     }
143     return super.getString(key);
144   }
145   
146   /**
147    * @author idefix
148    */
149   public static class PropertiesConfigExc extends Exc {
150
151     /**
152      * Constructor for PropertiesConfigExc.
153      * @param arg0
154      */
155     public PropertiesConfigExc(String msg) {
156       super(msg);
157     }
158   }
159
160   /**
161    * @author idefix
162    */
163   public static class PropertiesConfigFailure extends Failure {
164
165     /**
166      * Constructor for PropertiesConfigExc.
167      * @param arg0
168      */
169     public PropertiesConfigFailure(String msg, Throwable cause) {
170       super(msg,cause);
171     }
172   }
173
174 }