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 org.apache.commons.digester.Digester;
22 import org.apache.myfaces.config.FacesConfigUnmarshaller;
23 import org.apache.myfaces.config.impl.FacesConfigEntityResolver;
24 import org.apache.myfaces.config.impl.digester.elements.*;
25 import org.apache.myfaces.shared.util.ClassUtils;
26 import org.xml.sax.InputSource;
27 import org.xml.sax.SAXException;
28
29 import javax.faces.context.ExternalContext;
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.io.Reader;
33 import org.apache.myfaces.config.element.FacesFlowDefinition;
34
35
36
37
38 public class DigesterFacesConfigUnmarshallerImpl implements FacesConfigUnmarshaller<FacesConfigImpl>
39 {
40 private Digester digester;
41
42 public DigesterFacesConfigUnmarshallerImpl(ExternalContext externalContext)
43 {
44 digester = new Digester();
45
46 digester.setValidating(false);
47 digester.setNamespaceAware(true);
48 digester.setEntityResolver(new FacesConfigEntityResolver(externalContext));
49
50 digester.setClassLoader(ClassUtils.getContextClassLoader());
51
52 digester.addObjectCreate("faces-config", FacesConfigImpl.class);
53
54 digester.addSetProperties("faces-config", "metadata-complete", "metadataComplete");
55 digester.addSetProperties("faces-config", "version", "version");
56
57
58
59 digester.addCallMethod("faces-config/protected-views/url-pattern", "addProtectedViewUrlPattern", 0);
60
61 digester.addCallMethod("faces-config/name", "setName", 0);
62 digester.addObjectCreate("faces-config/ordering", OrderingImpl.class);
63 digester.addSetNext("faces-config/ordering", "setOrdering");
64 digester.addObjectCreate("faces-config/ordering/before/name", FacesConfigNameSlotImpl.class);
65 digester.addSetNext("faces-config/ordering/before/name", "addBeforeSlot");
66 digester.addCallMethod("faces-config/ordering/before/name", "setName",0);
67 digester.addObjectCreate("faces-config/ordering/before/others", ConfigOthersSlotImpl.class);
68 digester.addSetNext("faces-config/ordering/before/others", "addBeforeSlot");
69
70 digester.addObjectCreate("faces-config/ordering/after/name", FacesConfigNameSlotImpl.class);
71 digester.addSetNext("faces-config/ordering/after/name", "addAfterSlot");
72 digester.addCallMethod("faces-config/ordering/after/name", "setName",0);
73 digester.addObjectCreate("faces-config/ordering/after/others", ConfigOthersSlotImpl.class);
74 digester.addSetNext("faces-config/ordering/after/others", "addAfterSlot");
75
76 digester.addObjectCreate("faces-config/absolute-ordering", AbsoluteOrderingImpl.class);
77 digester.addSetNext("faces-config/absolute-ordering", "setAbsoluteOrdering");
78 digester.addObjectCreate("faces-config/absolute-ordering/name", FacesConfigNameSlotImpl.class);
79 digester.addSetNext("faces-config/absolute-ordering/name", "addOrderSlot");
80 digester.addCallMethod("faces-config/absolute-ordering/name", "setName",0);
81 digester.addObjectCreate("faces-config/absolute-ordering/others", ConfigOthersSlotImpl.class);
82 digester.addSetNext("faces-config/absolute-ordering/others", "addOrderSlot");
83
84
85 digester.addObjectCreate("faces-config/application", ApplicationImpl.class);
86 digester.addSetNext("faces-config/application", "addApplication");
87 digester.addCallMethod("faces-config/application/action-listener", "addActionListener", 0);
88 digester.addCallMethod("faces-config/application/default-render-kit-id", "addDefaultRenderkitId", 0);
89 digester.addCallMethod("faces-config/application/default-validators", "setDefaultValidatorsPresent");
90 digester.addCallMethod("faces-config/application/default-validators/validator-id", "addDefaultValidatorId", 0);
91 digester.addCallMethod("faces-config/application/message-bundle", "addMessageBundle", 0);
92 digester.addCallMethod("faces-config/application/navigation-handler", "addNavigationHandler", 0);
93 digester.addCallMethod("faces-config/application/partial-traversal", "addPartialTraversal", 0);
94 digester.addCallMethod("faces-config/application/view-handler", "addViewHandler", 0);
95 digester.addCallMethod("faces-config/application/state-manager", "addStateManager", 0);
96 digester.addCallMethod("faces-config/application/property-resolver", "addPropertyResolver", 0);
97 digester.addCallMethod("faces-config/application/variable-resolver", "addVariableResolver", 0);
98 digester.addObjectCreate("faces-config/application/locale-config", LocaleConfigImpl.class);
99 digester.addSetNext("faces-config/application/locale-config", "addLocaleConfig");
100 digester.addCallMethod("faces-config/application/locale-config/default-locale", "setDefaultLocale", 0);
101 digester.addCallMethod("faces-config/application/locale-config/supported-locale", "addSupportedLocale", 0);
102
103
104 digester.addCallMethod("faces-config/application/el-resolver", "addElResolver", 0);
105 digester.addObjectCreate("faces-config/application/resource-bundle", ResourceBundleImpl.class);
106 digester.addSetNext("faces-config/application/resource-bundle", "addResourceBundle");
107 digester.addCallMethod("faces-config/application/resource-bundle/base-name", "setBaseName", 0);
108 digester.addCallMethod("faces-config/application/resource-bundle/var", "setVar", 0);
109 digester.addCallMethod("faces-config/application/resource-bundle/display-name", "setDisplayName", 0);
110
111
112
113 digester.addObjectCreate("faces-config/application/system-event-listener", SystemEventListenerImpl.class);
114 digester.addSetNext("faces-config/application/system-event-listener", "addSystemEventListener");
115 digester.addCallMethod("faces-config/application/system-event-listener/system-event-listener-class",
116 "setSystemEventListenerClass",0);
117 digester.addCallMethod("faces-config/application/system-event-listener/system-event-class",
118 "setSystemEventClass",0);
119 digester.addCallMethod("faces-config/application/system-event-listener/source-class", "setSourceClass",0);
120 digester.addCallMethod("faces-config/application/resource-handler", "addResourceHandler", 0);
121 digester.addCallMethod("faces-config/factory/exception-handler-factory", "addExceptionHandlerFactory", 0);
122 digester.addCallMethod("faces-config/factory/external-context-factory", "addExternalContextFactory", 0);
123 digester.addCallMethod("faces-config/factory/view-declaration-language-factory",
124 "addViewDeclarationLanguageFactory", 0);
125 digester.addCallMethod("faces-config/factory/partial-view-context-factory", "addPartialViewContextFactory", 0);
126 digester.addCallMethod("faces-config/factory/tag-handler-delegate-factory", "addTagHandlerDelegateFactory", 0);
127 digester.addCallMethod("faces-config/factory/visit-context-factory", "addVisitContextFactory", 0);
128
129
130 digester.addObjectCreate("faces-config/application/resource-library-contracts/contract-mapping",
131 ContractMappingImpl.class);
132 digester.addSetNext("faces-config/application/resource-library-contracts/contract-mapping",
133 "addResourceLibraryContractMapping");
134 digester.addCallMethod(
135 "faces-config/application/resource-library-contracts/contract-mapping/url-pattern", "addUrlPattern", 0);
136 digester.addCallMethod(
137 "faces-config/application/resource-library-contracts/contract-mapping/contracts", "addContract", 0);
138
139
140 digester.addCallMethod("faces-config/factory/facelet-cache-factory", "addFaceletCacheFactory", 0);
141
142
143 digester.addCallMethod("faces-config/factory/flash-factory", "addFlashFactory", 0);
144
145 digester.addCallMethod("faces-config/factory/flow-handler-factory", "addFlowHandlerFactory", 0);
146
147
148 digester.addObjectCreate("faces-config/factory", FactoryImpl.class);
149 digester.addSetNext("faces-config/factory", "addFactory");
150 digester.addCallMethod("faces-config/factory/application-factory", "addApplicationFactory", 0);
151 digester.addCallMethod("faces-config/factory/faces-context-factory", "addFacesContextFactory", 0);
152 digester.addCallMethod("faces-config/factory/lifecycle-factory", "addLifecycleFactory", 0);
153 digester.addCallMethod("faces-config/factory/render-kit-factory", "addRenderkitFactory", 0);
154
155 digester.addCallMethod("faces-config/component", "addComponent", 2);
156 digester.addCallParam("faces-config/component/component-type", 0);
157 digester.addCallParam("faces-config/component/component-class", 1);
158
159 digester.addObjectCreate("faces-config/converter", ConverterImpl.class);
160 digester.addSetNext("faces-config/converter", "addConverter");
161 digester.addCallMethod("faces-config/converter/converter-id", "setConverterId", 0);
162 digester.addCallMethod("faces-config/converter/converter-for-class", "setForClass", 0);
163 digester.addCallMethod("faces-config/converter/converter-class", "setConverterClass", 0);
164 digester.addObjectCreate("faces-config/converter/attribute", AttributeImpl.class);
165 digester.addSetNext("faces-config/converter/attribute", "addAttribute");
166 digester.addCallMethod("faces-config/converter/attribute/description", "addDescription", 0);
167 digester.addCallMethod("faces-config/converter/attribute/display-name", "addDisplayName", 0);
168 digester.addCallMethod("faces-config/converter/attribute/icon", "addIcon", 0);
169 digester.addCallMethod("faces-config/converter/attribute/attribute-name", "setAttributeName", 0);
170 digester.addCallMethod("faces-config/converter/attribute/attribute-class", "setAttributeClass", 0);
171 digester.addCallMethod("faces-config/converter/attribute/default-value", "setDefaultValue", 0);
172 digester.addCallMethod("faces-config/converter/attribute/suggested-value", "setSuggestedValue", 0);
173 digester.addCallMethod("faces-config/converter/attribute/attribute-extension", "addAttributeExtension", 0);
174 digester.addObjectCreate("faces-config/converter/property", PropertyImpl.class);
175 digester.addSetNext("faces-config/converter/property", "addProperty");
176 digester.addCallMethod("faces-config/converter/property/description", "addDescription", 0);
177 digester.addCallMethod("faces-config/converter/property/display-name", "addDisplayName", 0);
178 digester.addCallMethod("faces-config/converter/property/icon", "addIcon", 0);
179 digester.addCallMethod("faces-config/converter/property/property-name", "setPropertyName", 0);
180 digester.addCallMethod("faces-config/converter/property/property-class", "setPropertyClass", 0);
181 digester.addCallMethod("faces-config/converter/property/default-value", "setDefaultValue", 0);
182 digester.addCallMethod("faces-config/converter/property/suggested-value", "setSuggestedValue", 0);
183 digester.addCallMethod("faces-config/converter/property/property-extension", "addPropertyExtension", 0);
184
185 digester.addObjectCreate("faces-config/managed-bean", ManagedBeanImpl.class);
186 digester.addSetProperties("faces-config/managed-bean", "eager", "eager");
187 digester.addSetNext("faces-config/managed-bean", "addManagedBean");
188 digester.addCallMethod("faces-config/managed-bean/description", "setDescription", 0);
189 digester.addCallMethod("faces-config/managed-bean/managed-bean-name", "setName", 0);
190 digester.addCallMethod("faces-config/managed-bean/managed-bean-class", "setBeanClass", 0);
191 digester.addCallMethod("faces-config/managed-bean/managed-bean-scope", "setScope", 0);
192 digester.addObjectCreate("faces-config/managed-bean/managed-property", ManagedPropertyImpl.class);
193 digester.addSetNext("faces-config/managed-bean/managed-property", "addProperty");
194 digester.addCallMethod("faces-config/managed-bean/managed-property/property-name", "setPropertyName", 0);
195 digester.addCallMethod("faces-config/managed-bean/managed-property/property-class", "setPropertyClass", 0);
196 digester.addCallMethod("faces-config/managed-bean/managed-property/null-value", "setNullValue");
197 digester.addCallMethod("faces-config/managed-bean/managed-property/value", "setValue", 0);
198 digester.addObjectCreate("faces-config/managed-bean/managed-property/map-entries", MapEntriesImpl.class);
199 digester.addSetNext("faces-config/managed-bean/managed-property/map-entries", "setMapEntries");
200 digester.addCallMethod("faces-config/managed-bean/managed-property/map-entries/key-class", "setKeyClass", 0);
201 digester.addCallMethod("faces-config/managed-bean/managed-property/map-entries/value-class",
202 "setValueClass", 0);
203 digester.addObjectCreate("faces-config/managed-bean/managed-property/map-entries/map-entry",
204 MapEntriesImpl.Entry.class);
205 digester.addSetNext("faces-config/managed-bean/managed-property/map-entries/map-entry", "addEntry");
206 digester.addCallMethod("faces-config/managed-bean/managed-property/map-entries/map-entry/key", "setKey", 0);
207 digester.addCallMethod("faces-config/managed-bean/managed-property/map-entries/map-entry/null-value",
208 "setNullValue");
209 digester.addCallMethod("faces-config/managed-bean/managed-property/map-entries/map-entry/value", "setValue", 0);
210 digester.addObjectCreate("faces-config/managed-bean/managed-property/list-entries", ListEntriesImpl.class);
211 digester.addSetNext("faces-config/managed-bean/managed-property/list-entries", "setListEntries");
212 digester.addCallMethod("faces-config/managed-bean/managed-property/list-entries/value-class", "setValueClass",
213 0);
214 digester.addObjectCreate("faces-config/managed-bean/managed-property/list-entries/null-value",
215 ListEntriesImpl.Entry.class);
216 digester.addSetNext("faces-config/managed-bean/managed-property/list-entries/null-value", "addEntry");
217 digester.addCallMethod("faces-config/managed-bean/managed-property/list-entries/null-value", "setNullValue");
218 digester.addObjectCreate("faces-config/managed-bean/managed-property/list-entries/value",
219 ListEntriesImpl.Entry.class);
220 digester.addSetNext("faces-config/managed-bean/managed-property/list-entries/value", "addEntry");
221 digester.addCallMethod("faces-config/managed-bean/managed-property/list-entries/value", "setValue", 0);
222 digester.addObjectCreate("faces-config/managed-bean/map-entries", MapEntriesImpl.class);
223 digester.addSetNext("faces-config/managed-bean/map-entries", "setMapEntries");
224 digester.addCallMethod("faces-config/managed-bean/map-entries/key-class", "setKeyClass", 0);
225 digester.addCallMethod("faces-config/managed-bean/map-entries/value-class", "setValueClass", 0);
226 digester.addObjectCreate("faces-config/managed-bean/map-entries/map-entry", MapEntriesImpl.Entry.class);
227 digester.addSetNext("faces-config/managed-bean/map-entries/map-entry", "addEntry");
228 digester.addCallMethod("faces-config/managed-bean/map-entries/map-entry/key", "setKey", 0);
229 digester.addCallMethod("faces-config/managed-bean/map-entries/map-entry/null-value", "setNullValue");
230 digester.addCallMethod("faces-config/managed-bean/map-entries/map-entry/value", "setValue", 0);
231 digester.addObjectCreate("faces-config/managed-bean/list-entries", ListEntriesImpl.class);
232 digester.addSetNext("faces-config/managed-bean/list-entries", "setListEntries");
233 digester.addCallMethod("faces-config/managed-bean/list-entries/value-class", "setValueClass", 0);
234 digester.addObjectCreate("faces-config/managed-bean/list-entries/null-value", ListEntriesImpl.Entry.class);
235 digester.addSetNext("faces-config/managed-bean/list-entries/null-value", "addEntry");
236 digester.addCallMethod("faces-config/managed-bean/list-entries/null-value", "setNullValue");
237 digester.addObjectCreate("faces-config/managed-bean/list-entries/value", ListEntriesImpl.Entry.class);
238 digester.addSetNext("faces-config/managed-bean/list-entries/value", "addEntry");
239 digester.addCallMethod("faces-config/managed-bean/list-entries/value", "setValue", 0);
240
241 digester.addObjectCreate("faces-config/navigation-rule", NavigationRuleImpl.class);
242 digester.addSetNext("faces-config/navigation-rule", "addNavigationRule");
243 digester.addCallMethod("faces-config/navigation-rule/from-view-id", "setFromViewId", 0);
244 digester.addObjectCreate("faces-config/navigation-rule/navigation-case", NavigationCaseImpl.class);
245 digester.addSetNext("faces-config/navigation-rule/navigation-case", "addNavigationCase");
246 digester.addCallMethod("faces-config/navigation-rule/navigation-case/from-action", "setFromAction", 0);
247 digester.addCallMethod("faces-config/navigation-rule/navigation-case/from-outcome", "setFromOutcome", 0);
248 digester.addCallMethod("faces-config/navigation-rule/navigation-case/if", "setIf", 0);
249 digester.addCallMethod("faces-config/navigation-rule/navigation-case/to-view-id", "setToViewId", 0);
250 digester.addObjectCreate("faces-config/navigation-rule/navigation-case/redirect", RedirectImpl.class);
251 digester.addSetProperties("faces-config/navigation-rule/navigation-case/redirect", "include-view-params",
252 "includeViewParams");
253 digester.addSetNext("faces-config/navigation-rule/navigation-case/redirect", "setRedirect");
254 digester.addObjectCreate("faces-config/navigation-rule/navigation-case/redirect/view-param",
255 ViewParamImpl.class);
256 digester.addSetNext("faces-config/navigation-rule/navigation-case/redirect/view-param", "addViewParam");
257 digester.addCallMethod("faces-config/navigation-rule/navigation-case/redirect/view-param/name", "setName",0);
258 digester.addCallMethod("faces-config/navigation-rule/navigation-case/redirect/view-param/value", "setValue",0);
259
260 digester.addObjectCreate("faces-config/navigation-rule/navigation-case/redirect/redirect-param",
261 ViewParamImpl.class);
262 digester.addSetNext("faces-config/navigation-rule/navigation-case/redirect/redirect-param",
263 "addViewParam");
264 digester.addCallMethod("faces-config/navigation-rule/navigation-case/redirect/redirect-param/name",
265 "setName",0);
266 digester.addCallMethod("faces-config/navigation-rule/navigation-case/redirect/redirect-param/value",
267 "setValue",0);
268
269 digester.addObjectCreate("faces-config/render-kit", RenderKitImpl.class);
270 digester.addSetNext("faces-config/render-kit", "addRenderKit");
271 digester.addCallMethod("faces-config/render-kit/render-kit-id", "setId", 0);
272
273 digester.addCallMethod("faces-config/render-kit/render-kit-class", "addRenderKitClass", 0);
274 digester.addObjectCreate("faces-config/render-kit/renderer", RendererImpl.class);
275 digester.addSetNext("faces-config/render-kit/renderer", "addRenderer");
276 digester.addCallMethod("faces-config/render-kit/renderer/component-family", "setComponentFamily", 0);
277 digester.addCallMethod("faces-config/render-kit/renderer/renderer-type", "setRendererType", 0);
278 digester.addCallMethod("faces-config/render-kit/renderer/renderer-class", "setRendererClass", 0);
279 digester.addObjectCreate("faces-config/render-kit/client-behavior-renderer", ClientBehaviorRendererImpl.class);
280 digester.addSetNext("faces-config/render-kit/client-behavior-renderer", "addClientBehaviorRenderer");
281 digester.addCallMethod("faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-type",
282 "setRendererType", 0);
283 digester.addCallMethod("faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-class",
284 "setRendererClass", 0);
285
286
287 digester.addObjectCreate("faces-config/behavior", BehaviorImpl.class);
288 digester.addSetNext("faces-config/behavior", "addBehavior");
289 digester.addCallMethod("faces-config/behavior/behavior-id", "setBehaviorId", 0);
290 digester.addCallMethod("faces-config/behavior/behavior-class", "setBehaviorClass", 0);
291 digester.addObjectCreate("faces-config/behavior/attribute", AttributeImpl.class);
292 digester.addSetNext("faces-config/behavior/attribute", "addAttribute");
293 digester.addCallMethod("faces-config/behavior/attribute/description", "addDescription", 0);
294 digester.addCallMethod("faces-config/behavior/attribute/display-name", "addDisplayName", 0);
295 digester.addCallMethod("faces-config/behavior/attribute/icon", "addIcon", 0);
296 digester.addCallMethod("faces-config/behavior/attribute/attribute-name", "setAttributeName", 0);
297 digester.addCallMethod("faces-config/behavior/attribute/attribute-class", "setAttributeClass", 0);
298 digester.addCallMethod("faces-config/behavior/attribute/default-value", "setDefaultValue", 0);
299 digester.addCallMethod("faces-config/behavior/attribute/suggested-value", "setSuggestedValue", 0);
300 digester.addCallMethod("faces-config/behavior/attribute/attribute-extension", "addAttributeExtension", 0);
301 digester.addObjectCreate("faces-config/behavior/property", PropertyImpl.class);
302 digester.addSetNext("faces-config/behavior/property", "addProperty");
303 digester.addCallMethod("faces-config/behavior/property/description", "addDescription", 0);
304 digester.addCallMethod("faces-config/behavior/property/display-name", "addDisplayName", 0);
305 digester.addCallMethod("faces-config/behavior/property/icon", "addIcon", 0);
306 digester.addCallMethod("faces-config/behavior/property/property-name", "setPropertyName", 0);
307 digester.addCallMethod("faces-config/behavior/property/property-class", "setPropertyClass", 0);
308 digester.addCallMethod("faces-config/behavior/property/default-value", "setDefaultValue", 0);
309 digester.addCallMethod("faces-config/behavior/property/suggested-value", "setSuggestedValue", 0);
310 digester.addCallMethod("faces-config/behavior/property/property-extension", "addPropertyExtension", 0);
311
312
313 digester.addCallMethod("faces-config/lifecycle/phase-listener", "addLifecyclePhaseListener", 0);
314
315 digester.addCallMethod("faces-config/validator", "addValidator", 2);
316 digester.addCallParam("faces-config/validator/validator-id", 0);
317 digester.addCallParam("faces-config/validator/validator-class", 1);
318
319
320 digester.addObjectCreate("faces-config/faces-config-extension", FacesConfigExtensionImpl.class);
321 digester.addSetNext("faces-config/faces-config-extension", "addFacesConfigExtension");
322 digester.addObjectCreate("faces-config/faces-config-extension/facelets-processing",
323 FaceletsProcessingImpl.class);
324 digester.addSetNext("faces-config/faces-config-extension/facelets-processing", "addFaceletsProcessing");
325 digester.addCallMethod("faces-config/faces-config-extension/facelets-processing/file-extension",
326 "setFileExtension", 0);
327 digester.addCallMethod("faces-config/faces-config-extension/facelets-processing/process-as", "setProcessAs", 0);
328
329
330
331
332 digester.addCallMethod("faces-config/faces-config-extension/facelets-processing/oam-compress-spaces",
333 "setOamCompressSpaces", 0);
334
335 addFacesFlowRules(externalContext);
336
337
338 }
339
340 private void addNavigationRules(ExternalContext externalContext, String prefix, String method)
341 {
342 digester.addObjectCreate(prefix, NavigationRuleImpl.class);
343 digester.addSetNext(prefix, method);
344 digester.addCallMethod(prefix+"/from-view-id", "setFromViewId", 0);
345 addNavigationCases(externalContext, prefix+"/navigation-case", "addNavigationCase");
346 }
347
348 private void addNavigationCases(ExternalContext externalContext, String prefix, String method)
349 {
350 digester.addObjectCreate(prefix, NavigationCaseImpl.class);
351 digester.addSetNext(prefix, method);
352 digester.addCallMethod(prefix+"/from-action", "setFromAction", 0);
353 digester.addCallMethod(prefix+"/from-outcome", "setFromOutcome", 0);
354 digester.addCallMethod(prefix+"/if", "setIf", 0);
355 digester.addCallMethod(prefix+"/to-view-id", "setToViewId", 0);
356 digester.addObjectCreate(prefix+"/redirect", RedirectImpl.class);
357 digester.addSetProperties(prefix+"/redirect", "include-view-params",
358 "includeViewParams");
359 digester.addSetNext(prefix+"/redirect", "setRedirect");
360 digester.addObjectCreate(prefix+"/redirect/view-param", ViewParamImpl.class);
361 digester.addSetNext(prefix+"/redirect/view-param", "addViewParam");
362 digester.addCallMethod(prefix+"/redirect/view-param/name", "setName",0);
363 digester.addCallMethod(prefix+"/redirect/view-param/value", "setValue",0);
364
365 digester.addObjectCreate(prefix+"/redirect/redirect-param", ViewParamImpl.class);
366 digester.addSetNext(prefix+"/redirect/redirect-param", "addViewParam");
367 digester.addCallMethod(prefix+"/redirect/redirect-param/name", "setName",0);
368 digester.addCallMethod(prefix+"/redirect/redirect-param/value", "setValue",0);
369 }
370
371 private void addFacesFlowRules(ExternalContext externalContext)
372 {
373 digester.addObjectCreate("faces-config/flow-definition", FacesFlowDefinitionImpl.class);
374
375 digester.addSetNext("faces-config/flow-definition", "addFacesFlowDefinition");
376 digester.addSetProperties("faces-config/flow-definition", "id", "id");
377
378 digester.addCallMethod("faces-config/flow-definition/start-node", "setStartNode", 0);
379 digester.addCallMethod("faces-config/flow-definition/initializer", "setInitializer", 0);
380 digester.addCallMethod("faces-config/flow-definition/finalizer", "setFinalizer", 0);
381
382 digester.addObjectCreate("faces-config/flow-definition/view", FacesFlowViewImpl.class);
383 digester.addSetNext("faces-config/flow-definition/view", "addView");
384 digester.addSetProperties("faces-config/flow-definition/view", "id", "id");
385 digester.addCallMethod("faces-config/flow-definition/view/vdl-document", "setVdlDocument", 0);
386
387 digester.addObjectCreate("faces-config/flow-definition/switch", FacesFlowSwitchImpl.class);
388 digester.addSetNext("faces-config/flow-definition/switch", "addSwitch");
389 digester.addSetProperties("faces-config/flow-definition/switch", "id", "id");
390
391 digester.addObjectCreate("faces-config/flow-definition/switch/default-outcome",
392 NavigationCaseImpl.class);
393 digester.addSetNext("faces-config/flow-definition/switch/default-outcome",
394 "setDefaultOutcome");
395 digester.addCallMethod("faces-config/flow-definition/switch/default-outcome",
396 "setFromOutcome", 0);
397
398 addNavigationCases(externalContext, "faces-config/flow-definition/switch/case",
399 "addNavigationCase");
400
401 digester.addObjectCreate("faces-config/flow-definition/flow-return", FacesFlowReturnImpl.class);
402 digester.addSetNext("faces-config/flow-definition/flow-return", "addReturn");
403 digester.addSetProperties("faces-config/flow-definition/flow-return", "id", "id");
404 digester.addObjectCreate("faces-config/flow-definition/flow-return/from-outcome",
405 NavigationCaseImpl.class);
406 digester.addSetNext("faces-config/flow-definition/flow-return/from-outcome",
407 "setNavigationCase");
408 digester.addCallMethod("faces-config/flow-definition/flow-return/from-outcome",
409 "setFromOutcome", 0);
410
411 addNavigationRules(externalContext, "faces-config/flow-definition/navigation-rule", "addNavigationRule");
412
413 digester.addObjectCreate("faces-config/flow-definition/flow-call", FacesFlowCallImpl.class);
414 digester.addSetNext("faces-config/flow-definition/flow-call", "addFlowCall");
415 digester.addSetProperties("faces-config/flow-definition/flow-call", "id", "id");
416 digester.addObjectCreate("faces-config/flow-definition/flow-call/flow-reference", FacesFlowReferenceImpl.class);
417 digester.addSetNext("faces-config/flow-definition/flow-call/flow-reference", "setFlowReference");
418 digester.addCallMethod("faces-config/flow-definition/flow-call/flow-reference/flow-document-id",
419 "setFlowDocumentId", 0);
420 digester.addCallMethod("faces-config/flow-definition/flow-call/flow-reference/flow-id", "setFlowId", 0);
421
422 digester.addObjectCreate("faces-config/flow-definition/flow-call/outbound-parameter",
423 FacesFlowParameterImpl.class);
424 digester.addSetNext("faces-config/flow-definition/flow-call/outbound-parameter",
425 "addOutboundParameter");
426 digester.addCallMethod("faces-config/flow-definition/flow-call/outbound-parameter/name", "setName", 0);
427 digester.addCallMethod("faces-config/flow-definition/flow-call/outbound-parameter/value", "setValue", 0);
428
429 digester.addObjectCreate("faces-config/flow-definition/method-call", FacesFlowMethodCallImpl.class);
430 digester.addSetNext("faces-config/flow-definition/method-call", "addMethodCall");
431 digester.addSetProperties("faces-config/flow-definition/method-call", "id", "id");
432 digester.addCallMethod("faces-config/flow-definition/method-call/method", "setMethod", 0);
433 digester.addCallMethod("faces-config/flow-definition/method-call/default-outcome",
434 "setDefaultOutcome", 0);
435 digester.addObjectCreate("faces-config/flow-definition/method-call/parameter",
436 FacesFlowMethodParameterImpl.class);
437 digester.addSetNext("faces-config/flow-definition/method-call/parameter", "addParameter");
438 digester.addCallMethod("faces-config/flow-definition/method-call/parameter/class", "setClassName", 0);
439 digester.addCallMethod("faces-config/flow-definition/method-call/parameter/value", "setValue", 0);
440
441 digester.addObjectCreate("faces-config/flow-definition/inbound-parameter",
442 FacesFlowParameterImpl.class);
443 digester.addSetNext("faces-config/flow-definition/inbound-parameter", "addInboundParameter");
444 digester.addCallMethod("faces-config/flow-definition/inbound-parameter/name", "setName", 0);
445 digester.addCallMethod("faces-config/flow-definition/inbound-parameter/value", "setValue", 0);
446
447
448 digester.addObjectCreate("faces-config/faces-config-extension/view-pool-mapping",
449 ViewPoolMappingImpl.class);
450 digester.addSetNext("faces-config/faces-config-extension/view-pool-mapping",
451 "addViewPoolMapping");
452 digester.addCallMethod(
453 "faces-config/faces-config-extension/view-pool-mapping/url-pattern", "setUrlPattern", 0);
454 digester.addObjectCreate("faces-config/faces-config-extension/view-pool-mapping/parameter",
455 ViewPoolParameterImpl.class);
456 digester.addSetNext("faces-config/faces-config-extension/view-pool-mapping/parameter", "addParameter");
457 digester.addCallMethod("faces-config/faces-config-extension/view-pool-mapping/parameter/name", "setName", 0);
458 digester.addCallMethod("faces-config/faces-config-extension/view-pool-mapping/parameter/value", "setValue", 0);
459 }
460
461 private void postProcessFacesConfig(String systemId, FacesConfigImpl config)
462 {
463 for (org.apache.myfaces.config.element.Application application : config.getApplications())
464 {
465 for (org.apache.myfaces.config.element.LocaleConfig localeConfig : application.getLocaleConfig())
466 {
467 if (!localeConfig.getSupportedLocales().contains(localeConfig.getDefaultLocale()))
468 {
469 localeConfig.getSupportedLocales().add(localeConfig.getDefaultLocale());
470 }
471 }
472 }
473
474 for (FacesFlowDefinition facesFlowDefinition : config.getFacesFlowDefinitions())
475 {
476
477
478
479
480
481
482
483 if (config.getName() != null)
484 {
485 ((FacesFlowDefinitionImpl)facesFlowDefinition).setDefiningDocumentId(
486 config.getName());
487 }
488 else
489 {
490 ((FacesFlowDefinitionImpl)facesFlowDefinition).setDefiningDocumentId("");
491 }
492 }
493 }
494
495 public FacesConfigImpl getFacesConfig(InputStream in, String systemId) throws IOException, SAXException
496 {
497 InputSource is = new InputSource(in);
498 is.setSystemId(systemId);
499
500
501 FacesConfigImpl config = (FacesConfigImpl) digester.parse(is);
502
503 postProcessFacesConfig(systemId, config);
504
505 return config;
506 }
507
508 public FacesConfigImpl getFacesConfig(Reader r) throws IOException, SAXException
509 {
510
511
512
513
514 FacesConfigImpl config = (FacesConfigImpl) digester.parse(r);
515
516 postProcessFacesConfig(null, config);
517
518 return config;
519 }
520
521 }