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.el.unified;
20  
21  import java.util.ArrayList;
22  import java.util.List;
23  
24  import javax.el.ArrayELResolver;
25  import javax.el.BeanELResolver;
26  import javax.el.CompositeELResolver;
27  import javax.el.ELResolver;
28  import javax.el.ListELResolver;
29  import javax.el.MapELResolver;
30  import javax.el.ResourceBundleELResolver;
31  
32  import org.apache.myfaces.config.RuntimeConfig;
33  import org.apache.myfaces.el.FlashELResolver;
34  import org.apache.myfaces.el.unified.resolver.CompositeComponentELResolver;
35  import org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.Scope;
36  import org.apache.myfaces.el.unified.resolver.ManagedBeanResolver;
37  import org.apache.myfaces.el.unified.resolver.ResourceBundleResolver;
38  import org.apache.myfaces.el.unified.resolver.ResourceResolver;
39  import org.apache.myfaces.el.unified.resolver.ScopedAttributeResolver;
40  import org.apache.myfaces.el.unified.resolver.implicitobject.ImplicitObjectResolver;
41  
42  /**
43   * Create the el resolver for faces. see 1.2 spec section 5.6.2
44   * 
45   * @author Mathias Broekelmann (latest modification by $Author: martinkoci $)
46   * @version $Revision: 1100307 $ $Date: 2011-05-06 13:08:06 -0500 (Fri, 06 May 2011) $
47   */
48  public class ResolverBuilderForFaces extends ResolverBuilderBase implements ELResolverBuilder
49  {
50      public ResolverBuilderForFaces(RuntimeConfig config)
51      {
52          super(config);
53      }
54  
55      public void build(CompositeELResolver compositeElResolver)
56      {
57          // add the ELResolvers to a List first to be able to sort them
58          List<ELResolver> list = new ArrayList<ELResolver>();
59          
60          list.add(ImplicitObjectResolver.makeResolverForFaces());
61          list.add(new CompositeComponentELResolver());
62  
63          addFromRuntimeConfig(list);
64  
65          //Flash object is instanceof Map, so it is necessary to resolve
66          //before MapELResolver. Better to put this one before
67          list.add(new FlashELResolver());
68          list.add(new ManagedBeanResolver());
69          list.add(new ResourceResolver());
70          list.add(new ResourceBundleELResolver());
71          list.add(new ResourceBundleResolver());
72          list.add(new MapELResolver());
73          list.add(new ListELResolver());
74          list.add(new ArrayELResolver());
75          list.add(new BeanELResolver());
76          
77          // give the user a chance to sort the resolvers
78          sortELResolvers(list, Scope.Faces);
79          
80          // give the user a chance to filter the resolvers
81          Iterable<ELResolver> filteredELResolvers = filterELResolvers(list, Scope.Faces);
82          
83          // add the resolvers from the list to the CompositeELResolver
84          for (ELResolver resolver : filteredELResolvers)
85          {
86              compositeElResolver.add(resolver);
87          }
88          
89          // the ScopedAttributeResolver has to be the last one in every
90          // case, because it always sets propertyResolved to true (per the spec)
91          compositeElResolver.add(new ScopedAttributeResolver());
92      }
93  
94  }