1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.config.impl.digester;
20
21 import java.io.IOException;
22 import java.io.InputStream;
23 import javax.faces.context.ExternalContext;
24
25 import org.apache.myfaces.config.FacesConfigUnmarshaller;
26 import org.apache.myfaces.config.impl.digester.elements.*;
27 import org.apache.myfaces.config.impl.FacesConfigEntityResolver;
28 import org.apache.commons.digester.Digester;
29 import org.apache.myfaces.shared.util.ClassUtils;
30 import org.xml.sax.InputSource;
31 import org.xml.sax.SAXException;
32
33
34
35
36 public class DigesterFacesConfigUnmarshallerImpl implements FacesConfigUnmarshaller<FacesConfig>
37 {
38 private Digester digester;
39
40 public DigesterFacesConfigUnmarshallerImpl(ExternalContext externalContext)
41 {
42 digester = new Digester();
43
44 digester.setValidating(false);
45 digester.setNamespaceAware(true);
46 digester.setEntityResolver(new FacesConfigEntityResolver(externalContext));
47
48 digester.setClassLoader(ClassUtils.getContextClassLoader());
49
50 digester.addObjectCreate("faces-config", FacesConfig.class);
51
52 digester.addSetProperties("faces-config", "metadata-complete", "metadataComplete");
53 digester.addSetProperties("faces-config", "version", "version");
54
55
56 digester.addCallMethod("faces-config/name", "setName", 0);
57 digester.addObjectCreate("faces-config/ordering", Ordering.class);
58 digester.addSetNext("faces-config/ordering", "setOrdering");
59 digester.addObjectCreate("faces-config/ordering/before/name", FacesConfigNameSlot.class);
60 digester.addSetNext("faces-config/ordering/before/name", "addBeforeSlot");
61 digester.addCallMethod("faces-config/ordering/before/name", "setName",0);
62 digester.addObjectCreate("faces-config/ordering/before/others", ConfigOthersSlot.class);
63 digester.addSetNext("faces-config/ordering/before/others", "addBeforeSlot");
64
65 digester.addObjectCreate("faces-config/ordering/after/name", FacesConfigNameSlot.class);
66 digester.addSetNext("faces-config/ordering/after/name", "addAfterSlot");
67 digester.addCallMethod("faces-config/ordering/after/name", "setName",0);
68 digester.addObjectCreate("faces-config/ordering/after/others", ConfigOthersSlot.class);
69 digester.addSetNext("faces-config/ordering/after/others", "addAfterSlot");
70
71 digester.addObjectCreate("faces-config/absolute-ordering", AbsoluteOrdering.class);
72 digester.addSetNext("faces-config/absolute-ordering", "setAbsoluteOrdering");
73 digester.addObjectCreate("faces-config/absolute-ordering/name", FacesConfigNameSlot.class);
74 digester.addSetNext("faces-config/absolute-ordering/name", "addOrderSlot");
75 digester.addCallMethod("faces-config/absolute-ordering/name", "setName",0);
76 digester.addObjectCreate("faces-config/absolute-ordering/others", ConfigOthersSlot.class);
77 digester.addSetNext("faces-config/absolute-ordering/others", "addOrderSlot");
78
79
80 digester.addObjectCreate("faces-config/application", Application.class);
81 digester.addSetNext("faces-config/application", "addApplication");
82 digester.addCallMethod("faces-config/application/action-listener", "addActionListener", 0);
83 digester.addCallMethod("faces-config/application/default-render-kit-id", "addDefaultRenderkitId", 0);
84 digester.addCallMethod("faces-config/application/default-validators", "setDefaultValidatorsPresent");
85 digester.addCallMethod("faces-config/application/default-validators/validator-id", "addDefaultValidatorId", 0);
86 digester.addCallMethod("faces-config/application/message-bundle", "addMessageBundle", 0);
87 digester.addCallMethod("faces-config/application/navigation-handler", "addNavigationHandler", 0);
88 digester.addCallMethod("faces-config/application/partial-traversal", "addPartialTraversal", 0);
89 digester.addCallMethod("faces-config/application/view-handler", "addViewHandler", 0);
90 digester.addCallMethod("faces-config/application/state-manager", "addStateManager", 0);
91 digester.addCallMethod("faces-config/application/property-resolver", "addPropertyResolver", 0);
92 digester.addCallMethod("faces-config/application/variable-resolver", "addVariableResolver", 0);
93 digester.addObjectCreate("faces-config/application/locale-config", LocaleConfig.class);
94 digester.addSetNext("faces-config/application/locale-config", "addLocaleConfig");
95 digester.addCallMethod("faces-config/application/locale-config/default-locale", "setDefaultLocale", 0);
96 digester.addCallMethod("faces-config/application/locale-config/supported-locale", "addSupportedLocale", 0);
97
98
99 digester.addCallMethod("faces-config/application/el-resolver", "addElResolver", 0);
100 digester.addObjectCreate("faces-config/application/resource-bundle", ResourceBundle.class);
101 digester.addSetNext("faces-config/application/resource-bundle", "addResourceBundle");
102 digester.addCallMethod("faces-config/application/resource-bundle/base-name", "setBaseName", 0);
103 digester.addCallMethod("faces-config/application/resource-bundle/var", "setVar", 0);
104 digester.addCallMethod("faces-config/application/resource-bundle/display-name", "setDisplayName", 0);
105
106
107
108 digester.addObjectCreate("faces-config/application/system-event-listener", SystemEventListener.class);
109 digester.addSetNext("faces-config/application/system-event-listener", "addSystemEventListener");
110 digester.addCallMethod("faces-config/application/system-event-listener/system-event-listener-class", "setSystemEventListenerClass",0);
111 digester.addCallMethod("faces-config/application/system-event-listener/system-event-class", "setSystemEventClass",0);
112 digester.addCallMethod("faces-config/application/system-event-listener/source-class", "setSourceClass",0);
113 digester.addCallMethod("faces-config/application/resource-handler", "addResourceHandler", 0);
114 digester.addCallMethod("faces-config/factory/exception-handler-factory", "addExceptionHandlerFactory", 0);
115 digester.addCallMethod("faces-config/factory/external-context-factory", "addExternalContextFactory", 0);
116 digester.addCallMethod("faces-config/factory/view-declaration-language-factory",
117 "addViewDeclarationLanguageFactory", 0);
118 digester.addCallMethod("faces-config/factory/partial-view-context-factory", "addPartialViewContextFactory", 0);
119 digester.addCallMethod("faces-config/factory/tag-handler-delegate-factory", "addTagHandlerDelegateFactory", 0);
120 digester.addCallMethod("faces-config/factory/visit-context-factory", "addVisitContextFactory", 0);
121
122
123 digester.addObjectCreate("faces-config/factory", Factory.class);
124 digester.addSetNext("faces-config/factory", "addFactory");
125 digester.addCallMethod("faces-config/factory/application-factory", "addApplicationFactory", 0);
126 digester.addCallMethod("faces-config/factory/faces-context-factory", "addFacesContextFactory", 0);
127 digester.addCallMethod("faces-config/factory/lifecycle-factory", "addLifecycleFactory", 0);
128 digester.addCallMethod("faces-config/factory/render-kit-factory", "addRenderkitFactory", 0);
129
130 digester.addCallMethod("faces-config/component", "addComponent", 2);
131 digester.addCallParam("faces-config/component/component-type", 0);
132 digester.addCallParam("faces-config/component/component-class", 1);
133
134 digester.addObjectCreate("faces-config/converter", Converter.class);
135 digester.addSetNext("faces-config/converter", "addConverter");
136 digester.addCallMethod("faces-config/converter/converter-id", "setConverterId", 0);
137 digester.addCallMethod("faces-config/converter/converter-for-class", "setForClass", 0);
138 digester.addCallMethod("faces-config/converter/converter-class", "setConverterClass", 0);
139 digester.addObjectCreate("faces-config/converter/attribute", Attribute.class);
140 digester.addSetNext("faces-config/converter/attribute", "addAttribute");
141 digester.addCallMethod("faces-config/converter/attribute/description", "addDescription", 0);
142 digester.addCallMethod("faces-config/converter/attribute/display-name", "addDisplayName", 0);
143 digester.addCallMethod("faces-config/converter/attribute/icon", "addIcon", 0);
144 digester.addCallMethod("faces-config/converter/attribute/attribute-name", "setAttributeName", 0);
145 digester.addCallMethod("faces-config/converter/attribute/attribute-class", "setAttributeClass", 0);
146 digester.addCallMethod("faces-config/converter/attribute/default-value", "setDefaultValue", 0);
147 digester.addCallMethod("faces-config/converter/attribute/suggested-value", "setSuggestedValue", 0);
148 digester.addCallMethod("faces-config/converter/attribute/attribute-extension", "addAttributeExtension", 0);
149 digester.addObjectCreate("faces-config/converter/property", Property.class);
150 digester.addSetNext("faces-config/converter/property", "addProperty");
151 digester.addCallMethod("faces-config/converter/property/description", "addDescription", 0);
152 digester.addCallMethod("faces-config/converter/property/display-name", "addDisplayName", 0);
153 digester.addCallMethod("faces-config/converter/property/icon", "addIcon", 0);
154 digester.addCallMethod("faces-config/converter/property/property-name", "setPropertyName", 0);
155 digester.addCallMethod("faces-config/converter/property/property-class", "setPropertyClass", 0);
156 digester.addCallMethod("faces-config/converter/property/default-value", "setDefaultValue", 0);
157 digester.addCallMethod("faces-config/converter/property/suggested-value", "setSuggestedValue", 0);
158 digester.addCallMethod("faces-config/converter/property/property-extension", "addPropertyExtension", 0);
159
160 digester.addObjectCreate("faces-config/managed-bean", ManagedBean.class);
161 digester.addSetProperties("faces-config/managed-bean", "eager", "eager");
162 digester.addSetNext("faces-config/managed-bean", "addManagedBean");
163 digester.addCallMethod("faces-config/managed-bean/description", "setDescription", 0);
164 digester.addCallMethod("faces-config/managed-bean/managed-bean-name", "setName", 0);
165 digester.addCallMethod("faces-config/managed-bean/managed-bean-class", "setBeanClass", 0);
166 digester.addCallMethod("faces-config/managed-bean/managed-bean-scope", "setScope", 0);
167 digester.addObjectCreate("faces-config/managed-bean/managed-property", ManagedProperty.class);
168 digester.addSetNext("faces-config/managed-bean/managed-property", "addProperty");
169 digester.addCallMethod("faces-config/managed-bean/managed-property/property-name", "setPropertyName", 0);
170 digester.addCallMethod("faces-config/managed-bean/managed-property/property-class", "setPropertyClass", 0);
171 digester.addCallMethod("faces-config/managed-bean/managed-property/null-value", "setNullValue");
172 digester.addCallMethod("faces-config/managed-bean/managed-property/value", "setValue", 0);
173 digester.addObjectCreate("faces-config/managed-bean/managed-property/map-entries", MapEntries.class);
174 digester.addSetNext("faces-config/managed-bean/managed-property/map-entries", "setMapEntries");
175 digester.addCallMethod("faces-config/managed-bean/managed-property/map-entries/key-class", "setKeyClass", 0);
176 digester
177 .addCallMethod("faces-config/managed-bean/managed-property/map-entries/value-class", "setValueClass", 0);
178 digester.addObjectCreate("faces-config/managed-bean/managed-property/map-entries/map-entry",
179 MapEntries.Entry.class);
180 digester.addSetNext("faces-config/managed-bean/managed-property/map-entries/map-entry", "addEntry");
181 digester.addCallMethod("faces-config/managed-bean/managed-property/map-entries/map-entry/key", "setKey", 0);
182 digester.addCallMethod("faces-config/managed-bean/managed-property/map-entries/map-entry/null-value",
183 "setNullValue");
184 digester.addCallMethod("faces-config/managed-bean/managed-property/map-entries/map-entry/value", "setValue", 0);
185 digester.addObjectCreate("faces-config/managed-bean/managed-property/list-entries", ListEntries.class);
186 digester.addSetNext("faces-config/managed-bean/managed-property/list-entries", "setListEntries");
187 digester.addCallMethod("faces-config/managed-bean/managed-property/list-entries/value-class", "setValueClass",
188 0);
189 digester.addObjectCreate("faces-config/managed-bean/managed-property/list-entries/null-value",
190 ListEntries.Entry.class);
191 digester.addSetNext("faces-config/managed-bean/managed-property/list-entries/null-value", "addEntry");
192 digester.addCallMethod("faces-config/managed-bean/managed-property/list-entries/null-value", "setNullValue");
193 digester.addObjectCreate("faces-config/managed-bean/managed-property/list-entries/value",
194 ListEntries.Entry.class);
195 digester.addSetNext("faces-config/managed-bean/managed-property/list-entries/value", "addEntry");
196 digester.addCallMethod("faces-config/managed-bean/managed-property/list-entries/value", "setValue", 0);
197 digester.addObjectCreate("faces-config/managed-bean/map-entries", MapEntries.class);
198 digester.addSetNext("faces-config/managed-bean/map-entries", "setMapEntries");
199 digester.addCallMethod("faces-config/managed-bean/map-entries/key-class", "setKeyClass", 0);
200 digester.addCallMethod("faces-config/managed-bean/map-entries/value-class", "setValueClass", 0);
201 digester.addObjectCreate("faces-config/managed-bean/map-entries/map-entry", MapEntries.Entry.class);
202 digester.addSetNext("faces-config/managed-bean/map-entries/map-entry", "addEntry");
203 digester.addCallMethod("faces-config/managed-bean/map-entries/map-entry/key", "setKey", 0);
204 digester.addCallMethod("faces-config/managed-bean/map-entries/map-entry/null-value", "setNullValue");
205 digester.addCallMethod("faces-config/managed-bean/map-entries/map-entry/value", "setValue", 0);
206 digester.addObjectCreate("faces-config/managed-bean/list-entries", ListEntries.class);
207 digester.addSetNext("faces-config/managed-bean/list-entries", "setListEntries");
208 digester.addCallMethod("faces-config/managed-bean/list-entries/value-class", "setValueClass", 0);
209 digester.addObjectCreate("faces-config/managed-bean/list-entries/null-value", ListEntries.Entry.class);
210 digester.addSetNext("faces-config/managed-bean/list-entries/null-value", "addEntry");
211 digester.addCallMethod("faces-config/managed-bean/list-entries/null-value", "setNullValue");
212 digester.addObjectCreate("faces-config/managed-bean/list-entries/value", ListEntries.Entry.class);
213 digester.addSetNext("faces-config/managed-bean/list-entries/value", "addEntry");
214 digester.addCallMethod("faces-config/managed-bean/list-entries/value", "setValue", 0);
215
216 digester.addObjectCreate("faces-config/navigation-rule", NavigationRule.class);
217 digester.addSetNext("faces-config/navigation-rule", "addNavigationRule");
218 digester.addCallMethod("faces-config/navigation-rule/from-view-id", "setFromViewId", 0);
219 digester.addObjectCreate("faces-config/navigation-rule/navigation-case", NavigationCase.class);
220 digester.addSetNext("faces-config/navigation-rule/navigation-case", "addNavigationCase");
221 digester.addCallMethod("faces-config/navigation-rule/navigation-case/from-action", "setFromAction", 0);
222 digester.addCallMethod("faces-config/navigation-rule/navigation-case/from-outcome", "setFromOutcome", 0);
223 digester.addCallMethod("faces-config/navigation-rule/navigation-case/if", "setIf", 0);
224 digester.addCallMethod("faces-config/navigation-rule/navigation-case/to-view-id", "setToViewId", 0);
225 digester.addObjectCreate("faces-config/navigation-rule/navigation-case/redirect", Redirect.class);
226 digester.addSetProperties("faces-config/navigation-rule/navigation-case/redirect", "include-view-params", "includeViewParams");
227 digester.addSetNext("faces-config/navigation-rule/navigation-case/redirect", "setRedirect");
228 digester.addObjectCreate("faces-config/navigation-rule/navigation-case/redirect/view-param", ViewParam.class);
229 digester.addSetNext("faces-config/navigation-rule/navigation-case/redirect/view-param", "addViewParam");
230 digester.addCallMethod("faces-config/navigation-rule/navigation-case/redirect/view-param/name", "setName",0);
231 digester.addCallMethod("faces-config/navigation-rule/navigation-case/redirect/view-param/value", "setValue",0);
232
233
234 digester.addObjectCreate("faces-config/render-kit", RenderKit.class);
235 digester.addSetNext("faces-config/render-kit", "addRenderKit");
236 digester.addCallMethod("faces-config/render-kit/render-kit-id", "setId", 0);
237
238 digester.addCallMethod("faces-config/render-kit/render-kit-class", "addRenderKitClass", 0);
239 digester.addObjectCreate("faces-config/render-kit/renderer", Renderer.class);
240 digester.addSetNext("faces-config/render-kit/renderer", "addRenderer");
241 digester.addCallMethod("faces-config/render-kit/renderer/component-family", "setComponentFamily", 0);
242 digester.addCallMethod("faces-config/render-kit/renderer/renderer-type", "setRendererType", 0);
243 digester.addCallMethod("faces-config/render-kit/renderer/renderer-class", "setRendererClass", 0);
244 digester.addObjectCreate("faces-config/render-kit/client-behavior-renderer", ClientBehaviorRenderer.class);
245 digester.addSetNext("faces-config/render-kit/client-behavior-renderer", "addClientBehaviorRenderer");
246 digester.addCallMethod("faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-type", "setRendererType", 0);
247 digester.addCallMethod("faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-class", "setRendererClass", 0);
248
249
250 digester.addObjectCreate("faces-config/behavior", Behavior.class);
251 digester.addSetNext("faces-config/behavior", "addBehavior");
252 digester.addCallMethod("faces-config/behavior/behavior-id", "setBehaviorId", 0);
253 digester.addCallMethod("faces-config/behavior/behavior-class", "setBehaviorClass", 0);
254 digester.addObjectCreate("faces-config/behavior/attribute", Attribute.class);
255 digester.addSetNext("faces-config/behavior/attribute", "addAttribute");
256 digester.addCallMethod("faces-config/behavior/attribute/description", "addDescription", 0);
257 digester.addCallMethod("faces-config/behavior/attribute/display-name", "addDisplayName", 0);
258 digester.addCallMethod("faces-config/behavior/attribute/icon", "addIcon", 0);
259 digester.addCallMethod("faces-config/behavior/attribute/attribute-name", "setAttributeName", 0);
260 digester.addCallMethod("faces-config/behavior/attribute/attribute-class", "setAttributeClass", 0);
261 digester.addCallMethod("faces-config/behavior/attribute/default-value", "setDefaultValue", 0);
262 digester.addCallMethod("faces-config/behavior/attribute/suggested-value", "setSuggestedValue", 0);
263 digester.addCallMethod("faces-config/behavior/attribute/attribute-extension", "addAttributeExtension", 0);
264 digester.addObjectCreate("faces-config/behavior/property", Property.class);
265 digester.addSetNext("faces-config/behavior/property", "addProperty");
266 digester.addCallMethod("faces-config/behavior/property/description", "addDescription", 0);
267 digester.addCallMethod("faces-config/behavior/property/display-name", "addDisplayName", 0);
268 digester.addCallMethod("faces-config/behavior/property/icon", "addIcon", 0);
269 digester.addCallMethod("faces-config/behavior/property/property-name", "setPropertyName", 0);
270 digester.addCallMethod("faces-config/behavior/property/property-class", "setPropertyClass", 0);
271 digester.addCallMethod("faces-config/behavior/property/default-value", "setDefaultValue", 0);
272 digester.addCallMethod("faces-config/behavior/property/suggested-value", "setSuggestedValue", 0);
273 digester.addCallMethod("faces-config/behavior/property/property-extension", "addPropertyExtension", 0);
274
275
276 digester.addCallMethod("faces-config/lifecycle/phase-listener", "addLifecyclePhaseListener", 0);
277
278 digester.addCallMethod("faces-config/validator", "addValidator", 2);
279 digester.addCallParam("faces-config/validator/validator-id", 0);
280 digester.addCallParam("faces-config/validator/validator-class", 1);
281 }
282
283 public FacesConfig getFacesConfig(InputStream in, String systemId) throws IOException, SAXException
284 {
285 InputSource is = new InputSource(in);
286 is.setSystemId(systemId);
287
288
289 FacesConfig config = (FacesConfig) digester.parse(is);
290
291 for (org.apache.myfaces.config.element.Application application : config.getApplications())
292 {
293 for (org.apache.myfaces.config.element.LocaleConfig localeConfig : application.getLocaleConfig())
294 {
295 if (!localeConfig.getSupportedLocales().contains(localeConfig.getDefaultLocale()))
296 {
297 localeConfig.getSupportedLocales().add(localeConfig.getDefaultLocale());
298 }
299 }
300 }
301
302 return config;
303 }
304 }