KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nemesis > forum > config > ConfigLoader


1 package org.nemesis.forum.config;
2 import java.io.InputStream JavaDoc;
3
4 import org.apache.commons.digester.Digester;
5 import org.apache.commons.logging.Log;
6 import org.apache.commons.logging.LogFactory;
7
8 /**
9  * @author dlaurent
10  *
11  * Loads up nemesis-forum-config.xml and
12  * returns a singleton instance of Config.
13  *
14  * usage: ConfigLoader.getInstance().getConfig()
15  */

16 public class ConfigLoader {
17     private static Log log=LogFactory.getLog(ConfigLoader.class);
18     
19     private static Object JavaDoc lockObject = new Object JavaDoc();
20
21     private Config config;
22
23     private static ConfigLoader singleton;
24
25     private ConfigLoader() {
26     }
27
28     public static ConfigLoader getInstance() {
29         if (singleton == null) {
30             singleton = new ConfigLoader();
31         }
32         return singleton;
33     }
34
35     public Config getConfig() {
36         if (config != null) {
37             return config;
38         }
39         synchronized (lockObject) {
40
41             InputStream JavaDoc is;
42             is = getClass().getClassLoader().getResourceAsStream("nemesis-forum-config.xml");
43             if (is == null) {
44                 is = getClass().getClassLoader().getResourceAsStream("/nemesis-forum-config.xml");
45             }
46             config = new Config();
47
48             try {
49
50                 Digester digester = new Digester();
51                 digester.push(config);
52                 digester.setValidating(false);
53                 //rules
54
digester.addCallMethod("nemesis-config/db-config/provider-class", "setJDBCConnectionProviderClass", 0);
55                 digester.addCallMethod("nemesis-config/db-config/init-param", "addJDBCProviderProperties", 2);
56                 digester.addCallParam("nemesis-config/db-config/init-param/param-name", 0);
57                 digester.addCallParam("nemesis-config/db-config/init-param/param-value", 1);
58
59                 digester.addCallMethod("nemesis-config/extended-properties/user", "addUserExtendedProperties", 0);
60                 digester.addCallMethod("nemesis-config/extended-properties/forum", "addForumExtendedProperties", 0);
61                 digester.addCallMethod("nemesis-config/extended-properties/message", "addMessageExtendedProperties", 0);
62                 
63                 digester.addCallMethod("nemesis-config/auto-index", "setAutoIndex", 0, new String JavaDoc[]{"java.lang.Boolean"});
64                 
65                 //parse
66
digester.parse(is);
67                 is.close();
68
69                 //------------------
70
log.info("load config :"+config.toString());
71                 return config;
72             } catch (Exception JavaDoc e) {
73                 log.fatal("load config",e);
74                 throw new RuntimeException JavaDoc(e.getMessage());
75             }
76
77         }
78     }
79
80 }
81
Popular Tags