Example usage for org.apache.commons.beanutils Converter convert

List of usage examples for org.apache.commons.beanutils Converter convert

Introduction

In this page you can find the example usage for org.apache.commons.beanutils Converter convert.

Prototype

public Object convert(Class type, Object value);

Source Link

Document

Convert the specified input object into an output object of the specified type.

Usage

From source file:Properties.ChapterFieldDecorator.java

@Override
public Object decorate(Field field) {
    if (!field.isAnnotationPresent(Property.class)) {
        return null;
    }/*from   www .j  a va 2  s  .c om*/

    String key = field.getAnnotation(Property.class).value();

    if (key == null || "".equals(key)) {
        return null;
    }

    String value = properties.getProperty(key);

    if (value == null || "".equals(value)) {
        return null;
    }

    Converter converter = getConverterFrom(field);

    if (converter == null) {
        return null;
    }

    try {
        return converter.convert(field.getType(), properties.getProperty(key));
    } catch (ConversionException e) {
        return null;
    }
}

From source file:utils.beanUtils.JIMBeanUtilsBean.java

/**
 * //from  w  w w  . j a  v a2s.com
 * ------
 * MODIFIED METHOD, THIS JAVADOC IS NOT COMPLETE
 * ------
 * 
 * <p>Copy the specified property value to the specified destination bean,
 * performing any type conversion that is required.  If the specified
 * bean does not have a property of the specified name, or the property
 * is read only on the destination bean, return without
 * doing anything.  If you have custom destination property types, register
 * {@link Converter}s for them by calling the <code>register()</code>
 * method of {@link ConvertUtils}.</p>
 *
 * <p><strong>IMPLEMENTATION RESTRICTIONS</strong>:</p>
 * <ul>
 * <li>Does not support destination properties that are indexed,
 *     but only an indexed setter (as opposed to an array setter)
 *     is available.</li>
 * <li>Does not support destination properties that are mapped,
 *     but only a keyed setter (as opposed to a Map setter)
 *     is available.</li>
 * <li>The desired property type of a mapped setter cannot be
 *     determined (since Maps support any data type), so no conversion
 *     will be performed.</li>
 * </ul>
 *
 * @param bean Bean on which setting is to be performed
 * @param name Property name (can be nested/indexed/mapped/combo)
 * @param value Value to be set
 *
 * @exception IllegalAccessException if the caller does not have
 *  access to the property accessor method
 * @exception InvocationTargetException if the property accessor method
 *  throws an exception
 */
protected void copyProperty(Object bean, String name, Object value)
        throws IllegalAccessException, InvocationTargetException {

    // Trace logging (if enabled)
    if (log.isTraceEnabled()) {
        StringBuffer sb = new StringBuffer("  copyProperty(");
        sb.append(bean);
        sb.append(", ");
        sb.append(name);
        sb.append(", ");
        if (value == null) {
            sb.append("<NULL>");
        } else if (value instanceof String) {
            sb.append((String) value);
        } else if (value instanceof String[]) {
            String values[] = (String[]) value;
            sb.append('[');
            for (int i = 0; i < values.length; i++) {
                if (i > 0) {
                    sb.append(',');
                }
                sb.append(values[i]);
            }
            sb.append(']');
        } else {
            sb.append(value.toString());
        }
        sb.append(')');
        log.trace(sb.toString());
    }

    //TODO: form here to next 'TODO' the code has not been revised

    // Resolve any nested expression to get the actual target bean
    Object target = bean;
    int delim = name.lastIndexOf(PropertyUtils.NESTED_DELIM);
    if (delim >= 0) {
        try {
            target = getPropertyUtils().getProperty(bean, name.substring(0, delim));
        } catch (NoSuchMethodException e) {
            return; // Skip this property setter
        }
        name = name.substring(delim + 1);
        if (log.isTraceEnabled()) {
            log.trace("    Target bean = " + target);
            log.trace("    Target name = " + name);
        }
    }

    // Declare local variables we will require
    String propName = null; // Simple name of target property
    Class type = null; // Java type of target property
    int index = -1; // Indexed subscript value (if any)
    String key = null; // Mapped key value (if any)

    // Calculate the target property name, index, and key values
    propName = name;
    int i = propName.indexOf(PropertyUtils.INDEXED_DELIM);
    if (i >= 0) {
        int k = propName.indexOf(PropertyUtils.INDEXED_DELIM2);
        try {
            index = Integer.parseInt(propName.substring(i + 1, k));
        } catch (NumberFormatException e) {
            ;
        }
        propName = propName.substring(0, i);
    }
    int j = propName.indexOf(PropertyUtils.MAPPED_DELIM);
    if (j >= 0) {
        int k = propName.indexOf(PropertyUtils.MAPPED_DELIM2);
        try {
            key = propName.substring(j + 1, k);
        } catch (IndexOutOfBoundsException e) {
            ;
        }
        propName = propName.substring(0, j);
    }

    //TODO: until here (from last 'TODO') the code has not been revised

    // Calculate the target property type
    if (target instanceof DynaBean) {
        throw new IllegalArgumentException("this method can not work with DynaBean");
    } else {
        PropertyDescriptor descriptor = null;
        try {
            descriptor = getPropertyUtils().getPropertyDescriptor(target, name);
            if (descriptor == null) {
                return; // Skip this property setter
            }
        } catch (NoSuchMethodException e) {
            return; // Skip this property setter
        }
        type = descriptor.getPropertyType();
        if (type == null) {
            // Most likely an indexed setter on a POJB only
            if (log.isTraceEnabled()) {
                log.trace("    target type for property '" + propName + "' is null, so skipping ths setter");
            }
            return;
        }
    }
    if (log.isTraceEnabled()) {
        log.trace("    target propName=" + propName + ", type=" + type + ", index=" + index + ", key=" + key);
    }

    //TODO: form here to next 'TODO' the code has not been revised
    // Convert the specified value to the required type and store it
    if (index >= 0) { // Destination must be indexed
        Converter converter = getConvertUtils().lookup(type.getComponentType());
        if (converter != null) {
            log.trace("        USING CONVERTER " + converter);
            value = converter.convert(type, value);
        }
        try {
            getPropertyUtils().setIndexedProperty(target, propName, index, value);
        } catch (NoSuchMethodException e) {
            throw new InvocationTargetException(e, "Cannot set " + propName);
        }
    } else if (key != null) { // Destination must be mapped
        // Maps do not know what the preferred data type is,
        // so perform no conversions at all
        // FIXME - should we create or support a TypedMap?
        try {
            getPropertyUtils().setMappedProperty(target, propName, key, value);
        } catch (NoSuchMethodException e) {
            throw new InvocationTargetException(e, "Cannot set " + propName);
        }
        // TODO: until here (from last 'TODO') the code has not been revised
    } else {

        if (isFromPojoCopy() && !Persistent.class.isInstance(value) && !NonPersistent.class.isInstance(value)) {
            try {
                Object oldValue = getPropertyUtils().getProperty(target, propName);
                if (!(oldValue == null
                        || (String.class.isInstance(oldValue) && ((String) oldValue).equalsIgnoreCase("")))) {
                    //                   log.error("****** (1) comprobar si hay que quitar estas lneas de cdigo, ver diagnet *****");
                    return;
                }
            } catch (NoSuchMethodException e2) {

            }
        }
        // Destination must be simple
        Converter converter = getConvertUtils().lookup(type);
        if (converter != null) {
            log.trace("        USING CONVERTER " + converter);
            if (propName.equals("year")) {
                //chapuza para que los aos no salgan formateados
                value = value.toString();
            } else {
                value = converter.convert(type, value);
            }
        }
        try {

            getPropertyUtils().setSimpleProperty(target, propName, value);
        } catch (Exception e) {
            try {
                //it is not a simple property, so it should be recursivelly copied
                Object originalValue = getPropertyUtils().getProperty(target, propName);
                if (originalValue == null) {
                    //if it is null it should be created
                    Class clazz = getPropertyUtils().getPropertyType(target, propName);
                    originalValue = clazz.newInstance();
                    getPropertyUtils().setProperty(target, propName, originalValue);
                }

                if (target instanceof bussineslogic.objects.Personal) {
                    if (name.equals("country") && (originalValue instanceof bussineslogic.objects.Country)
                            && (value instanceof presentation.formbeans.objects.Country_IDForm)) {
                        bussineslogic.objects.Country newCountry = new bussineslogic.objects.Country();
                        newCountry.setCode(
                                ((presentation.formbeans.objects.Country_IDForm) value).getCountrycode());
                        ((bussineslogic.objects.Personal) target).setCountry(newCountry);
                    } else if (name.equals("birth_country")
                            && (originalValue instanceof bussineslogic.objects.Country)
                            && (value instanceof presentation.formbeans.objects.Country_IDForm)) {
                        bussineslogic.objects.Country newCountry = new bussineslogic.objects.Country();
                        newCountry.setCode(
                                ((presentation.formbeans.objects.Country_IDForm) value).getCountrycode());
                        ((bussineslogic.objects.Personal) target).setBirth_country(newCountry);
                    } else if (name.equals("end_of_contract_country")
                            && (originalValue instanceof bussineslogic.objects.Country)
                            && (value instanceof presentation.formbeans.objects.Country_IDForm)) {
                        bussineslogic.objects.Country newCountry = new bussineslogic.objects.Country();
                        newCountry.setCode(
                                ((presentation.formbeans.objects.Country_IDForm) value).getCountrycode());
                        ((bussineslogic.objects.Personal) target).setEnd_of_contract_country(newCountry);
                    } else if (name.equals("nationality")
                            && (originalValue instanceof bussineslogic.objects.Nationality)
                            && (value instanceof presentation.formbeans.objects.Nationality_IDForm)) {
                        bussineslogic.objects.Nationality newNationality = new bussineslogic.objects.Nationality();
                        newNationality.setCode(((presentation.formbeans.objects.Nationality_IDForm) value)
                                .getNationalitycode());
                        ((bussineslogic.objects.Personal) target).setNationality(newNationality);
                    } else if (name.equals("nationality_2")
                            && (originalValue instanceof bussineslogic.objects.Nationality)
                            && (value instanceof presentation.formbeans.objects.Nationality_IDForm)) {
                        bussineslogic.objects.Nationality newNationality = new bussineslogic.objects.Nationality();
                        newNationality.setCode(((presentation.formbeans.objects.Nationality_IDForm) value)
                                .getNationalitycode());
                        ((bussineslogic.objects.Personal) target).setNationality_2(newNationality);
                    } else {
                        copyProperties(originalValue, value);
                    }
                } else if (target instanceof bussineslogic.objects.Alumni_personal) {
                    if (name.equals("nationality")
                            && (originalValue instanceof bussineslogic.objects.Nationality)
                            && (value instanceof presentation.formbeans.objects.Nationality_IDForm)) {
                        bussineslogic.objects.Nationality newNationality = new bussineslogic.objects.Nationality();
                        newNationality.setCode(((presentation.formbeans.objects.Nationality_IDForm) value)
                                .getNationalitycode());
                        ((bussineslogic.objects.Alumni_personal) target).setNationality(newNationality);
                    } else if (name.equals("nationality_2")
                            && (originalValue instanceof bussineslogic.objects.Nationality)
                            && (value instanceof presentation.formbeans.objects.Nationality_IDForm)) {
                        bussineslogic.objects.Nationality newNationality = new bussineslogic.objects.Nationality();
                        newNationality.setCode(((presentation.formbeans.objects.Nationality_IDForm) value)
                                .getNationalitycode());
                        ((bussineslogic.objects.Alumni_personal) target).setNationality_2(newNationality);
                    } else {
                        copyProperties(originalValue, value);
                    }
                } else if (target instanceof bussineslogic.objects.Professional) {
                    if (name.equals("payroll_institution")
                            && (originalValue instanceof bussineslogic.objects.Payroll_institution)
                            && (value instanceof presentation.formbeans.objects.Payroll_institution_IDForm)) {
                        bussineslogic.objects.Payroll_institution newInstitution = new bussineslogic.objects.Payroll_institution();
                        newInstitution
                                .setCode(((presentation.formbeans.objects.Payroll_institution_IDForm) value)
                                        .getPayroll_institutioncode());
                        ((bussineslogic.objects.Professional) target).setPayroll_institution(newInstitution);
                    } else if (name.equals("payroll_institution_2")
                            && (originalValue instanceof bussineslogic.objects.Payroll_institution)
                            && (value instanceof presentation.formbeans.objects.Payroll_institution_IDForm)) {
                        bussineslogic.objects.Payroll_institution newInstitution = new bussineslogic.objects.Payroll_institution();
                        newInstitution
                                .setCode(((presentation.formbeans.objects.Payroll_institution_IDForm) value)
                                        .getPayroll_institutioncode());
                        ((bussineslogic.objects.Professional) target).setPayroll_institution_2(newInstitution);
                    } else if (name.equals("professional_unit")
                            && (originalValue instanceof bussineslogic.objects.Unit)
                            && (value instanceof presentation.formbeans.objects.Unit_IDForm)) {
                        bussineslogic.objects.Unit newUnit = new bussineslogic.objects.Unit();
                        newUnit.setCode(((presentation.formbeans.objects.Unit_IDForm) value).getUnitcode());
                        ((bussineslogic.objects.Professional) target).setProfessional_unit(newUnit);
                    } else if (name.equals("professional_unit_3")
                            && (originalValue instanceof bussineslogic.objects.Unit)
                            && (value instanceof presentation.formbeans.objects.Unit_IDForm)) {
                        bussineslogic.objects.Unit newUnit = new bussineslogic.objects.Unit();
                        newUnit.setCode(((presentation.formbeans.objects.Unit_IDForm) value).getUnitcode());
                        ((bussineslogic.objects.Professional) target).setProfessional_unit_3(newUnit);
                    } else if (name.equals("professional_unit_4")
                            && (originalValue instanceof bussineslogic.objects.Unit)
                            && (value instanceof presentation.formbeans.objects.Unit_IDForm)) {
                        bussineslogic.objects.Unit newUnit = new bussineslogic.objects.Unit();
                        newUnit.setCode(((presentation.formbeans.objects.Unit_IDForm) value).getUnitcode());
                        ((bussineslogic.objects.Professional) target).setProfessional_unit_4(newUnit);
                    } else if (name.equals("research_group")
                            && (originalValue instanceof bussineslogic.objects.Research_group)
                            && (value instanceof presentation.formbeans.objects.Research_group_IDForm)) {
                        bussineslogic.objects.Research_group newResearchGroup = new bussineslogic.objects.Research_group();
                        newResearchGroup.setCode(((presentation.formbeans.objects.Research_group_IDForm) value)
                                .getResearch_groupcode());
                        ((bussineslogic.objects.Professional) target).setResearch_group(newResearchGroup);
                    } else if (name.equals("research_group_2")
                            && (originalValue instanceof bussineslogic.objects.Research_group)
                            && (value instanceof presentation.formbeans.objects.Research_group_IDForm)) {
                        bussineslogic.objects.Research_group newResearchGroup = new bussineslogic.objects.Research_group();
                        newResearchGroup.setCode(((presentation.formbeans.objects.Research_group_IDForm) value)
                                .getResearch_groupcode());
                        ((bussineslogic.objects.Professional) target).setResearch_group_2(newResearchGroup);
                    } else if (name.equals("research_group_3")
                            && (originalValue instanceof bussineslogic.objects.Research_group)
                            && (value instanceof presentation.formbeans.objects.Research_group_IDForm)) {
                        bussineslogic.objects.Research_group newResearchGroup = new bussineslogic.objects.Research_group();
                        newResearchGroup.setCode(((presentation.formbeans.objects.Research_group_IDForm) value)
                                .getResearch_groupcode());
                        ((bussineslogic.objects.Professional) target).setResearch_group_3(newResearchGroup);
                    } else if (name.equals("research_group_4")
                            && (originalValue instanceof bussineslogic.objects.Research_group)
                            && (value instanceof presentation.formbeans.objects.Research_group_IDForm)) {
                        bussineslogic.objects.Research_group newResearchGroup = new bussineslogic.objects.Research_group();
                        newResearchGroup.setCode(((presentation.formbeans.objects.Research_group_IDForm) value)
                                .getResearch_groupcode());
                        ((bussineslogic.objects.Professional) target).setResearch_group_4(newResearchGroup);
                    } else {
                        copyProperties(originalValue, value);
                    }
                } else {
                    copyProperties(originalValue, value);
                }
            } catch (Exception e1) {
                throw new InvocationTargetException(e, "Cannot get " + propName + " of " + target);
            }
        }
    }

}