org.jdal.util.BeanUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.jdal.util.BeanUtils.java

Source

/*
 * Copyright 2008-2011 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jdal.util;

import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.beans.BeansException;
import org.springframework.beans.InvalidPropertyException;
import org.springframework.beans.PropertyAccessException;
import org.springframework.beans.PropertyValue;

/**
 * Some static funtions added to spring BeanUtils
 * 
 * @author Jose Luis Martin
 * @author Ignacio Vargas
 * @since 1.0
 */
public abstract class BeanUtils extends org.springframework.beans.BeanUtils {

    /** log */
    private static Log log = LogFactory.getLog(BeanUtils.class);

    /**
     * Excluded properties
     */
    private static final String[] EXCLUDED_PROPERTIES = { "class" };

    /**
     * Get PropertyValues from Object
     * @param obj Object to get PropertyValues
     * @return the property values
     */
    public static PropertyValue[] getPropertyValues(Object obj) {

        PropertyDescriptor[] pds = getPropertyDescriptors(obj.getClass());
        ArrayList<PropertyValue> pvs = new ArrayList<PropertyValue>();
        List<String> excludedProperties = Arrays.asList(EXCLUDED_PROPERTIES);

        for (int i = 0; i < pds.length; i++) {
            Object value = null;
            String name = pds[i].getName();

            if (!excludedProperties.contains(name)) {
                try {
                    value = pds[i].getReadMethod().invoke(obj, (Object[]) null);
                } catch (IllegalAccessException e) {
                    log.error("Error reading property name: " + name, e);
                } catch (IllegalArgumentException e) {
                    log.error("Error reading property name: " + name, e);
                } catch (InvocationTargetException e) {
                    log.error("Error reading property name: " + name, e);
                }
                pvs.add(new PropertyValue(name, value));
            }
        }

        return (PropertyValue[]) pvs.toArray(new PropertyValue[pvs.size()]);
    }

    /**
     * Copy a property, avoid Execeptions
     * @param source source bean
     * @param dest destination bean
     * @param propertyName the propertyName
     * 
     */
    public static void copyProperty(Object source, Object dest, String propertyName) {
        BeanWrapper wrapper = new BeanWrapperImpl(source);
        PropertyValue pv = new PropertyValue(propertyName, wrapper.getPropertyValue(propertyName));

        wrapper.setPropertyValue(pv);
    }

    /**
     * Set property, without trowing exceptions on errors
     * @param bean bean name
     * @param name name
     * @param value value
     */
    public static void setProperty(Object bean, String name, Object value) {
        try {
            BeanWrapper wrapper = new BeanWrapperImpl(bean);
            wrapper.setPropertyValue(new PropertyValue(name, value));
        } catch (InvalidPropertyException ipe) {
            log.debug("Bean has no property: " + name);
        } catch (PropertyAccessException pae) {
            log.debug("Access Error on property: " + name);
        }
    }

    /**
     * Get property value null if none
     * @param bean beam
     * @param name name
     * @return the property value
     */
    public static Object getProperty(Object bean, String name) {
        try {
            BeanWrapper wrapper = new BeanWrapperImpl(bean);
            return wrapper.getPropertyValue(name);
        } catch (BeansException be) {
            log.error(be);
            return null;
        }
    }
}