Package net.sf.jasperreports.engine.data

Source Code of net.sf.jasperreports.engine.data.JRAbstractBeanDataSourceProvider

/*
* 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 java.beans.BeanInfo;
import java.beans.IndexedPropertyDescriptor;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.ArrayList;

import net.sf.jasperreports.engine.JRDataSourceProvider;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JRDesignField;


/**
* The base implementation for JRBeanXXXDataSource providers. It provides a common
* implementation for bean properties introspection.
*
* @author Peter Severin (peter_s@sourceforge.net, contact@jasperassistant.com)
* @version $Id: JRAbstractBeanDataSourceProvider.java 3716 2010-04-08 19:57:14Z teodord $
*/
public abstract class JRAbstractBeanDataSourceProvider implements JRDataSourceProvider
{

  /** The introspected bean class */
  private Class beanClass;

  /**
   * Creates the provider. Superclasses must pass a valid class that will be
   * used to introspect the available bean fields.
   * @param beanClass the bean class to be introspected.
   */
  public JRAbstractBeanDataSourceProvider(Class beanClass) {
    if (beanClass == null)
    {
      throw new JRRuntimeException("beanClass must not be null");
    }

    this.beanClass = beanClass;
  }

  /**
   * @see net.sf.jasperreports.engine.JRDataSourceProvider#supportsGetFieldsOperation()
   */
  public boolean supportsGetFieldsOperation() {
    return true;
  }
 
  /**
   * @see net.sf.jasperreports.engine.JRDataSourceProvider#getFields(net.sf.jasperreports.engine.JasperReport)
   */
  public JRField[] getFields(JasperReport report) throws JRException {
    BeanInfo beanInfo = null;

    try {
      beanInfo = Introspector.getBeanInfo(beanClass);
    } catch (IntrospectionException e) {
      throw new JRException(e);
    }

    PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
    if(descriptors != null)
    {
      ArrayList fields = new ArrayList(descriptors.length);
     
      for (int i = 0; i < descriptors.length; i++) {
        PropertyDescriptor descriptor = descriptors[i];
       
        if (!(descriptor instanceof IndexedPropertyDescriptor) && descriptor.getReadMethod() != null)
        {
          JRDesignField field = new JRDesignField();
          field.setValueClassName(normalizeClass(descriptor.getPropertyType()).getName());
          field.setName(descriptor.getName());
         
          fields.add(field);
        }
      }
 
      return (JRField[]) fields.toArray(new JRField[fields.size()]);
    }

    return new JRField[0];
  }

  /**
   * Converts a primitive class to its object counterpart
   */
  private static Class normalizeClass(Class clazz) {
    if(clazz.isPrimitive())
    {
      if(clazz == boolean.class)
      {
        return Boolean.class;
      }
      if(clazz == byte.class)
      {
        return Byte.class;
      }
      if(clazz == char.class)
      {
        return Character.class;
      }
      if(clazz == short.class)
      {
        return Short.class;
      }
      if(clazz == int.class)
      {
        return Integer.class;
      }
      if(clazz == long.class)
      {
        return Long.class;
      }
      if(clazz == float.class)
      {
        return Float.class;
      }
      if(clazz == double.class)
      {
        return Double.class;
      }
    }
   
    return clazz;
  }
}
TOP

Related Classes of net.sf.jasperreports.engine.data.JRAbstractBeanDataSourceProvider

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.