Search in sources :

Example 1 with PropertyDescriptor

use of java.beans.PropertyDescriptor in project tomcat by apache.

the class TestBeanELResolver method testGetFeatureDescriptors02.

/**
     * Tests that a valid FeatureDescriptors are returned.
     */
@Test
public void testGetFeatureDescriptors02() {
    BeanELResolver resolver = new BeanELResolver();
    ELContext context = new StandardELContext(ELManager.getExpressionFactory());
    Iterator<FeatureDescriptor> result = resolver.getFeatureDescriptors(context, new Bean());
    while (result.hasNext()) {
        PropertyDescriptor featureDescriptor = (PropertyDescriptor) result.next();
        Assert.assertEquals(featureDescriptor.getPropertyType(), featureDescriptor.getValue(ELResolver.TYPE));
        Assert.assertEquals(Boolean.TRUE, featureDescriptor.getValue(ELResolver.RESOLVABLE_AT_DESIGN_TIME));
    }
}
Also used : PropertyDescriptor(java.beans.PropertyDescriptor) FeatureDescriptor(java.beans.FeatureDescriptor) Test(org.junit.Test)

Example 2 with PropertyDescriptor

use of java.beans.PropertyDescriptor in project Core by iConomy.

the class BeanProcessor method createBean.

/**
     * Creates a new object and initializes its fields from the ResultSet.
     * @param <T> The type of bean to create
     * @param rs The result set.
     * @param type The bean type (the return type of the object).
     * @param props The property descriptors.
     * @param columnToProperty The column indices in the result set.
     * @return An initialized object.
     * @throws SQLException if a database error occurs.
     */
private <T> T createBean(ResultSet rs, Class<T> type, PropertyDescriptor[] props, int[] columnToProperty) throws SQLException {
    T bean = this.newInstance(type);
    for (int i = 1; i < columnToProperty.length; i++) {
        if (columnToProperty[i] == PROPERTY_NOT_FOUND) {
            continue;
        }
        PropertyDescriptor prop = props[columnToProperty[i]];
        Class<?> propType = prop.getPropertyType();
        Object value = this.processColumn(rs, i, propType);
        if (propType != null && value == null && propType.isPrimitive()) {
            value = primitiveDefaults.get(propType);
        }
        this.callSetter(bean, prop, value);
    }
    return bean;
}
Also used : PropertyDescriptor(java.beans.PropertyDescriptor)

Example 3 with PropertyDescriptor

use of java.beans.PropertyDescriptor in project Core by iConomy.

the class BeanProcessor method toBeanList.

/**
     * Convert a <code>ResultSet</code> into a <code>List</code> of JavaBeans.  
     * This implementation uses reflection and <code>BeanInfo</code> classes to 
     * match column names to bean property names. Properties are matched to 
     * columns based on several factors:
     * <br/>
     * <ol>
     *     <li>
     *     The class has a writable property with the same name as a column.
     *     The name comparison is case insensitive.
     *     </li>
     * 
     *     <li>
     *     The column type can be converted to the property's set method 
     *     parameter type with a ResultSet.get* method.  If the conversion fails
     *     (ie. the property was an int and the column was a Timestamp) an
     *     SQLException is thrown.
     *     </li>
     * </ol>
     * 
     * <p>
     * Primitive bean properties are set to their defaults when SQL NULL is
     * returned from the <code>ResultSet</code>.  Numeric fields are set to 0
     * and booleans are set to false.  Object bean properties are set to 
     * <code>null</code> when SQL NULL is returned.  This is the same behavior
     * as the <code>ResultSet</code> get* methods.
     * </p>
     * @param <T> The type of bean to create
     * @param rs ResultSet that supplies the bean data
     * @param type Class from which to create the bean instance
     * @throws SQLException if a database access error occurs
     * @return the newly created List of beans
     */
public <T> List<T> toBeanList(ResultSet rs, Class<T> type) throws SQLException {
    List<T> results = new ArrayList<T>();
    if (!rs.next()) {
        return results;
    }
    PropertyDescriptor[] props = this.propertyDescriptors(type);
    ResultSetMetaData rsmd = rs.getMetaData();
    int[] columnToProperty = this.mapColumnsToProperties(rsmd, props);
    do {
        results.add(this.createBean(rs, type, props, columnToProperty));
    } while (rs.next());
    return results;
}
Also used : ResultSetMetaData(java.sql.ResultSetMetaData) PropertyDescriptor(java.beans.PropertyDescriptor) ArrayList(java.util.ArrayList)

Example 4 with PropertyDescriptor

use of java.beans.PropertyDescriptor in project Core by iConomy.

the class QueryRunner method fillStatementWithBean.

/**
     * Fill the <code>PreparedStatement</code> replacement parameters with the
     * given object's bean property values.
     * 
     * @param stmt
     *            PreparedStatement to fill
     * @param bean
     *            a JavaBean object
     * @param properties
     *            an ordered array of properties; this gives the order to insert
     *            values in the statement
     * @throws SQLException
     *             if a database access error occurs
     */
public void fillStatementWithBean(PreparedStatement stmt, Object bean, PropertyDescriptor[] properties) throws SQLException {
    Object[] params = new Object[properties.length];
    for (int i = 0; i < properties.length; i++) {
        PropertyDescriptor property = properties[i];
        Object value = null;
        Method method = property.getReadMethod();
        if (method == null) {
            throw new RuntimeException("No read method for bean property " + bean.getClass() + " " + property.getName());
        }
        try {
            value = method.invoke(bean, new Object[0]);
        } catch (InvocationTargetException e) {
            throw new RuntimeException("Couldn't invoke method: " + method, e);
        } catch (IllegalArgumentException e) {
            throw new RuntimeException("Couldn't invoke method with 0 arguments: " + method, e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException("Couldn't invoke method: " + method, e);
        }
        params[i] = value;
    }
    fillStatement(stmt, params);
}
Also used : PropertyDescriptor(java.beans.PropertyDescriptor) Method(java.lang.reflect.Method) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Example 5 with PropertyDescriptor

use of java.beans.PropertyDescriptor in project Core by iConomy.

the class QueryRunner method fillStatementWithBean.

/**
     * Fill the <code>PreparedStatement</code> replacement parameters with the
     * given object's bean property values.
     * 
     * @param stmt
     *            PreparedStatement to fill
     * @param bean
     *            a JavaBean object
     * @param propertyNames
     *            an ordered array of property names (these should match the
     *            getters/setters); this gives the order to insert values in the
     *            statement
     * @throws SQLException
     *             if a database access error occurs
     */
public void fillStatementWithBean(PreparedStatement stmt, Object bean, String... propertyNames) throws SQLException {
    PropertyDescriptor[] descriptors;
    try {
        descriptors = Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors();
    } catch (IntrospectionException e) {
        throw new RuntimeException("Couldn't introspect bean " + bean.getClass().toString(), e);
    }
    PropertyDescriptor[] sorted = new PropertyDescriptor[propertyNames.length];
    for (int i = 0; i < propertyNames.length; i++) {
        String propertyName = propertyNames[i];
        if (propertyName == null) {
            throw new NullPointerException("propertyName can't be null: " + i);
        }
        boolean found = false;
        for (int j = 0; j < descriptors.length; j++) {
            PropertyDescriptor descriptor = descriptors[j];
            if (propertyName.equals(descriptor.getName())) {
                sorted[i] = descriptor;
                found = true;
                break;
            }
        }
        if (!found) {
            throw new RuntimeException("Couldn't find bean property: " + bean.getClass() + " " + propertyName);
        }
    }
    fillStatementWithBean(stmt, bean, sorted);
}
Also used : PropertyDescriptor(java.beans.PropertyDescriptor) IntrospectionException(java.beans.IntrospectionException)

Aggregations

PropertyDescriptor (java.beans.PropertyDescriptor)836 Method (java.lang.reflect.Method)396 BeanInfo (java.beans.BeanInfo)339 IntrospectionException (java.beans.IntrospectionException)188 IndexedPropertyDescriptor (java.beans.IndexedPropertyDescriptor)171 SimpleBeanInfo (java.beans.SimpleBeanInfo)142 FakeFox01BeanInfo (org.apache.harmony.beans.tests.support.mock.FakeFox01BeanInfo)141 InvocationTargetException (java.lang.reflect.InvocationTargetException)108 ArrayList (java.util.ArrayList)90 HashMap (java.util.HashMap)66 Field (java.lang.reflect.Field)59 Map (java.util.Map)52 Test (org.junit.Test)39 IOException (java.io.IOException)34 MockJavaBean (org.apache.harmony.beans.tests.support.mock.MockJavaBean)34 List (java.util.List)33 HashSet (java.util.HashSet)21 Type (java.lang.reflect.Type)20 Set (java.util.Set)20 LinkedHashMap (java.util.LinkedHashMap)19