View Javadoc

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.spi.impl;
20  
21  import org.apache.myfaces.spi.FacesFlowProvider;
22  import org.apache.myfaces.spi.FacesFlowProviderFactory;
23  import javax.faces.context.ExternalContext;
24  import org.apache.myfaces.flow.impl.DefaultFacesFlowProvider;
25  import org.apache.myfaces.shared.util.ClassUtils;
26  import org.apache.myfaces.util.ExternalSpecifications;
27  
28  /**
29   * @author Leonardo Uribe
30   */
31  public class DefaultFacesFlowProviderFactory extends FacesFlowProviderFactory
32  {
33  
34      public static final String FACES_CONFIGURATION_MERGER = FacesFlowProvider.class.getName();
35      public static final String FACES_CONFIGURATION_MERGER_INSTANCE_KEY = FACES_CONFIGURATION_MERGER + ".INSTANCE";
36  
37      @Override
38      public FacesFlowProvider getFacesFlowProvider(ExternalContext externalContext)
39      {
40          // check for cached instance
41          FacesFlowProvider returnValue = (FacesFlowProvider)
42                  externalContext.getApplicationMap().get(FACES_CONFIGURATION_MERGER_INSTANCE_KEY);
43  
44          if (returnValue == null)
45          {
46              if (ExternalSpecifications.isCDIAvailable(externalContext))
47              {
48                  returnValue = (FacesFlowProvider) ClassUtils.newInstance(
49                      "org.apache.myfaces.flow.cdi.DefaultCDIFacesFlowProvider");
50              }
51              else
52              {
53                  returnValue = (FacesFlowProvider) new DefaultFacesFlowProvider();
54              }
55          }
56  
57  
58          return returnValue;
59      }
60  
61  }