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