commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rdon...@apache.org
Subject cvs commit: jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/expression MethodUpdater.java
Date Wed, 01 Dec 2004 19:33:01 GMT
rdonkin     2004/12/01 11:33:01

  Modified:    betwixt/src/java/org/apache/commons/betwixt
                        BeanProperty.java
               betwixt/src/java/org/apache/commons/betwixt/expression
                        MethodUpdater.java
  Log:
  Improved introspection support for dynabeans
  
  Revision  Changes    Path
  1.11      +2 -1      jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/BeanProperty.java
  
  Index: BeanProperty.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/BeanProperty.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- BeanProperty.java	8 Nov 2004 22:29:11 -0000	1.10
  +++ BeanProperty.java	1 Dec 2004 19:33:01 -0000	1.11
  @@ -21,6 +21,7 @@
   
   import org.apache.commons.beanutils.DynaProperty;
   import org.apache.commons.betwixt.expression.DynaBeanExpression;
  +import org.apache.commons.betwixt.expression.DynaBeanUpdater;
   import org.apache.commons.betwixt.expression.Expression;
   import org.apache.commons.betwixt.expression.IteratorExpression;
   import org.apache.commons.betwixt.expression.MethodExpression;
  @@ -97,7 +98,7 @@
           this.propertyName = dynaProperty.getName();
           this.propertyType = dynaProperty.getType();
           this.propertyExpression = new DynaBeanExpression( propertyName );
  -        // todo: add updater
  +        this.propertyUpdater = new DynaBeanUpdater( propertyName, propertyType );
       }
   
       /**
  
  
  
  1.14      +19 -79    jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/expression/MethodUpdater.java
  
  Index: MethodUpdater.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/expression/MethodUpdater.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- MethodUpdater.java	13 Jun 2004 21:32:45 -0000	1.13
  +++ MethodUpdater.java	1 Dec 2004 19:33:01 -0000	1.14
  @@ -15,9 +15,8 @@
    */ 
   package org.apache.commons.betwixt.expression;
   
  -import java.lang.reflect.Array;
  +
   import java.lang.reflect.Method;
  -import java.util.Collection;
   
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
  @@ -29,7 +28,7 @@
     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
     * @version $Revision$
     */
  -public class MethodUpdater implements Updater {
  +public class MethodUpdater extends TypedUpdater {
   
       /** Logger */
       private static Log log = LogFactory.getLog( MethodUpdater.class );
  @@ -44,9 +43,6 @@
       
       /** The method to call on the bean */
       private Method method;
  -    /** The type of the first parameter of the method */
  -    private Class valueType;
  -    
       /** Base constructor */
       public MethodUpdater() {
       }
  @@ -60,69 +56,6 @@
       }
   
       /** 
  -     * Updates the current bean context with the given String value 
  -     * @param context the Context to be updated
  -     * @param newValue the update to this new value 
  -     */
  -    public void update(Context context, Object newValue) {
  -        Object bean = context.getBean();
  -        if ( bean != null ) {
  -            if ( newValue instanceof String ) {
  -                // try to convert into primitive types
  -                if ( log.isTraceEnabled() ) {
  -                    log.trace("Converting primitive to " + valueType);
  -                }
  -                newValue = context.getObjectStringConverter()
  -                    .stringToObject( (String) newValue, valueType, null, context );
  -            }
  -            if ( newValue != null ) {
  -                // check that it is of the correct type
  -/*                
  -                if ( ! valueType.isAssignableFrom( newValue.getClass() ) ) {
  -                    log.warn( 
  -                        "Cannot call setter method: " + method.getName() + " on bean: "
+ bean
  -                        + " with type: " + bean.getClass().getName() 
  -                        + " as parameter should be of type: " + valueType.getName() 
  -                        + " but is: " + newValue.getClass().getName() 
  -                    );
  -                    return;
  -                }
  -*/                
  -            }
  -            // special case for collection objects into arrays                    
  -            if (newValue instanceof Collection && valueType.isArray()) {
  -                Collection valuesAsCollection = (Collection) newValue;
  -                Class componentType = valueType.getComponentType();
  -                if (componentType != null) {
  -                    Object[] valuesAsArray = 
  -                        (Object[]) Array.newInstance(componentType, valuesAsCollection.size());
  -                    newValue = valuesAsCollection.toArray(valuesAsArray);
  -                }
  -            }
  -            
  -            Object[] arguments = { newValue };
  -            try {
  -                if ( log.isDebugEnabled() ) {
  -                    log.debug( 
  -                        "Calling setter method: " + method.getName() + " on bean: " + bean

  -                        + " with new value: " + newValue 
  -                    );
  -                }
  -                method.invoke( bean, arguments );
  -                
  -            } catch (Exception e) {
  -                String valueTypeName = (newValue != null) ? newValue.getClass().getName()
: "null";
  -                log.warn( 
  -                    "Cannot evaluate method: " + method.getName() + " on bean: " + bean

  -                    + " of type: " + bean.getClass().getName() + " with value: " + newValue

  -                    + " of type: " + valueTypeName 
  -                );
  -                handleException(context, e);
  -            }
  -        }
  -    }
  -
  -    /** 
        * Gets the method which will be invoked by the update
        *
        * @return the Method to be invoked by the update
  @@ -141,20 +74,13 @@
           if ( types == null || types.length <= 0 ) {
               throw new IllegalArgumentException( "The Method must have at least one parameter"
);
           }
  -        this.valueType = types[0];
  +        setValueType(types[0]);
       }
       
       // Implementation methods
       //-------------------------------------------------------------------------    
       
  -    /** 
  -     * Strategy method to allow derivations to handle exceptions differently.
  -     * @param context the Context being updated when this exception occured
  -     * @param e the Exception that occured during the update
  -     */
  -    protected void handleException(Context context, Exception e) {
  -        log.info( "Caught exception: " + e, e );
  -    }
  +    
       
       /**
        * Returns something useful for logging.
  @@ -162,5 +88,19 @@
        */
       public String toString() {
           return "MethodUpdater [method=" + method + "]";
  +    }
  +
  +    /**
  +     * Updates the bean by method invocation.    
  +     */
  +    protected void executeUpdate(Context context, Object bean, Object newValue) throws
Exception {
  +        if ( log.isDebugEnabled() ) {
  +            log.debug( 
  +                "Calling setter method: " + method.getName() + " on bean: " + bean 
  +                + " with new value: " + newValue 
  +            );
  +        }
  +        Object[] arguments = { newValue };
  +        method.invoke( bean, arguments );
       }
   }
  
  
  

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


Mime
View raw message