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

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

Introduction

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

Prototype

public static PropertyDescriptor getPropertyDescriptor(Object bean, String name)
        throws IllegalAccessException, InvocationTargetException, NoSuchMethodException 

Source Link

Document

Retrieve the property descriptor for the specified property of the specified bean, or return null if there is no such descriptor.

For more details see PropertyUtilsBean.

Usage

From source file:org.openmobster.core.mobileObject.xml.MobileObjectSerializer.java

public Object deserialize(Class pojoClazz, String deviceXml) {
    try {//from   w ww. j a v a  2 s  .c  o m
        Object pojo = null;

        pojo = pojoClazz.newInstance();

        Document root = XMLUtilities.parse(deviceXml);

        //Parse the Object Meta Data
        List<ArrayMetaData> objectMetaData = new ArrayList<ArrayMetaData>();
        NodeList metaDataNodes = root.getElementsByTagName("array-metadata");
        if (metaDataNodes != null) {
            for (int i = 0; i < metaDataNodes.getLength(); i++) {
                Element metaDataElement = (Element) metaDataNodes.item(i);
                Element arrayUriElement = (Element) metaDataElement.getElementsByTagName("uri").item(0);
                Element arrayLengthElement = (Element) metaDataElement.getElementsByTagName("array-length")
                        .item(0);
                Element arrayClassElement = (Element) metaDataElement.getElementsByTagName("array-class")
                        .item(0);

                ArrayMetaData arrayMetaData = new ArrayMetaData();
                arrayMetaData.arrayUri = arrayUriElement.getTextContent().trim();
                arrayMetaData.arrayLength = Integer.parseInt(arrayLengthElement.getTextContent().trim());
                arrayMetaData.arrayClass = arrayClassElement.getTextContent().trim();

                objectMetaData.add(arrayMetaData);
            }
        }

        //Set the fields
        Element fieldsElement = (Element) root.getElementsByTagName("fields").item(0);
        if (fieldsElement != null) {
            NodeList fieldNodes = fieldsElement.getElementsByTagName("field");
            if (fieldNodes != null) {
                for (int i = 0; i < fieldNodes.getLength(); i++) {
                    Element fieldElement = (Element) fieldNodes.item(i);

                    String name = ((Element) fieldElement.getElementsByTagName("name").item(0))
                            .getTextContent();

                    String value = ((Element) fieldElement.getElementsByTagName("value").item(0))
                            .getTextContent();

                    String uri = ((Element) fieldElement.getElementsByTagName("uri").item(0)).getTextContent();

                    String expression = this.parseExpression(uri);

                    if (expression.indexOf('.') == -1 && expression.indexOf('[') == -1) {
                        //Simple Property
                        PropertyDescriptor metaData = PropertyUtils.getPropertyDescriptor(pojo, expression);

                        if (metaData == null || metaData.getPropertyType() == null) {
                            log.error("******************************");
                            log.error("MetaData Null For: " + expression);
                            log.error("Field Not Found on the MobileBean");
                            log.error("******************************");
                            continue;
                        }

                        if (metaData.getPropertyType().isArray()
                                && metaData.getPropertyType().getComponentType().isAssignableFrom(byte.class)) {
                            BeanUtils.setProperty(pojo, expression, Utilities.decodeBinaryData(value));
                        } else {
                            BeanUtils.setProperty(pojo, expression, value);
                        }
                    } else {
                        //Nested Property
                        this.setNestedProperty(pojo, expression, value, objectMetaData);
                    }
                }
            }
        }

        return pojo;
    } catch (Exception e) {
        log.error(this, e);
        throw new RuntimeException(e);
    }
}

From source file:org.openmobster.core.mobileObject.xml.MobileObjectSerializer.java

private void setNestedProperty(Object mobileBean, String nestedProperty, String value,
        List<ArrayMetaData> objectMetaData) {
    try {//from   ww w  .  j av a2  s .  c  om
        StringTokenizer st = new StringTokenizer(nestedProperty, ".");
        Object courObj = mobileBean;
        StringBuilder propertyPath = new StringBuilder();

        while (st.hasMoreTokens()) {
            String token = st.nextToken();
            propertyPath.append("/" + token);

            PropertyDescriptor metaData = PropertyUtils.getPropertyDescriptor(courObj, token);
            if (token.indexOf('[') != -1 && token.indexOf(']') != -1) {
                String indexedPropertyName = token.substring(0, token.indexOf('['));
                metaData = PropertyUtils.getPropertyDescriptor(courObj, indexedPropertyName);
            }

            if (metaData == null) {
                log.error("******************************");
                log.error("MetaData Null For: " + token);
                log.error("Field Not Found on the MobileBean");
                log.error("******************************");
                continue;
            }

            if (!st.hasMoreTokens()) {
                if (Collection.class.isAssignableFrom(metaData.getPropertyType()) || (metaData.getPropertyType()
                        .isArray()
                        && !metaData.getPropertyType().getComponentType().isAssignableFrom(byte.class))) {
                    //An IndexedProperty
                    this.initializeIndexedProperty(courObj, token, metaData, objectMetaData,
                            propertyPath.toString());

                    if (metaData.getPropertyType().isArray()) {
                        PropertyUtils.setNestedProperty(mobileBean, nestedProperty,
                                ConvertUtils.convert(value, metaData.getPropertyType().getComponentType()));
                    } else {
                        PropertyUtils.setNestedProperty(mobileBean, nestedProperty,
                                ConvertUtils.convert(value, metaData.getPropertyType()));
                    }
                } else {
                    //A Simple Property                                          
                    if (metaData.getPropertyType().isArray()
                            && metaData.getPropertyType().getComponentType().isAssignableFrom(byte.class)) {
                        BeanUtils.setProperty(mobileBean, nestedProperty, Utilities.decodeBinaryData(value));
                    } else {
                        PropertyUtils.setNestedProperty(mobileBean, nestedProperty,
                                ConvertUtils.convert(value, metaData.getPropertyType()));
                    }
                }
            } else {
                if (Collection.class.isAssignableFrom(metaData.getPropertyType())
                        || metaData.getPropertyType().isArray()) {
                    //An IndexedProperty   
                    courObj = this.initializeIndexedProperty(courObj, token, metaData, objectMetaData,
                            propertyPath.toString());
                } else {
                    //A Simple Property
                    courObj = this.initializeSimpleProperty(courObj, token, metaData);
                }
            }
        }
    } catch (Exception e) {
        log.info("---------------------------------------------------");
        log.info("Blowing Up on---------" + nestedProperty);
        log.info("---------------------------------------------------");
        log.error(this, e);
        throw new RuntimeException(e);
    }
}

From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java

/**
 * @verifies resolve TypeVariables to actual type
 * @see ConversionUtil#convert(Object, java.lang.reflect.Type)
 */// w  ww.  j  a va 2 s . com
@Test
public void convert_shouldResolveTypeVariablesToActualType() throws Exception {
    ChildGenericType_Int i = new ChildGenericType_Int();
    Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod();

    Object result = ConversionUtil.convert("25", setter.getGenericParameterTypes()[0], i);

    Assert.assertNotNull(result);
    Assert.assertEquals(25, result);
}

From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java

/**
 * @verifies return the actual type if defined on the parent class
 * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable)
 *//*from   w ww.  j a  va2 s.  c o m*/
@Test
public void getTypeVariableClass_shouldReturnTheActualTypeIfDefinedOnTheParentClass() throws Exception {
    ChildGenericType_Int i = new ChildGenericType_Int();
    ChildGenericType_String s = new ChildGenericType_String();
    ChildGenericType_Temp t = new ChildGenericType_Temp();

    Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod();
    Type type = ConversionUtil.getTypeVariableClass(ChildGenericType_Int.class,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);

    Assert.assertNotNull(type);
    Assert.assertEquals(Integer.class, type);

    setter = PropertyUtils.getPropertyDescriptor(s, "value").getWriteMethod();
    type = ConversionUtil.getTypeVariableClass(ChildGenericType_String.class,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);

    Assert.assertNotNull(type);
    Assert.assertEquals(String.class, type);

    setter = PropertyUtils.getPropertyDescriptor(t, "value").getWriteMethod();
    type = ConversionUtil.getTypeVariableClass(ChildGenericType_Temp.class,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);

    Assert.assertNotNull(type);
    Assert.assertEquals(Temp.class, type);
}

From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java

/**
 * @verifies return the actual type if defined on the grand-parent class
 * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable)
 *///from w ww .j  a  v  a  2 s  .  co  m
@Test
public void getTypeVariableClass_shouldReturnTheActualTypeIfDefinedOnTheGrandparentClass() throws Exception {
    GrandchildGenericType_Int i = new GrandchildGenericType_Int();
    GreatGrandchildGenericType_Int i2 = new GreatGrandchildGenericType_Int();

    Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod();
    Type type = ConversionUtil.getTypeVariableClass(GrandchildGenericType_Int.class,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);

    Assert.assertNotNull(type);
    Assert.assertEquals(Integer.class, type);

    setter = PropertyUtils.getPropertyDescriptor(i2, "value").getWriteMethod();
    type = ConversionUtil.getTypeVariableClass(GreatGrandchildGenericType_Int.class,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);

    Assert.assertNotNull(type);
    Assert.assertEquals(Integer.class, type);
}

From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java

/**
 * @verifies return null when actual type cannot be found
 * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable)
 *///from  w  w w  .  j  a  va 2  s . c om
@Test
public void getTypeVariableClass_shouldReturnNullWhenActualTypeCannotBeFound() throws Exception {
    GrandchildGenericType_Int i = new GrandchildGenericType_Int();

    Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod();
    Type type = ConversionUtil.getTypeVariableClass(Temp.class,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);

    Assert.assertNull(type);
}

From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java

/**
 * @verifies return the correct actual type if there are multiple generic types
 * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable)
 *//*from ww w . ja  v a2 s.c  o m*/
@Test
public void getTypeVariableClass_shouldReturnTheCorrectActualTypeIfThereAreMultipleGenericTypes()
        throws Exception {
    ChildMultiGenericType i = new ChildMultiGenericType();

    Method setter = PropertyUtils.getPropertyDescriptor(i, "first").getWriteMethod();
    Type type = ConversionUtil.getTypeVariableClass(ChildMultiGenericType.class,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);

    Assert.assertNotNull(type);
    Assert.assertEquals(Integer.class, type);

    setter = PropertyUtils.getPropertyDescriptor(i, "second").getWriteMethod();
    type = ConversionUtil.getTypeVariableClass(ChildMultiGenericType.class,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);

    Assert.assertNotNull(type);
    Assert.assertEquals(String.class, type);

    setter = PropertyUtils.getPropertyDescriptor(i, "third").getWriteMethod();
    type = ConversionUtil.getTypeVariableClass(ChildMultiGenericType.class,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);

    Assert.assertNotNull(type);
    Assert.assertEquals(Temp.class, type);
}

From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java

/**
 * @verifies throw IllegalArgumentException when instance class is null
 * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable)
 *//*  w  ww  . jav  a 2 s .c o  m*/
@Test(expected = IllegalArgumentException.class)
public void getTypeVariableClass_shouldThrowIllegalArgumentExceptionWhenInstanceClassIsNull() throws Exception {
    GrandchildGenericType_Int i = new GrandchildGenericType_Int();

    Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod();
    Type type = ConversionUtil.getTypeVariableClass(null,
            (TypeVariable<?>) setter.getGenericParameterTypes()[0]);
}

From source file:org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingConverter.java

@Override
public void setProperty(Object instance, String propertyName, Object value) throws ConversionException {
    try {//  w  w w .j  a  va2s  .  c  o  m
        // try to find a @PropertySetter-annotated method
        Method annotatedSetter = ReflectionUtil.findPropertySetterMethod(this, propertyName);
        if (annotatedSetter != null) {
            Type expectedType = annotatedSetter.getGenericParameterTypes()[1];
            value = ConversionUtil.convert(value, expectedType);
            annotatedSetter.invoke(this, instance, value);
            return;
        }

        // we need the generic type of this property, not just the class
        Method setter = PropertyUtils.getPropertyDescriptor(instance, propertyName).getWriteMethod();

        // Convert the value to the specified type
        value = ConversionUtil.convert(value, setter.getGenericParameterTypes()[0], instance);

        setPropertyWhichMayBeAHibernateCollection(instance, propertyName, value);
    } catch (Exception ex) {
        throw new ConversionException(propertyName + " on " + instance.getClass(), ex);
    }
}

From source file:org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource.java

/**
 * @see org.openmrs.module.webservices.rest.web.resource.api.Converter#setProperty(java.lang.Object,
 *      java.lang.String, java.lang.Object)
 *//*  w ww.  ja v  a  2s. c o  m*/
@Override
public void setProperty(Object instance, String propertyName, Object value) throws ConversionException {
    if (propertiesIgnoredWhenUpdating.contains(propertyName)) {
        return;
    }
    try {
        DelegatingResourceHandler<? extends T> handler;

        try {
            handler = getResourceHandler((T) instance);
        } catch (Exception e) {
            // this try/catch isn't really needed because of java erasure behaviour at run time.
            // but I'm putting in here just in case
            handler = this;
        }

        // try to find a @PropertySetter-annotated method
        Method annotatedSetter = findSetterMethod(handler, propertyName);
        if (annotatedSetter != null) {
            Type expectedType = annotatedSetter.getGenericParameterTypes()[1];
            value = ConversionUtil.convert(value, expectedType);
            annotatedSetter.invoke(handler, instance, value);
            return;
        }

        // we need the generic type of this property, not just the class
        Method setter = PropertyUtils.getPropertyDescriptor(instance, propertyName).getWriteMethod();
        value = ConversionUtil.convert(value, setter.getGenericParameterTypes()[0]);

        if (value instanceof Collection) {
            //We need to handle collections in a way that Hibernate can track.
            Collection<?> newCollection = (Collection<?>) value;
            Object oldValue = PropertyUtils.getProperty(instance, propertyName);
            if (oldValue instanceof Collection) {
                Collection collection = (Collection) oldValue;
                collection.clear();
                collection.addAll(newCollection);
            } else {
                PropertyUtils.setProperty(instance, propertyName, value);
            }
        } else {
            PropertyUtils.setProperty(instance, propertyName, value);
        }
    } catch (Exception ex) {
        throw new ConversionException(propertyName + " on " + instance.getClass(), ex);
    }
}