You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by cr...@apache.org on 2002/01/17 00:31:38 UTC

cvs commit: jakarta-commons/beanutils/src/java/org/apache/commons/beanutils BeanUtils.java

craigmcc    02/01/16 15:31:37

  Modified:    beanutils/src/java/org/apache/commons/beanutils
                        BeanUtils.java
  Log:
  BeanUtils.populate() needed to become aware of DynaBean properties.
  
  Revision  Changes    Path
  1.7       +119 -70   jakarta-commons/beanutils/src/java/org/apache/commons/beanutils/BeanUtils.java
  
  Index: BeanUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/beanutils/src/java/org/apache/commons/beanutils/BeanUtils.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BeanUtils.java	19 Sep 2001 02:04:10 -0000	1.6
  +++ BeanUtils.java	16 Jan 2002 23:31:37 -0000	1.7
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons/beanutils/src/java/org/apache/commons/beanutils/BeanUtils.java,v 1.6 2001/09/19 02:04:10 craigmcc Exp $
  - * $Revision: 1.6 $
  - * $Date: 2001/09/19 02:04:10 $
  + * $Header: /home/cvs/jakarta-commons/beanutils/src/java/org/apache/commons/beanutils/BeanUtils.java,v 1.7 2002/01/16 23:31:37 craigmcc Exp $
  + * $Revision: 1.7 $
  + * $Date: 2002/01/16 23:31:37 $
    *
    * ====================================================================
    *
  @@ -87,7 +87,7 @@
    * @author Chris Audley
    * @author Rey Fran�ois
    * @author Gregor Ra�man
  - * @version $Revision: 1.6 $ $Date: 2001/09/19 02:04:10 $
  + * @version $Revision: 1.7 $ $Date: 2002/01/16 23:31:37 $
    */
   
   public class BeanUtils {
  @@ -472,16 +472,24 @@
   
               // Get the property descriptor of the requested property (if any)
               PropertyDescriptor descriptor = null;
  +            DynaProperty dynaProperty = null;
               try {
  -                descriptor = PropertyUtils.getPropertyDescriptor(bean, name);
  +                if (bean instanceof DynaBean) {
  +                    dynaProperty =
  +                       ((DynaBean) bean).getDynaClass().getDynaProperty(name);
  +                } else {
  +                    descriptor =
  +                        PropertyUtils.getPropertyDescriptor(bean, name);
  +                }
               } catch (Throwable t) {
                   /*
                   if (debug >= 1)
                       System.out.println("    getPropertyDescriptor: " + t);
                   */
                   descriptor = null;
  +                dynaProperty = null;
               }
  -            if (descriptor == null) {
  +            if ((descriptor == null) && (dynaProperty == null)) {
                   /*
                   if (debug >= 1)
                       System.out.println("    No such property, skipping");
  @@ -494,79 +502,120 @@
                                      descriptor + "'");
               */
   
  -            // Identify the relevant setter method (if there is one)
  -            Method setter = null;
  -            if (descriptor instanceof IndexedPropertyDescriptor)
  -                setter = ((IndexedPropertyDescriptor) descriptor).
  -                    getIndexedWriteMethod();
  -            else if (descriptor instanceof MappedPropertyDescriptor)
  -                setter =((MappedPropertyDescriptor) descriptor).getMappedWriteMethod();
  -
  -            if (setter == null)
  -                setter = descriptor.getWriteMethod();
  -            if (setter == null) {
  +            // Process differently for JavaBeans and DynaBeans
  +            if (descriptor != null) {
  +
  +                // Identify the relevant setter method (if there is one)
  +                Method setter = null;
  +                if (descriptor instanceof IndexedPropertyDescriptor)
  +                    setter = ((IndexedPropertyDescriptor) descriptor).
  +                        getIndexedWriteMethod();
  +                else if (descriptor instanceof MappedPropertyDescriptor)
  +                    setter =((MappedPropertyDescriptor) descriptor).getMappedWriteMethod();
  +
  +                if (setter == null)
  +                    setter = descriptor.getWriteMethod();
  +                if (setter == null) {
  +                    /*
  +                      if (debug >= 1)
  +                      System.out.println("    No setter method, skipping");
  +                    */
  +                    continue;
  +                }
  +                Class parameterTypes[] = setter.getParameterTypes();
                   /*
  -                if (debug >= 1)
  -                    System.out.println("    No setter method, skipping");
  +                  if (debug >= 1)
  +                  System.out.println("    Setter method is '" +
  +                  setter.getName() + "(" +
  +                  parameterTypes[0].getName() +
  +                  (parameterTypes.length > 1 ?
  +                  ", " + parameterTypes[1].getName() : "" )
  +                  + ")'");
                   */
  -                continue;
  -            }
  -            Class parameterTypes[] = setter.getParameterTypes();
  -            /*
  -            if (debug >= 1)
  -                System.out.println("    Setter method is '" +
  -                                   setter.getName() + "(" +
  -                                   parameterTypes[0].getName() +
  -                                   (parameterTypes.length > 1 ?
  -                                    ", " + parameterTypes[1].getName() : "" )
  -                                   + ")'");
  -            */
  -            Class parameterType = parameterTypes[0];
  -            if (parameterTypes.length > 1)
  -                parameterType = parameterTypes[1];      // Indexed or mapped setter
  -
  -            // Convert the parameter value as required for this setter method
  -            Object parameters[] = new Object[1];
  -            if (parameterTypes[0].isArray()) {
  -                if (value instanceof String) {
  -                    String values[] = new String[1];
  -                    values[0] = (String) value;
  -                    parameters[0] = ConvertUtils.convert((String[]) values,
  -                    parameterType);
  -                } else if (value instanceof String[]) {
  -                    parameters[0] = ConvertUtils.convert((String[]) value,
  -                    parameterType);
  +                Class parameterType = parameterTypes[0];
  +                if (parameterTypes.length > 1)
  +                    parameterType = parameterTypes[1];      // Indexed or mapped setter
  +
  +                // Convert the parameter value as required for this setter method
  +                Object parameters[] = new Object[1];
  +                if (parameterTypes[0].isArray()) {
  +                    if (value instanceof String) {
  +                        String values[] = new String[1];
  +                        values[0] = (String) value;
  +                        parameters[0] = ConvertUtils.convert((String[]) values,
  +                                                             parameterType);
  +                    } else if (value instanceof String[]) {
  +                        parameters[0] = ConvertUtils.convert((String[]) value,
  +                                                             parameterType);
  +                    } else {
  +                        parameters[0] = value;
  +                    }
                   } else {
  -                    parameters[0] = value;
  +                    if (value instanceof String) {
  +                        parameters[0] = ConvertUtils.convert((String) value,
  +                                                             parameterType);
  +                    } else if (value instanceof String[]) {
  +                        parameters[0] = ConvertUtils.convert(((String[]) value)[0],
  +                                                             parameterType);
  +                    } else {
  +                        parameters[0] = value;
  +                    }
  +                }
  +
  +                // Invoke the setter method
  +                try {
  +                    PropertyUtils.setProperty(bean, name, parameters[0]);
  +                } catch (NoSuchMethodException e) {
  +                    /*
  +                      if (debug >= 1) {
  +                      System.out.println("    CANNOT HAPPEN: " + e);
  +                      e.printStackTrace(System.out);
  +                      }
  +                    */
                   }
  +
               } else {
  -                if (value instanceof String) {
  -                    parameters[0] = ConvertUtils.convert((String) value,
  -                    parameterType);
  -                } else if (value instanceof String[]) {
  -                    parameters[0] = ConvertUtils.convert(((String[]) value)[0],
  -                    parameterType);
  +
  +                // Handle scalar and indexed properties differently
  +                Object newValue = null;
  +                Class type = dynaProperty.getType();
  +                if (type.isArray()) {
  +                    if (value instanceof String) {
  +                        String values[] = new String[1];
  +                        values[0] = (String) value;
  +                        newValue = ConvertUtils.convert((String[]) values,
  +                                                        type);
  +                    } else if (value instanceof String[]) {
  +                        newValue = ConvertUtils.convert((String[]) value,
  +                                                        type);
  +                    } else {
  +                        newValue = value;
  +                    }
                   } else {
  -                    parameters[0] = value;
  +                    if (value instanceof String) {
  +                        newValue = ConvertUtils.convert((String) value, type);
  +                    } else if (value instanceof String[]) {
  +                        newValue = ConvertUtils.convert(((String[]) value)[0],
  +                                                        type);
  +                    } else {
  +                        newValue = value;
  +                    }
  +
                   }
  -            }
   
  -            // Invoke the setter method
  -            /*
  -            if (debug >= 1)
  -                System.out.println("    Setting to " +
  -                                   (parameters[0] == null ? "NULL" :
  -                                    "'" + parameters[0] + "'"));
  -            */
  -            try {
  -                PropertyUtils.setProperty(bean, name, parameters[0]);
  -            } catch (NoSuchMethodException e) {
  -                /*
  -                if (debug >= 1) {
  -                    System.out.println("    CANNOT HAPPEN: " + e);
  -                    e.printStackTrace(System.out);
  +                // Invoke the setter method
  +                try {
  +                    PropertyUtils.setProperty(bean, name, newValue);
  +                } catch (NoSuchMethodException e) {
  +                    /*
  +                      if (debug >= 1) {
  +                      System.out.println("    CANNOT HAPPEN: " + e);
  +                      e.printStackTrace(System.out);
  +                      }
  +                    */
                   }
  -                */
  +
  +
               }
   
           }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>