Package net.sf.jasperreports.engine.data

Source Code of net.sf.jasperreports.engine.data.JRAbstractBeanDataSource$PropertyNameProvider

/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sf.jasperreports.engine.data;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRRewindableDataSource;

import org.apache.commons.beanutils.PropertyUtils;


/**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: JRAbstractBeanDataSource.java 3939 2010-08-20 09:52:00Z teodord $
*/
public abstract class JRAbstractBeanDataSource implements JRRewindableDataSource
{
 
  /**
   * Field mapping that produces the current bean.
   * <p/>
   * If the field name/description matches this constant (the case is important),
   * the data source will return the current bean as the field value.
   */
  public static final String CURRENT_BEAN_MAPPING = "_THIS";

  /**
   *
   */
  protected PropertyNameProvider propertyNameProvider;

  protected static final PropertyNameProvider FIELD_NAME_PROPERTY_NAME_PROVIDER =
    new PropertyNameProvider()
    {
      public String getPropertyName(JRField field)
      {
        return field.getName();
      }
    };

  protected static final PropertyNameProvider FIELD_DESCRIPTION_PROPERTY_NAME_PROVIDER =
    new PropertyNameProvider()
    {
      public String getPropertyName(JRField field)
      {
        if (field.getDescription() == null)
        {
          return field.getName();
        }
        return field.getDescription();
      }
    };

  /**
   *
   */
  public JRAbstractBeanDataSource(boolean isUseFieldDescription)
  {
    propertyNameProvider = isUseFieldDescription ?
        FIELD_DESCRIPTION_PROPERTY_NAME_PROVIDER :
        FIELD_NAME_PROPERTY_NAME_PROVIDER;
  }
 

  /**
   *
   */
  interface PropertyNameProvider
  {
    public String getPropertyName(JRField field);
  }

  protected Object getFieldValue(Object bean, JRField field) throws JRException
  {
    return getBeanProperty(bean, getPropertyName(field));
  }
 
  protected static Object getBeanProperty(Object bean, String propertyName) throws JRException
  {
    Object value = null;
   
    if (isCurrentBeanMapping(propertyName))
    {
      value = bean;
    }
    else if (bean != null)
    {
      try
      {
        value = PropertyUtils.getProperty(bean, propertyName);
      }
      catch (java.lang.IllegalAccessException e)
      {
        throw new JRException("Error retrieving field value from bean : " + propertyName, e);
      }
      catch (java.lang.reflect.InvocationTargetException e)
      {
        throw new JRException("Error retrieving field value from bean : " + propertyName, e);
      }
      catch (java.lang.NoSuchMethodException e)
      {
        throw new JRException("Error retrieving field value from bean : " + propertyName, e);
      }
      catch (IllegalArgumentException e)
      {
        //FIXME replace with NestedNullException when upgrading to BeanUtils 1.7
        if (!e.getMessage().startsWith("Null property value for "))
        {
          throw e;
        }
      }
    }

    return value;
  }

  protected static boolean isCurrentBeanMapping(String propertyName)
  {
    return CURRENT_BEAN_MAPPING.equals(propertyName);
  }

  protected String getPropertyName(JRField field)
  {
    return propertyNameProvider.getPropertyName(field);
  }
}
TOP

Related Classes of net.sf.jasperreports.engine.data.JRAbstractBeanDataSource$PropertyNameProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.