You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by se...@apache.org on 2003/11/10 05:05:42 UTC

cvs commit: jakarta-turbine-fulcrum/intake/xdocs changes.xml

seade       2003/11/09 20:05:42

  Modified:    intake/src/java/org/apache/fulcrum/intake/model
                        FloatField.java DoubleField.java BooleanField.java
                        LongField.java Field.java IntegerField.java
                        ShortField.java
               intake/xdocs changes.xml
  Log:
  Porting changes from Turbine: 
  
    Make use of the emptyValue attribute on the field element when no value has been set.  This makes it possible to clear values in an existing object that is being overwritten with Intake data using group.setProperties(obj).
  
    Ensure an NPE does not occur when emptyValue is used to set an object's primitive properties.
  
  Revision  Changes    Path
  1.2       +17 -1     jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/FloatField.java
  
  Index: FloatField.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/FloatField.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FloatField.java	26 Sep 2003 13:52:25 -0000	1.1
  +++ FloatField.java	10 Nov 2003 04:05:41 -0000	1.2
  @@ -67,6 +67,7 @@
    * @author <a href="mailto:jmcnally@collab.net>John McNally</a>
    * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
    * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
  + * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
    * @version $Id$
    */
   public class FloatField
  @@ -121,6 +122,21 @@
           }
   
           emptyValue = new Double(prop);
  +    }
  +
  +    /**
  +     * Provides access to emptyValue such that the value returned will be 
  +     * acceptable as an argument parameter to Method.invoke.  Subclasses
  +     * that deal with primitive types should ensure that they return an 
  +     * appropriate value wrapped in the object wrapper class for the 
  +     * primitive type.
  +     *   
  +     * @return the value to use when the field is empty or an Object that
  +     * wraps the empty value for primitive types.
  +     */
  +    protected Object getSafeEmptyValue()
  +    {
  +        return (null == getEmptyValue()) ? new Float(0.0) : getEmptyValue(); 
       }
   
       /**
  
  
  
  1.2       +17 -1     jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/DoubleField.java
  
  Index: DoubleField.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/DoubleField.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DoubleField.java	26 Sep 2003 13:52:25 -0000	1.1
  +++ DoubleField.java	10 Nov 2003 04:05:41 -0000	1.2
  @@ -64,6 +64,7 @@
    * Creates Double Field objects.
    *
    * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
  + * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
    * @version $Id$
    */
   public class DoubleField
  @@ -117,6 +118,21 @@
           }
   
           emptyValue = new Double(prop);
  +    }
  +
  +    /**
  +     * Provides access to emptyValue such that the value returned will be 
  +     * acceptable as an argument parameter to Method.invoke.  Subclasses
  +     * that deal with primitive types should ensure that they return an 
  +     * appropriate value wrapped in the object wrapper class for the 
  +     * primitive type.
  +     *   
  +     * @return the value to use when the field is empty or an Object that
  +     * wraps the empty value for primitive types.
  +     */
  +    protected Object getSafeEmptyValue()
  +    {
  +        return (null == getEmptyValue()) ? new Double(0.0) : getEmptyValue(); 
       }
   
       /**
  
  
  
  1.2       +17 -1     jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/BooleanField.java
  
  Index: BooleanField.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/BooleanField.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BooleanField.java	26 Sep 2003 13:52:25 -0000	1.1
  +++ BooleanField.java	10 Nov 2003 04:05:41 -0000	1.2
  @@ -67,6 +67,7 @@
    * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
    * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
    * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
  + * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
    * @version $Id$
    */
   public class BooleanField
  @@ -113,6 +114,21 @@
           }
   
           emptyValue = new Boolean(prop);
  +    }
  +
  +    /**
  +     * Provides access to emptyValue such that the value returned will be 
  +     * acceptable as an argument parameter to Method.invoke.  Subclasses
  +     * that deal with primitive types should ensure that they return an 
  +     * appropriate value wrapped in the object wrapper class for the 
  +     * primitive type.
  +     *   
  +     * @return the value to use when the field is empty or an Object that
  +     * wraps the empty value for primitive types.
  +     */
  +    protected Object getSafeEmptyValue()
  +    {
  +        return (null == getEmptyValue()) ? Boolean.FALSE : getEmptyValue(); 
       }
   
       /**
  
  
  
  1.2       +17 -1     jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/LongField.java
  
  Index: LongField.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/LongField.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LongField.java	26 Sep 2003 13:52:25 -0000	1.1
  +++ LongField.java	10 Nov 2003 04:05:41 -0000	1.2
  @@ -65,6 +65,7 @@
    *
    * @author <a href="mailto:jmcnally@collab.net>John McNally</a>
    * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
  + * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
    * @version $Id$
    */
   public class LongField
  @@ -119,6 +120,21 @@
           }
   
           emptyValue = new Long(prop);
  +    }
  +
  +    /**
  +     * Provides access to emptyValue such that the value returned will be 
  +     * acceptable as an argument parameter to Method.invoke.  Subclasses
  +     * that deal with primitive types should ensure that they return an 
  +     * appropriate value wrapped in the object wrapper class for the 
  +     * primitive type.
  +     *   
  +     * @return the value to use when the field is empty or an Object that
  +     * wraps the empty value for primitive types.
  +     */
  +    protected Object getSafeEmptyValue()
  +    {
  +        return (null == getEmptyValue()) ? new Long(0l) : getEmptyValue(); 
       }
   
       /**
  
  
  
  1.4       +38 -24    jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/Field.java
  
  Index: Field.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/Field.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Field.java	10 Nov 2003 03:49:37 -0000	1.3
  +++ Field.java	10 Nov 2003 04:05:41 -0000	1.4
  @@ -625,7 +625,6 @@
                   }
               }
   
  -
               if (validator != null)
               {
                   // set the test value as a String[] which might be replaced by
  @@ -889,39 +888,39 @@
           if (isSet())
           {
               valArray[0] = getTestValue();
  -
               if (isDebugEnabled)
               {
                   log.debug(name + ": Property is set, value is " + valArray[0]);
               }
  -
  -            try
  -            {
  -                setter.invoke(obj, valArray);
  -            }
  -            catch (IllegalAccessException e)
  -            {
  -                throwSetGetException("setter", obj, this.getDisplayName(),
  -                        this.group.getIntakeGroupName(), e);
  -            }
  -            catch (IllegalArgumentException e)
  -            {
  -                throwSetGetException("setter", obj, this.getDisplayName(),
  -                        this.group.getIntakeGroupName(), e);
  -            }
  -            catch (InvocationTargetException e)
  -            {
  -                throwSetGetException("setter", obj, this.getDisplayName(),
  -                        this.group.getIntakeGroupName(), e);
  -            }
           }
           else
           {
  +            valArray[0] = getSafeEmptyValue();
               if (isDebugEnabled)
               {
  -                log.debug(name+ ": Property is not set, skipping");
  +                log.debug(name + ": Property is not set, using emptyValue " + valArray[0]);
               }
           }
  +
  +        try
  +        {
  +            setter.invoke(obj, valArray);
  +        }
  +        catch (IllegalAccessException e)
  +        {
  +            throwSetGetException("setter", obj, this.getDisplayName(),
  +                    this.group.getIntakeGroupName(), e);
  +        }
  +        catch (IllegalArgumentException e)
  +        {
  +            throwSetGetException("setter", obj, this.getDisplayName(),
  +                    this.group.getIntakeGroupName(), e);
  +        }
  +        catch (InvocationTargetException e)
  +        {
  +            throwSetGetException("setter", obj, this.getDisplayName(),
  +                    this.group.getIntakeGroupName(), e);
  +        }
       }
   
       /**
  @@ -963,6 +962,21 @@
       public Object getEmptyValue()
       {
           return emptyValue;
  +    }
  +
  +    /**
  +     * Provides access to emptyValue such that the value returned will be 
  +     * acceptable as an argument parameter to Method.invoke.  Subclasses
  +     * that deal with primitive types should ensure that they return an 
  +     * appropriate value wrapped in the object wrapper class for the 
  +     * primitive type.
  +     *   
  +     * @return the value to use when the field is empty or an Object that
  +     * wraps the empty value for primitive types.
  +     */
  +    protected Object getSafeEmptyValue()
  +    {
  +        return getEmptyValue();
       }
   
       /**
  
  
  
  1.2       +17 -1     jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/IntegerField.java
  
  Index: IntegerField.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/IntegerField.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- IntegerField.java	26 Sep 2003 13:52:25 -0000	1.1
  +++ IntegerField.java	10 Nov 2003 04:05:41 -0000	1.2
  @@ -64,6 +64,7 @@
    * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
    * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
    * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
  + * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
    * @version $Id$
    */
   public class IntegerField
  @@ -118,6 +119,21 @@
           }
   
           emptyValue = new Integer(prop);
  +    }
  +
  +    /**
  +     * Provides access to emptyValue such that the value returned will be 
  +     * acceptable as an argument parameter to Method.invoke.  Subclasses
  +     * that deal with primitive types should ensure that they return an 
  +     * appropriate value wrapped in the object wrapper class for the 
  +     * primitive type.
  +     *   
  +     * @return the value to use when the field is empty or an Object that
  +     * wraps the empty value for primitive types.
  +     */
  +    protected Object getSafeEmptyValue()
  +    {
  +        return (null == getEmptyValue()) ? new Integer(0) : getEmptyValue(); 
       }
   
       /**
  
  
  
  1.2       +18 -1     jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/ShortField.java
  
  Index: ShortField.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-fulcrum/intake/src/java/org/apache/fulcrum/intake/model/ShortField.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ShortField.java	26 Sep 2003 13:52:25 -0000	1.1
  +++ ShortField.java	10 Nov 2003 04:05:41 -0000	1.2
  @@ -65,6 +65,7 @@
    *
    * @author <a href="mailto:jmcnally@collab.net>John McNally</a>
    * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
  + * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
    * @version $Id$
    */
   public class ShortField
  @@ -119,6 +120,22 @@
           }
   
           emptyValue = new Short(prop);
  +    }
  +
  +    /**
  +     * Provides access to emptyValue such that the value returned will be 
  +     * acceptable as an argument parameter to Method.invoke.  Subclasses
  +     * that deal with primitive types should ensure that they return an 
  +     * appropriate value wrapped in the object wrapper class for the 
  +     * primitive type.
  +     *   
  +     * @return the value to use when the field is empty or an Object that
  +     * wraps the empty value for primitive types.
  +     */
  +    protected Object getSafeEmptyValue()
  +    {
  +        return (null == getEmptyValue()) 
  +                ? new Short((short) 0) : getEmptyValue(); 
       }
   
       /**
  
  
  
  1.5       +11 -0     jakarta-turbine-fulcrum/intake/xdocs/changes.xml
  
  Index: changes.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-fulcrum/intake/xdocs/changes.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- changes.xml	10 Nov 2003 03:49:37 -0000	1.4
  +++ changes.xml	10 Nov 2003 04:05:42 -0000	1.5
  @@ -31,6 +31,17 @@
          <em>$group.foo.StringValue</em> rather than <em>$group.foo.Value</em> 
          (you can do this for all values, not just DateString).
         </action>
  +      <action>
  +       Intake now makes use of the the emptyValue attribute from the field 
  +       elements when mapping from the group to the object when no value has 
  +       been set.  This makes it possible to clear values in an existing object
  +       that is being overwritten with Intake data using 
  +       <em>group.setProperties(obj)</em> (or you can provide non-null values
  +       in your intake.xml file).  Make sure you do not inadvertently include 
  +       the primary key for the object in the intake group without actually 
  +       setting it to the appropriate value (it shouldn't be in the group 
  +       anyway).
  +      </action>
        
       </release>
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org