List of usage examples for org.apache.commons.beanutils PropertyUtils INDEXED_DELIM
char INDEXED_DELIM
To view the source code for org.apache.commons.beanutils PropertyUtils INDEXED_DELIM.
Click Source Link
From source file:utils.beanUtils.JIMBeanUtilsBean.java
/** * /*w w w . j av 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); } } } }
From source file:utils.beanUtils.JIMBeanUtilsBean.java
/** * <p>Set the specified property value, performing type conversions as * required to conform to the type of the destination property.</p> * * <p>If the property is read only then the method returns * without throwing an exception.</p> * * <p>If <code>null</code> is passed into a property expecting a primitive value, * then this will be converted as if it were a <code>null</code> string.</p> * * <p><strong>WARNING</strong> - The logic of this method is customized * to meet the needs of <code>populate()</code>, and is probably not what * you want for general property copying with type conversion. For that * purpose, check out the <code>copyProperty()</code> method instead.</p> * * <p><strong>WARNING</strong> - PLEASE do not modify the behavior of this * method without consulting with the Struts developer community. There * are some subtleties to its functionality that are not documented in the * Javadoc description above, yet are vital to the way that Struts utilizes * this method.</p>//from w w w .j a v a 2s. co m * * @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 setProperty(Object bean, String name, Object value) throws IllegalAccessException, InvocationTargetException { // Trace logging (if enabled) if (log.isTraceEnabled()) { StringBuffer sb = new StringBuffer(" setProperty("); 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()); } // Resolve any nested expression to get the actual target bean Object target = bean; int delim = findLastNestedIndex(name); 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 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); } // Calculate the property type if (target instanceof DynaBean) { DynaClass dynaClass = ((DynaBean) target).getDynaClass(); DynaProperty dynaProperty = dynaClass.getDynaProperty(propName); if (dynaProperty == null) { return; // Skip this property setter } type = dynaProperty.getType(); } 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 } if (descriptor instanceof MappedPropertyDescriptor) { if (((MappedPropertyDescriptor) descriptor).getMappedWriteMethod() == null) { if (log.isDebugEnabled()) { log.debug("Skipping read-only property"); } return; // Read-only, skip this property setter } type = ((MappedPropertyDescriptor) descriptor).getMappedPropertyType(); } else if (descriptor instanceof IndexedPropertyDescriptor) { if (((IndexedPropertyDescriptor) descriptor).getIndexedWriteMethod() == null) { if (log.isDebugEnabled()) { log.debug("Skipping read-only property"); } return; // Read-only, skip this property setter } type = ((IndexedPropertyDescriptor) descriptor).getIndexedPropertyType(); } else { if (descriptor.getWriteMethod() == null) { if (log.isDebugEnabled()) { log.debug("Skipping read-only property"); } return; // Read-only, skip this property setter } type = descriptor.getPropertyType(); } } // Convert the specified value to the required type Object newValue = null; if (type.isArray() && (index < 0)) { // Scalar value into array if (value == null) { String values[] = new String[1]; values[0] = (String) value; newValue = getConvertUtils().convert((String[]) values, type); } else if (value instanceof String) { String values[] = new String[1]; values[0] = (String) value; newValue = getConvertUtils().convert((String[]) values, type); } else if (value instanceof String[]) { newValue = getConvertUtils().convert((String[]) value, type); } else { newValue = value; } } else if (type.isArray()) { // Indexed value into array if (value instanceof String) { newValue = getConvertUtils().convert((String) value, type.getComponentType()); } else if (value instanceof String[]) { newValue = getConvertUtils().convert(((String[]) value)[0], type.getComponentType()); } else { newValue = value; } } else { // Value into scalar if ((value instanceof String) || (value == null)) { newValue = getConvertUtils().convert((String) value, type); } else if (value instanceof String[]) { newValue = getConvertUtils().convert(((String[]) value)[0], type); } else if (getConvertUtils().lookup(value.getClass()) != null) { newValue = getConvertUtils().convert(value.toString(), type); } else { newValue = value; } } // Invoke the setter method try { if (index >= 0) { getPropertyUtils().setIndexedProperty(target, propName, index, newValue); } else if (key != null) { getPropertyUtils().setMappedProperty(target, propName, key, newValue); } else { getPropertyUtils().setProperty(target, propName, newValue); } } catch (NoSuchMethodException e) { throw new InvocationTargetException(e, "Cannot set " + propName); } }