KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > configuration > impl > ConfigurationBuilderImpl


1 package org.objectweb.celtix.configuration.impl;
2
3 import java.io.IOException JavaDoc;
4 import java.io.InputStream JavaDoc;
5 import java.util.HashMap JavaDoc;
6 import java.util.Map JavaDoc;
7 import java.util.ResourceBundle JavaDoc;
8
9 import org.objectweb.celtix.common.i18n.BundleUtils;
10 import org.objectweb.celtix.common.i18n.Message;
11 import org.objectweb.celtix.configuration.Configuration;
12 import org.objectweb.celtix.configuration.ConfigurationBuilder;
13 import org.objectweb.celtix.configuration.ConfigurationException;
14 import org.objectweb.celtix.configuration.ConfigurationMetadata;
15 import org.objectweb.celtix.resource.DefaultResourceManager;
16
17 public class ConfigurationBuilderImpl implements ConfigurationBuilder {
18     protected static final ResourceBundle JavaDoc BUNDLE =
19         BundleUtils.getBundle(ConfigurationBuilderImpl.class);
20
21     protected Map JavaDoc<String JavaDoc, Map JavaDoc<String JavaDoc, Configuration>> configurations;
22     private Map JavaDoc<String JavaDoc, ConfigurationMetadata> models;
23
24
25     public ConfigurationBuilderImpl() {
26         models = new HashMap JavaDoc<String JavaDoc, ConfigurationMetadata>();
27         configurations = new HashMap JavaDoc<String JavaDoc, Map JavaDoc<String JavaDoc, Configuration>>();
28
29         /*
30         add("config-metadata/bus-config.xml");
31         add("config-metadata/endpoint-config.xml");
32         add("config-metadata/http-client-config.xml");
33         add("config-metadata/http-listener-config.xml");
34         add("config-metadata/http-server-config.xml");
35         add("config-metadata/port-config.xml");
36         add("config-metadata/service-config.xml");
37         */

38     }
39
40     public Configuration getConfiguration(String JavaDoc namespaceUri, String JavaDoc id) {
41         Map JavaDoc<String JavaDoc, Configuration> instances = configurations.get(namespaceUri);
42         if (null == instances) {
43             if (null == getModel(namespaceUri)) {
44                 throw new ConfigurationException(new Message("UNKNOWN_NAMESPACE_EXC", BUNDLE, namespaceUri));
45             }
46             return null;
47         }
48         return instances.get(id);
49     }
50
51     public Configuration getConfiguration(String JavaDoc namespaceUri, String JavaDoc id, Configuration parent) {
52         if (parent == null) {
53             return null;
54         }
55
56         Configuration c = parent.getChild(namespaceUri, id);
57         if (null == c && null == getModel(namespaceUri)) {
58             throw new ConfigurationException(new Message("UNKNOWN_NAMESPACE_EXC", BUNDLE, namespaceUri));
59         }
60         return c;
61     }
62
63     public Configuration buildConfiguration(String JavaDoc namespaceUri, String JavaDoc id, Configuration parent) {
64         ConfigurationMetadata model = getModel(namespaceUri);
65         if (null == model) {
66             throw new ConfigurationException(new Message("UNKNOWN_NAMESPACE_EXC", BUNDLE, namespaceUri));
67         }
68         /*
69         if (parent != null && !isValidChildConfiguration(model, parent)) {
70             throw new ConfigurationException(new Message("INVALID_CHILD_CONFIGURATION",
71                                                          BUNDLE, namespaceUri,
72                                                          parent.getModel().getNamespaceURI()));
73         }
74         */

75         if (parent == null && !isValidTopConfiguration(model, parent)) {
76             throw new ConfigurationException(new Message("INVALID_TOP_CONFIGURATION",
77                                                          BUNDLE, namespaceUri));
78         }
79
80         Configuration c = new AbstractConfigurationImpl(model, id, parent);
81         if (null == parent) {
82             Map JavaDoc<String JavaDoc, Configuration> instances = configurations.get(namespaceUri);
83             if (null == instances) {
84                 instances = new HashMap JavaDoc<String JavaDoc, Configuration>();
85                 configurations.put(namespaceUri, instances);
86             }
87             instances.put(id, c);
88         }
89         return c;
90     }
91
92     /* The presence of parentNamespaceURI means that the underlying type of
93      * configuration can only be created as a child of a configuration with
94      * namespace 'parentNamespace'. The absence of this attribute means that it
95      * can be be created as a top level configuration object
96      **/

97     protected boolean isValidTopConfiguration(ConfigurationMetadata model, Configuration parent) {
98         String JavaDoc parentNamespaceURI = model.getParentNamespaceURI();
99
100         if (parentNamespaceURI == null || "".equals(parentNamespaceURI)) {
101             return true;
102         }
103
104         return false;
105     }
106
107     /*
108     private boolean isValidChildConfiguration(ConfigurationMetadata model, Configuration parent) {
109         if (parent != null && parent.getModel().getNamespaceURI().equals(model.getParentNamespaceURI())) {
110             return true;
111         }
112
113         return false;
114     }
115     */

116
117     public Configuration buildConfiguration(String JavaDoc namespaceUri, String JavaDoc id) {
118         return buildConfiguration(namespaceUri, id, null);
119     }
120
121     public final void addModel(ConfigurationMetadata model) {
122         models.put(model.getNamespaceURI(), model);
123     }
124
125     public ConfigurationMetadata getModel(String JavaDoc namespaceUri) {
126         return models.get(namespaceUri);
127     }
128
129     public void addModel(String JavaDoc resource) {
130
131         InputStream JavaDoc is = null;
132         if (resource != null) {
133             is = loadResource(resource);
134             if (is == null) {
135                 throw new ConfigurationException(new Message("METADATA_RESOURCE_EXC",
136                                                              BUNDLE, resource));
137             }
138         }
139
140         ConfigurationMetadata model = null;
141         ConfigurationMetadataBuilder builder = new ConfigurationMetadataBuilder(true);
142         if (null != is) {
143             try {
144                 model = builder.build(is);
145             } catch (IOException JavaDoc ex) {
146                 throw new ConfigurationException(new Message("METADATA_RESOURCE_EXC",
147                                                              BUNDLE, resource), ex);
148             }
149         } else {
150             model = new ConfigurationMetadataImpl();
151         }
152
153         addModel(model);
154     }
155
156     private InputStream JavaDoc loadResource(String JavaDoc resourceName) {
157         return DefaultResourceManager.instance().getResourceAsStream(resourceName);
158     }
159 }
160
Popular Tags