Skip to main content

[el-spec commits] [el-spec~source-code:79] Remove assignValue from ELResolver, as setValue can be used for its purpo

  • From: kchung@...
  • To: commits@...
  • Subject: [el-spec commits] [el-spec~source-code:79] Remove assignValue from ELResolver, as setValue can be used for its purpo
  • Date: Mon, 16 Apr 2012 21:14:12 +0000

Project:    el-spec
Repository: source-code
Revision:   79
Author:     kchung
Date:       2012-04-16 21:14:10 UTC
Link:       

Log Message:
------------
Remove assignValue from ELResolver, as setValue can be used for its purpose.



Revisions:
----------
79


Modified Paths:
---------------
trunk/api/src/main/java/javax/el/StandardELContext.java
trunk/api/src/main/java/javax/el/ArrayELResolver.java
trunk/api/src/main/java/javax/el/CompositeELResolver.java
trunk/api/src/main/java/javax/el/ELResolver.java
trunk/api/src/main/java/javax/el/ResourceBundleELResolver.java
trunk/api/src/main/java/javax/el/ListELResolver.java
trunk/api/src/main/java/javax/el/BeanNameResolver.java
trunk/api/src/main/java/javax/el/MapELResolver.java
trunk/api/src/main/java/javax/el/BeanNameELResolver.java
trunk/api/src/main/java/javax/el/BeanELResolver.java
trunk/api/src/main/java/javax/el/StaticFieldELResolver.java


Diffs:
------
Index: trunk/api/src/main/java/javax/el/CompositeELResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/CompositeELResolver.java   (revision 78)
+++ trunk/api/src/main/java/javax/el/CompositeELResolver.java   (revision 79)
@@ -398,71 +398,6 @@
     }
 
     /**
-     * Attempts to assign the value of the given <code>property</code>
-     * object on the given <code>base</code> object. All component
-     * resolvers are asked to attempt to assign the value.
-     *
-     * <p>If this resolver handles the given (base, property) pair,
-     * the <code>propertyResolved</code> property of the
-     * <code>ELContext</code> object must be set to <code>true</code>
-     * by the resolver, before returning. If this property is not
-     * <code>true</code> after this method is called, the caller can
-     * safely assume no value has been set.</p>
-     *
-     * <p>First, <code>propertyResolved</code> is set to <code>false</code> 
on
-     * the provided <code>ELContext</code>.</p>
-     *
-     * <p>Next, for each component resolver in this composite:
-     * <ol>
-     *   <li>The <code>assignValue()</code> method is called, passing in
-     *       the provided <code>context</code>, <code>base</code>,
-     *       <code>property</code> and <code>value</code>.</li>
-     *   <li>If the <code>ELContext</code>'s <code>propertyResolved</code>
-     *       flag is <code>false</code> then iteration continues.</li>
-     *   <li>Otherwise, iteration stops and no more component resolvers are
-     *       considered.</li>
-     * </ol></p>
-     *
-     * <p>If none of the component resolvers were able to perform this
-     * operation, the <code>propertyResolved</code> flag remains set to
-     * <code>false</code></p>.
-     *
-     * <p>Any exception thrown by component resolvers during the iteration
-     * is propagated to the caller of this method.</p>
-     *
-     * @param context The context of this evaluation.
-     * @param base The base object whose property value is to be set,
-     *     or <code>null</code> to set a top-level variable.
-     * @param property The property or variable to be set.
-     * @param val The value to set the property or variable to.
-     * @throws NullPointerException if context is <code>null</code>
-     * @throws PropertyNotFoundException if the given (base, property) pair
-     *     is handled by this <code>ELResolver</code> but the specified
-     *     variable or property does not exist.
-     * @throws PropertyNotWritableException if the given (base, property)
-     *     pair is handled by this <code>ELResolver</code> but the specified
-     *     variable or property is not writable.
-     * @throws ELException if an exception was thrown while attempting to
-     *     set the property or variable. The thrown exception
-     *     must be included as the cause property of this exception, if
-     *     available.
-     */
-    public void assignValue(ELContext context,
-                         Object base,
-                         Object property,
-                         Object val) {
-
-        context.setPropertyResolved(false);
-
-        for (int i = 0; i < size; i++) {
-            elResolvers[i].assignValue(context, base, property, val);
-            if (context.isPropertyResolved()) {
-                return;
-            }
-        }
-    }
-
-    /**
      * For a given <code>base</code> and <code>property</code>, attempts to
      * determine whether a call to {@link #setValue} will always fail. The
      * result is obtained by querying all component resolvers.
Index: trunk/api/src/main/java/javax/el/BeanELResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/BeanELResolver.java        (revision 78)
+++ trunk/api/src/main/java/javax/el/BeanELResolver.java        (revision 79)
@@ -458,38 +458,6 @@
     }
 
     /**
-     * Attempts to assign the value to the given <code>property</code>
-     * object on the given <code>base</code> object.
-     * <p>Behaves exactly the same as {@link #setValue}, except when the
-     * specified property is not a property of the base object, in which
-     * case it just returns without setting the <code>propertyResolved</code>
-     * property</p>.
-     *
-     * @param context The context of this evaluation.
-     * @param base The bean on which to set the property.
-     * @param property The name of the property to set. Will be coerced to
-     *     a <code>String</code>.
-     * @param val The value to be associated with the specified key.
-     * @throws NullPointerException if context is <code>null</code>.
-     * @throws PropertyNotWritableException if this resolver was constructed
-     *     in read-only mode, or if there is no setter for the property.
-     * @throws ELException if an exception was thrown while performing
-     *     the property or variable resolution. The thrown exception
-     *     must be included as the cause property of this exception, if
-     *     available.
-     */
-    public void assignValue(ELContext context,
-                            Object base,
-                            Object property,
-                            Object val) {
-        try {
-            setValue(context, base, property, val);
-        } catch (PropertyNotFoundException ex) {
-        }
-    }
-
-
-    /**
      * If the base object is not <code>null</code>, invoke the method, with
      * the given parameters on this bean.  The return value from the method
      * is returned.
Index: trunk/api/src/main/java/javax/el/BeanNameELResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/BeanNameELResolver.java    (revision 78)
+++ trunk/api/src/main/java/javax/el/BeanNameELResolver.java    (revision 79)
@@ -116,7 +116,8 @@
      * the BeanNameResolver, the bean in the BeanNameResolver is set to the
      * given value.
      *
-     * <p>If the name is resolvable by the BeanNameResolver,
+     * <p>If the name is resolvable by the BeanNameResolver, or if the
+     * BeanNameResolver allows creating a new bean,
      * the <code>propertyResolved</code> property of the
      * <code>ELContext</code> object must be set to <code>true</code>
      * by the resolver, before returning. If this property is not
@@ -145,57 +146,13 @@
         if (base == null && property instanceof String) {
             String beanName = (String) property;
             Object bean = beanNameResolver.getBean(beanName);
-            if (bean != null) {
-                if (beanNameResolver.isReadOnly(beanName)) {
-                    throw new PropertyNotWritableException("The bean " +
-                        beanName + " is not writable.");
-                }
-                context.setPropertyResolved(true);
+            if (bean != null || beanNameResolver.canCreateBean(beanName)) {
                 beanNameResolver.setBeanValue(beanName, value);
-            }
-        }
-    }
-
-    /**
-     * If the base object is null, attempts to set the given value to the
-     * bean given by the name (property).  If the name does not exist,
-     * attempts to create one, if bean creation is supportted by the
-     * <code>BeanNameResolver</code>.
-     * <p>If the name is resolvable or created by the BeanNameResolver,
-     * the <code>propertyResolved</code> property of the
-     * <code>ELContext</code> object must be set to <code>true</code>
-     * by the resolver, before returning. If this property is not
-     * <code>true</code> after this method is called, the caller can
-     * safely assume no value has been set.</p>
-     *
-     * @param context The context of this evaluation.
-     * @param base <code>null</code>
-     * @param property The name of the bean
-     * @param value The value to set the bean with the given name to.
-     * @throws NullPointerException if context is <code>null</code>
-     */
-    public void assignValue(ELContext context,
-                            Object base,
-                            Object property,
-                            Object value) {
-
-        if (context == null) {
-            throw new NullPointerException();
-        }
-        if (base == null && property instanceof String) {
-            String beanName = (String) property;
-            if (beanNameResolver.createBean(beanName)) {
-                if (beanNameResolver.isReadOnly(beanName)) {
-                    throw new PropertyNotWritableException("The bean " +
-                        beanName + " is not writable.");
-                }
                 context.setPropertyResolved(true);
-                beanNameResolver.setBeanValue(beanName, value);
             }
         }
     }
 
-
     /**
      * If the base is null and the property is a name resolvable by
      * the BeanNameResolver, return the type of the bean.
Index: trunk/api/src/main/java/javax/el/StandardELContext.java
===================================================================
--- trunk/api/src/main/java/javax/el/StandardELContext.java     (revision 78)
+++ trunk/api/src/main/java/javax/el/StandardELContext.java     (revision 79)
@@ -333,7 +333,7 @@
         }
 
         @Override
-        public boolean createBean(String beanName) {
+        public boolean canCreateBean(String beanName) {
             return true;
         }
     }
Index: trunk/api/src/main/java/javax/el/ListELResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/ListELResolver.java        (revision 78)
+++ trunk/api/src/main/java/javax/el/ListELResolver.java        (revision 79)
@@ -291,27 +291,6 @@
         }
     }
 
-    /**
-     * If the base object is a list, attempts to set the value at the
-     * given index with the given value.
-     *
-     * <p>Behaves exactly the same as {@link #setValue}, except when the
-     * specified index (property coerced to an integer) is out of bound,
-     * in which case it just returns without setting the
-     * <code>propertyResolved</code> property.</p>
-     */
-    @Override
-    public void assignValue(ELContext context,
-                            Object base,
-                            Object property,
-                            Object val) {
-        try {
-            setValue(context, base, property, val);
-        } catch (PropertyNotFoundException ex) {
-        }
-    }
-
-
     static private Class<?> theUnmodifiableListClass =
         Collections.unmodifiableList(new ArrayList<Object>()).getClass();
 
Index: trunk/api/src/main/java/javax/el/MapELResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/MapELResolver.java (revision 78)
+++ trunk/api/src/main/java/javax/el/MapELResolver.java (revision 79)
@@ -272,17 +272,6 @@
     }
 
     /**
-     * Behaves exactly the same as {@link #setValue}, as it already allows
-     * creation of new map entries.
-     */
-    public void assignValue(ELContext context,
-                            Object base,
-                            Object property,
-                            Object val) {
-        setValue(context, base, property, val);
-    }
-
-    /**
      * If the base object is a map, returns whether a call to 
      * {@link #setValue} will always fail.
      *
Index: trunk/api/src/main/java/javax/el/ArrayELResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/ArrayELResolver.java       (revision 78)
+++ trunk/api/src/main/java/javax/el/ArrayELResolver.java       (revision 79)
@@ -267,45 +267,6 @@
         }
     }
 
-    /** 
-     * If the base object is a Java language array, attempts to set the
-     * value at the given index with the given value.
-     *
-     * <p>Behaves exactly the same as {@link #setValue}, except when the
-     * specified index (property coerced to an integer) is out of bound,
-     * in which case it just returns without setting the
-     * <code>propertyResolved</code> property.</p>
-     *
-     * @param context The context of this evaluation.
-     * @param base The array to be modified. Only bases that are Java 
language
-     *     arrays are handled by this resolver.
-     * @param property The index of the value to be set. Will be coerced
-     *     into an integer.
-     * @param val The value to be set at the given index.
-     * @throws ClassCastException if the class of the specified element
-     *     prevents it from being added to this array.
-     * @throws NullPointerException if context is <code>null</code>.
-     * @throws IllegalArgumentException if the property could not be coerced
-     *     into an integer, or if some aspect of the specified element
-     *     prevents it from being added to this array.
-     * @throws PropertyNotWritableException if this resolver was constructed
-     *     in read-only mode.
-     * @throws ELException if an exception was thrown while performing
-     *     the property or variable resolution. The thrown exception
-     *     must be included as the cause property of this exception, if
-     *     available.
-     */
-    @Override
-    public void assignValue(ELContext context,
-                            Object base,
-                            Object property,
-                            Object val) {
-        try {
-            setValue(context, base, property, val);
-        } catch (PropertyNotFoundException ex) {
-        }
-    }
-
     /**
      * If the base object is a Java language array, returns whether a call 
to 
      * {@link #setValue} will always fail.
Index: trunk/api/src/main/java/javax/el/ELResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/ELResolver.java    (revision 78)
+++ trunk/api/src/main/java/javax/el/ELResolver.java    (revision 79)
@@ -108,8 +108,7 @@
  * are combined together using {@link CompositeELResolver}s, to define
  * rich semantics for evaluating an expression.</p>
  *
- * <p>For the {@link #getValue}, {@link #getType}, {@link #setValue},
- * {@link #assignValue}, and
+ * <p>For the {@link #getValue}, {@link #getType}, {@link #setValue}, and
  * {@link #isReadOnly} methods, an <code>ELResolver</code> is not
  * responsible for resolving all possible (base, property) pairs. In fact,
  * most resolvers will only handle a <code>base</code> of a single type.
@@ -300,49 +299,6 @@
                                   Object property,
                                   Object value);
 
-    /**
-     * Attempts to assign the value to the given <code>property</code> 
-     * object on the given <code>base</code> object.
-     *
-     * <p>If the (base, property) pair is handled by this
-     * <code>ELResolver</code>, and the property exists, the property
-     * is set to the given value, just like {@link #setValue}.</p>
-     *
-     * <p>If the (base, property) pair is handled by this
-     * <code>ELResolver</code>, and the property does not exists, it can
-     * support the assignment operation by "creating" the property and
-     * set it to the given value, so that
-     * a subsequent call to <code>getValue</code> on the (base, property) 
will
-     * be resolved to the given value.</p>
-     *
-     * <p>If this ELResolver does not support the assignment operation,
-     * it should return without setting the <code>propertyResolved<code>
-     * property.</p>
-     *
-     * <p>To support the EL assignment operator, there should be one
-     * <code>ELResolver</code> in the <code>ELResolver</code> chain that
-     * supports the assignment operation.   Otherwise, a
-     * <code>ProperNotWritbleException</code> will be thrown.</p>
-     *
-     * @param context The context of this evaluation.
-     * @param base The base object whose property value is to be assigned,
-     *     or <code>null</code> to assign a top-level variable.
-     * @param property The property or variable to be assigned.
-     * @param value The value to assign the property or variable to.
-     *
-     * @throws NullPointerException if context is <code>null</code>
-     * @throws ELException if an exception was thrown while attempting to
-     *     set the property or variable. The thrown exception
-     *     must be included as the cause property of this exception, if
-     *     available.
-     *
-     * @since EL 3.0
-     */ 
-    public void assignValue(ELContext context,
-                            Object base,
-                            Object property,
-                            Object value) {
-    }
 
     /**
      * For a given <code>base</code> and <code>property</code>, attempts to
Index: trunk/api/src/main/java/javax/el/ResourceBundleELResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/ResourceBundleELResolver.java      
(revision 78)
+++ trunk/api/src/main/java/javax/el/ResourceBundleELResolver.java      
(revision 79)
@@ -215,15 +215,6 @@
     }
 
     /**
-     * Behaves exactly the same as {@link #setValue}.
-     */
-    @Override
-    public void assignValue(ELContext context, Object base, Object property,
-            Object value) {
-        setValue(context, base, property, value);
-    }
-
-    /**
      * If the base object is not null and an instanceof {@link 
ResourceBundle},
      * return <code>true</code>.
      * 
Index: trunk/api/src/main/java/javax/el/BeanNameResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/BeanNameResolver.java      (revision 78)
+++ trunk/api/src/main/java/javax/el/BeanNameResolver.java      (revision 79)
@@ -43,7 +43,7 @@
 /**
  * Resolves a bean by its known name.
  * This class can be extended to return a bean object given its name,
- * or to set a value to an existing bean.
+ * to set a value to an existing bean, or to create a bean with the value.
  * @see BeanNameELResolver
  *
  * @since EL 3.0
@@ -60,11 +60,14 @@
     }
 
     /**
-     * Sets a value to an existing bean of the given name.
+     * Sets a value to a bean of the given name.
+     * If the bean of the given name
+     * does not exist and if {@link #canCreateBean} is <code>true</code>,
+     * one is created with the given value.
      * @param beanName The name of the bean
      * @param value The value to set the bean to.
-     * @throws PropertyNotWritableException if setting a new bean for the 
given
-     *    name is not allowed.
+     * @throws PropertyNotWritableException if the bean cannot be
+     *     modified or created.
      */
     public void setBeanValue(String beanName, Object value)
              throws PropertyNotWritableException {
@@ -82,12 +85,12 @@
     }
 
     /**
-     * Creates a bean of the given name if it does not exist.
+     * Allow creating a bean of the given name if it does not exist.
      * @param beanName The name of the bean
      * @return <code>true</code> if bean creation is supported
      *    <code>false</code> otherwise.
      */
-    public boolean createBean(String beanName) {
+    public boolean canCreateBean(String beanName) {
         return false;
     }
 }
Index: trunk/api/src/main/java/javax/el/StaticFieldELResolver.java
===================================================================
--- trunk/api/src/main/java/javax/el/StaticFieldELResolver.java (revision 78)
+++ trunk/api/src/main/java/javax/el/StaticFieldELResolver.java (revision 79)
@@ -147,15 +147,6 @@
     }
 
     /**
-     * Behaves exactly the same as {@link #setValue}.
-     */
-    @Override
-    public void assignValue(ELContext context, Object base, Object property,
-            Object value) {
-        setValue(context, base, property, value);
-    }
-
-    /**
      * <p>Invokes a public static method or the constructor for a class.</p>
      *
      * If the base object is an instance of <code>ELClass</code> and the





[el-spec commits] [el-spec~source-code:79] Remove assignValue from ELResolver, as setValue can be used for its purpo

kchung 04/16/2012
 
 
Close
loading
Please Confirm
Close