Regarding DbUtils,

I've made a small mod to my copy of the DbUtils code. We often map int table fields to enum ordinals, where the enum if for example a status, type etc. Would it be possible to add this to the current BasicRowProcessor? It's a low impact feature, but would require us to re-compile the feature in with every new release of dbutils.

   /**
    * Calls the setter method on the target object for the given property.
* If no setter method exists for the property, this method does nothing.
    * @param target The object to set the property on.
    * @param prop The property to set.
    * @param value The value to pass into the setter.
    * @throws SQLException if an error occurs setting the property.
    */
   private void callSetter(
       Object target,
       PropertyDescriptor prop,
       Object value)
       throws SQLException {

       Method setter = prop.getWriteMethod();

       if (setter == null) {
           return;
       }
// ******************************************
       // new line to call new method getEnumValue()
       value = getEnumValue(prop, value);

       Class[] params = setter.getParameterTypes();
       try {
           // Don't call setter if the value object isn't the right type
           if (this.isCompatibleType(value, params[0])) {
               setter.invoke(target, new Object[] { value });
}

       } catch (IllegalArgumentException e) {
           e.printStackTrace();
throw new SQLException(
               "Cannot set " + prop.getName() + ": " + e.getMessage());

       } catch (IllegalAccessException e) {
           e.printStackTrace();
throw new SQLException(
               "Cannot set " + prop.getName() + ": " + e.getMessage());

       } catch (InvocationTargetException e) {
           e.printStackTrace();
throw new SQLException(
               "Cannot set " + prop.getName() + ": " + e.getMessage());
       }
   }
/** * If the bean property is an enum, and the data type an int, this method
    * return the enum in the integers index position.
    */
   private Object getEnumValue(PropertyDescriptor prop, Object value) {
Class propType = prop.getPropertyType();
       Class superClass = prop.getPropertyType().getSuperclass();
if (superClass == null) {
           // no super class, can't be an enum
           return value;
       }
if (superClass.toString().indexOf("java.lang.Enum") == -1) {
           // not an enum
           return value;
       }
Object[] enums = propType.getEnumConstants();
       if (enums != null) {
           if (value instanceof Integer) {
               try {
// replace the current Integer value with the relative Enum value
                   value = enums[(Integer) value];
               } catch (ArrayIndexOutOfBoundsException e) {
                   // illegal value
               }
           }
       }
return value;
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to