KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > configuration > ConfigurationBuilderFactory


1 package org.objectweb.celtix.configuration;
2
3 import java.io.BufferedReader JavaDoc;
4 import java.io.InputStream JavaDoc;
5 import java.io.InputStreamReader JavaDoc;
6
7
8 public final class ConfigurationBuilderFactory {
9     private static final String JavaDoc DEFAULT_CONFIGURATION_BUILDER_CLASSNAME =
10         "org.objectweb.celtix.bus.configuration.CeltixConfigurationBuilder";
11     private static ConfigurationBuilder theBuilder;
12
13     private ConfigurationBuilderFactory() {
14     }
15     
16     public static ConfigurationBuilder getBuilder() {
17         return getBuilder(null);
18     }
19     public static void clearBuilder() {
20         theBuilder = null;
21     }
22
23     public static ConfigurationBuilder getBuilder(ClassLoader JavaDoc classLoader) {
24
25         if (null == theBuilder) {
26             String JavaDoc builderClass = getBuilderClass(classLoader);
27
28             // create the builder
29

30             theBuilder = createBuilder(builderClass, selectClassLoader(classLoader));
31         }
32         return theBuilder;
33     }
34
35     private static ConfigurationBuilder createBuilder(String JavaDoc className, ClassLoader JavaDoc classLoader) {
36
37         Class JavaDoc<? extends ConfigurationBuilder> builderClass;
38         try {
39             builderClass = Class.forName(className, true, classLoader)
40                 .asSubclass(ConfigurationBuilder.class);
41             return builderClass.newInstance();
42         } catch (Exception JavaDoc ex) {
43             throw new ConfigurationException(ex);
44         }
45     }
46
47     private static ClassLoader JavaDoc selectClassLoader(ClassLoader JavaDoc classLoader) {
48         ClassLoader JavaDoc ret = classLoader;
49         if (null == classLoader) {
50             ret = ConfigurationBuilderFactory.class.getClassLoader();
51         }
52         return ret;
53     }
54
55     private static String JavaDoc getBuilderClass(ClassLoader JavaDoc classLoader) throws ConfigurationException {
56
57         String JavaDoc builderClass = null;
58
59         // check system properties
60
builderClass = System.getProperty(ConfigurationBuilder.CONFIGURATION_BUILDER_CLASS_PROPERTY);
61         if (isValidBuilderClass(builderClass)) {
62             return builderClass;
63         }
64
65         try {
66             // next, check for the services stuff in the jar file
67
String JavaDoc serviceId = "META-INF/services/"
68                                + ConfigurationBuilder.CONFIGURATION_BUILDER_CLASS_PROPERTY;
69             InputStream JavaDoc is = null;
70
71             if (classLoader == null) {
72                 classLoader = Thread.currentThread().getContextClassLoader();
73             }
74
75             if (classLoader == null) {
76                 is = ClassLoader.getSystemResourceAsStream(serviceId);
77             } else {
78                 is = classLoader.getResourceAsStream(serviceId);
79             }
80             if (is != null) {
81                 BufferedReader JavaDoc rd = new BufferedReader JavaDoc(new InputStreamReader JavaDoc(is, "UTF-8"));
82                 builderClass = rd.readLine();
83                 rd.close();
84             }
85             if (isValidBuilderClass(builderClass)) {
86                 return builderClass;
87             }
88
89             // otherwise use default
90
builderClass = DEFAULT_CONFIGURATION_BUILDER_CLASSNAME;
91             return builderClass;
92         } catch (Exception JavaDoc ex) {
93             throw new ConfigurationException(ex);
94         }
95     }
96
97     private static boolean isValidBuilderClass(String JavaDoc builderClassName) {
98         return builderClassName != null && !"".equals(builderClassName);
99     }
100
101 }
102
Popular Tags