Example usage for org.apache.commons.beanutils PropertyUtils NESTED_DELIM

List of usage examples for org.apache.commons.beanutils PropertyUtils NESTED_DELIM

Introduction

In this page you can find the example usage for org.apache.commons.beanutils PropertyUtils NESTED_DELIM.

Prototype

char NESTED_DELIM

To view the source code for org.apache.commons.beanutils PropertyUtils NESTED_DELIM.

Click Source Link

Document

The delimiter that separates the components of a nested reference.

Usage

From source file:org.kuali.rice.kns.web.struts.form.pojo.PojoPropertyUtilsBean.java

private int findNextNestedIndex(String expression) {
    // walk back from the end to the start
    // and find the first index that
    int bracketCount = 0;
    for (int i = 0, size = expression.length(); i < size; i++) {
        char at = expression.charAt(i);
        switch (at) {
        case PropertyUtils.NESTED_DELIM:
            if (bracketCount < 1) {
                return i;
            }/*from w  w  w  .  ja  v  a  2 s . c  o  m*/
            break;

        case PropertyUtils.MAPPED_DELIM:
        case PropertyUtils.INDEXED_DELIM:
            // not bothered which
            ++bracketCount;
            break;

        case PropertyUtils.MAPPED_DELIM2:
        case PropertyUtils.INDEXED_DELIM2:
            // not bothered which
            --bracketCount;
            break;
        }
    }
    // can't find any
    return -1;
}

From source file:org.kuali.rice.kns.web.struts.form.pojo.PojoPropertyUtilsBean.java

/**
 * Set the value of the specified simple property of the specified bean,
 * with no type conversions./*w  w w .ja v a 2  s .com*/
 *
 * @param bean Bean whose property is to be modified
 * @param name Name of the property to be modified
 * @param value Value to which the property should be set
 *
 * @exception IllegalAccessException if the caller does not have
 *  access to the property accessor method
 * @exception IllegalArgumentException if <code>bean</code> or
 *  <code>name</code> is null
 * @exception IllegalArgumentException if the property name is
 *  nested or indexed
 * @exception InvocationTargetException if the property accessor method
 *  throws an exception
 * @exception NoSuchMethodException if an accessor method for this
 *  propety cannot be found
 */
public void setSimpleProperty(Object bean, String name, Object value)
        throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {

    if (bean == null) {
        if (LOG.isDebugEnabled())
            LOG.debug("No bean specified, name = " + name + ", value = " + value);
        return;
    }
    if (name == null) {
        throw new IllegalArgumentException("No name specified");
    }

    // Validate the syntax of the property name
    if (name.indexOf(PropertyUtils.NESTED_DELIM) >= 0) {
        throw new IllegalArgumentException("Nested property names are not allowed");
    } else if (name.indexOf(PropertyUtils.INDEXED_DELIM) >= 0) {
        throw new IllegalArgumentException("Indexed property names are not allowed");
    } else if (name.indexOf(PropertyUtils.MAPPED_DELIM) >= 0) {
        throw new IllegalArgumentException("Mapped property names are not allowed");
    }

    // Retrieve the property setter method for the specified property
    PropertyDescriptor descriptor = getPropertyDescriptor(bean, name);
    if (descriptor == null) {
        throw new NoSuchMethodException("Unknown property '" + name + "'");
    }
    Method writeMethod = getWriteMethod(descriptor);
    if (writeMethod == null) {
        //throw new NoSuchMethodException("Property '" + name + "' has no setter method");
        LOG.warn("Bean: " + bean.getClass().getName() + ", Property '" + name + "' has no setter method");
        return;
    }

    // Call the property setter method
    Object values[] = new Object[1];
    values[0] = value;
    if (LOG.isDebugEnabled()) {
        String valueClassName = value == null ? "<null>" : value.getClass().getName();
        LOG.debug("setSimpleProperty: Invoking method " + writeMethod + " with value " + value + " (class "
                + valueClassName + ")");
    }

    invokeMethod(writeMethod, bean, values);

}

From source file:utils.beanUtils.JIMBeanUtilsBean.java

/**
 * /*from ww w .j a  v  a  2 s  .c  o  m*/
 * ------
 * 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);
            }
        }
    }

}