Skip to main content

[el-spec commits] [el-spec~source-code:103] Add support for LINQ functions

  • From: kchung@...
  • To: commits@...
  • Subject: [el-spec commits] [el-spec~source-code:103] Add support for LINQ functions
  • Date: Fri, 25 May 2012 00:54:29 +0000

Project:    el-spec
Repository: source-code
Revision:   103
Author:     kchung
Date:       2012-05-25 00:49:18 UTC
Link:       

Log Message:
------------
Add support for LINQ functions



Revisions:
----------
103


Modified Paths:
---------------
trunk/api/src/main/java/javax/el/ELManager.java
trunk/api/src/main/java/javax/el/StandardELContext.java
trunk/api/src/main/java/javax/el/package.html
trunk/api/src/main/java/javax/el/FunctionMapper.java
trunk/api/src/main/java/javax/el/EvaluationListener.java
trunk/api/src/main/java/javax/el/ExpressionFactory.java


Diffs:
------
Index: trunk/api/src/main/java/javax/el/EvaluationListener.java
===================================================================
--- trunk/api/src/main/java/javax/el/EvaluationListener.java    (revision 102)
+++ trunk/api/src/main/java/javax/el/EvaluationListener.java    (revision 103)
@@ -76,7 +76,7 @@
     /**
      * Notifies the listeners before an EL expression is evaluated
      * @param context The ELContext
-     * @param expression The EL expression string to be evaluated
+     * @param expr The EL expression string to be evaluated
      */
     public static void notifyBeforeEvaluation(ELContext context, String 
expr) {
         if (context.getEvaluationListeners() == null)
@@ -89,7 +89,7 @@
     /**
      * Notifies the listeners after an EL expression is evaluated
      * @param context The ELContext
-     * @param expression The EL expression string that has been evaluated
+     * @param expr The EL expression string that has been evaluated
      */
     public static void notifyAfterEvaluation(ELContext context, String expr) 
{
         if (context.getEvaluationListeners() == null)
Index: trunk/api/src/main/java/javax/el/StandardELContext.java
===================================================================
--- trunk/api/src/main/java/javax/el/StandardELContext.java     (revision 102)
+++ trunk/api/src/main/java/javax/el/StandardELContext.java     (revision 103)
@@ -81,6 +81,11 @@
     private FunctionMapper functionMapper;
 
     /*
+     * The pre-confured init function map;
+     */
+    private Map<String, Method> initFunctionMap;
+
+    /*
      * The VariableMapper for this ELContext.
      */
     private VariableMapper variableMapper;
@@ -103,8 +108,9 @@
      *     LINQ query operators.  A null indicates that the implementation
      *     is not supported
      */
-    public StandardELContext(ELResolver queryOperatorELResolver) {
-        this.queryOperatorELResolver = queryOperatorELResolver;
+    public StandardELContext(ExpressionFactory factory) {
+        this.queryOperatorELResolver = factory.getQueryOperatorELResolver();
+        initFunctionMap = factory.getInitFunctionMap();
     }
 
     /**
@@ -221,7 +227,7 @@
     @Override
     public FunctionMapper getFunctionMapper() {
         if (functionMapper == null) {
-            functionMapper = new DefaultFunctionMapper();
+            functionMapper = new DefaultFunctionMapper(initFunctionMap);
         }
         return functionMapper;
     }
@@ -241,21 +247,21 @@
     private static class DefaultFunctionMapper extends FunctionMapper {
 
         private Map<String, Method> functions = null;
-        
+
+        DefaultFunctionMapper(Map<String, Method> initMap){
+            functions = (initMap == null)?
+                               new HashMap<String, Method>():
+                               new HashMap<String, Method>(initMap);
+        }
+
         @Override
         public Method resolveFunction(String prefix, String localName) {
-            if (functions == null) {
-                return null;
-            }
             return functions.get(prefix + ":" + localName);
         }
 
     
         @Override
         public void mapFunction(String prefix, String localName, Method 
meth){
-            if (functions == null) {
-                functions = new HashMap<String, Method>();
-            }
             functions.put(prefix + ":" + localName, meth);
         }
     }
Index: trunk/api/src/main/java/javax/el/package.html
===================================================================
--- trunk/api/src/main/java/javax/el/package.html       (revision 102)
+++ trunk/api/src/main/java/javax/el/package.html       (revision 103)
@@ -80,6 +80,7 @@
   <li><a href="#ExpressionObjects">Expression Objects</a></li>
   <li><a href="#ExpressionCreation">Creation of Expressions</a></li>
   <li><a href="#ExpressionEvaluation">Evaluation of Expressions</a></li>
+  <li><a href="#EvaluationListener">Evaluation Listeners</a></li>
   <li><a href="#Resolver">Resolution of Model Objects and their 
Properties</a></li>
   <li><a href="#Functions">EL Functions</a></li>
   <li><a href="#Variables">EL Variables</a></li>
@@ -175,6 +176,16 @@
 invoked by supplying the actual parameters at evaluation.  It plays
 an important role in the support for LINQ query operators.</p>
 
+<h3><a name="EvaluationListener">Evaluation Listeners</a></h3>
+<p>By registering {@link javax.el.EvaluationListener}s in ELContext, an user 
can
+receive notifications during the EL expression evaluations.  There are three
+events that trigger the notification:
+<ul>
+  <li>Before Evaluation</li>
+  <li>After Evalution</li>
+  <li>When (base, property) is resolved</li>
+</ul></p>
+
 <h3><a name="Resolver">Resolution of Model Objects and their 
Properties</a></h3>
 
 <p>Through the {@link javax.el.ELResolver} base class, the EL 
@@ -187,10 +198,6 @@
 arrays ({@link javax.el.ArrayELResolver}), JavaBeans ({@link 
javax.el.BeanELResolver}), <code>List</code>s ({@link 
javax.el.ListELResolver}), 
 <code>Map</code>s ({@link javax.el.MapELResolver}), and 
<code>ResourceBundle</code>s ({@link javax.el.ResourceBundleELResolver}).</p>
 
-<p>In version 3.0, EL also supports the
-<a href=" http://msdn.microsoft.com/en-us/library/bb394939.aspx";
-LINQ query operators</a> by implementing an ELResolver that resolves methods
-calls to this operators.</p> 
 <p>Tools can easily obtain more information about resolvable model objects 
and their 
 resolvable properties by calling
 method <code>getFeatureDescriptors</code> on the <code>ELResolver</code>. 
This method exposes objects
Index: trunk/api/src/main/java/javax/el/ExpressionFactory.java
===================================================================
--- trunk/api/src/main/java/javax/el/ExpressionFactory.java     (revision 102)
+++ trunk/api/src/main/java/javax/el/ExpressionFactory.java     (revision 103)
@@ -58,6 +58,9 @@
 
 package javax.el;
 
+import java.util.Map;
+import java.lang.reflect.Method;
+
 import java.util.Properties;
 
 /**
@@ -342,8 +345,8 @@
      * an <code>Iterable</code> and <code>property</code> is the name of the
      * operator.  Therefore, the operators behave like built-in methods of
      * <code>Iterable</code>s.</p>
-     * <p>See EL.2 for detailed descriptions of these operators, the
-     * arguments, and the return values.</p>
+     * <p>See EL.2 for detailed descriptions of these operators, their
+     * arguments, and return values.</p>
      *
      * @return The <code>ELResolver</code> that implements the Query 
Operators.
      *    If <code>null</code>, the query operators are not support by this
@@ -354,6 +357,23 @@
     public ELResolver getQueryOperatorELResolver() {
         return null;
     }
+
+    /**
+     * Retrieve a function map containing a pre-configured function
+     * mapping.  It should include, but not limited to the following
+     * functions.
+     * <ul>
+     * <li>linq:range</li>
+     * <li>linq:repeat</li>
+     * <li>linq:empty</li>
+     * </ul>
+     * @return A initial map for functions, null if there is none.
+     *
+     * @since EL 3.0
+     */
+    public Map<String, Method> getInitFunctionMap() {
+        return null;
+    }
 }
 
 
Index: trunk/api/src/main/java/javax/el/FunctionMapper.java
===================================================================
--- trunk/api/src/main/java/javax/el/FunctionMapper.java        (revision 102)
+++ trunk/api/src/main/java/javax/el/FunctionMapper.java        (revision 103)
@@ -99,6 +99,8 @@
    * @param meth The static method that is to be invoked, when the function 
is
    *     referenced.  The null value causes the function to be removed from 
the
    *     map.
+   *
+   * @Since EL 3.0
    */
   public void mapFunction(String prefix, String localName, Method meth) {
   }
Index: trunk/api/src/main/java/javax/el/ELManager.java
===================================================================
--- trunk/api/src/main/java/javax/el/ELManager.java     (revision 102)
+++ trunk/api/src/main/java/javax/el/ELManager.java     (revision 103)
@@ -70,8 +70,7 @@
      */
     public StandardELContext getELContext() {
         if (elContext == null) {
-            elContext = new StandardELContext(
-                            
getExpressionFactory().getQueryOperatorELResolver());
+            elContext = new StandardELContext(getExpressionFactory());
         }
         return elContext;
     }





[el-spec commits] [el-spec~source-code:103] Add support for LINQ functions

kchung 05/25/2012
 
 
Close
loading
Please Confirm
Close