KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > jasperreports > engine > data > JRAbstractBeanDataSource


1 /*
2  * ============================================================================
3  * GNU Lesser General Public License
4  * ============================================================================
5  *
6  * JasperReports - Free Java report-generating library.
7  * Copyright (C) 2001-2006 JasperSoft Corporation http://www.jaspersoft.com
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
22  *
23  * JasperSoft Corporation
24  * 303 Second Street, Suite 450 North
25  * San Francisco, CA 94107
26  * http://www.jaspersoft.com
27  */

28 package net.sf.jasperreports.engine.data;
29
30 import org.apache.commons.beanutils.PropertyUtils;
31
32 import net.sf.jasperreports.engine.JRException;
33 import net.sf.jasperreports.engine.JRField;
34 import net.sf.jasperreports.engine.JRRewindableDataSource;
35
36
37 /**
38  * @author Teodor Danciu (teodord@users.sourceforge.net)
39  * @version $Id: JRAbstractBeanDataSource.java 1229 2006-04-19 13:27:35 +0300 (Wed, 19 Apr 2006) teodord $
40  */

41 public abstract class JRAbstractBeanDataSource implements JRRewindableDataSource
42 {
43     
44
45     /**
46      *
47      */

48     protected PropertyNameProvider propertyNameProvider = null;
49
50     protected static final PropertyNameProvider FIELD_NAME_PROPERTY_NAME_PROVIDER =
51         new PropertyNameProvider()
52         {
53             public String JavaDoc getPropertyName(JRField field)
54             {
55                 return field.getName();
56             }
57         };
58
59     protected static final PropertyNameProvider FIELD_DESCRIPTION_PROPERTY_NAME_PROVIDER =
60         new PropertyNameProvider()
61         {
62             public String JavaDoc getPropertyName(JRField field)
63             {
64                 if (field.getDescription() == null)
65                 {
66                     return field.getName();
67                 }
68                 return field.getDescription();
69             }
70         };
71
72     /**
73      *
74      */

75     public JRAbstractBeanDataSource(boolean isUseFieldDescription)
76     {
77         propertyNameProvider = isUseFieldDescription ?
78                 FIELD_DESCRIPTION_PROPERTY_NAME_PROVIDER :
79                 FIELD_NAME_PROPERTY_NAME_PROVIDER;
80     }
81     
82
83     /**
84      *
85      */

86     interface PropertyNameProvider
87     {
88         public String JavaDoc getPropertyName(JRField field);
89     }
90
91     protected Object JavaDoc getFieldValue(Object JavaDoc bean, JRField field) throws JRException
92     {
93         return getBeanProperty(bean, getPropertyName(field));
94     }
95     
96     protected static Object JavaDoc getBeanProperty(Object JavaDoc bean, String JavaDoc propertyName) throws JRException
97     {
98         Object JavaDoc value = null;
99         
100         if (bean != null)
101         {
102             try
103             {
104                 value = PropertyUtils.getProperty(bean, propertyName);
105             }
106             catch (java.lang.IllegalAccessException JavaDoc e)
107             {
108                 throw new JRException("Error retrieving field value from bean : " + propertyName, e);
109             }
110             catch (java.lang.reflect.InvocationTargetException JavaDoc e)
111             {
112                 throw new JRException("Error retrieving field value from bean : " + propertyName, e);
113             }
114             catch (java.lang.NoSuchMethodException JavaDoc e)
115             {
116                 throw new JRException("Error retrieving field value from bean : " + propertyName, e);
117             }
118             catch (IllegalArgumentException JavaDoc e)
119             {
120                 //FIXME replace with NestedNullException when upgrading to BeanUtils 1.7
121
if (!e.getMessage().startsWith("Null property value for "))
122                 {
123                     throw e;
124                 }
125             }
126         }
127
128         return value;
129     }
130
131
132     protected String JavaDoc getPropertyName(JRField field)
133     {
134         return propertyNameProvider.getPropertyName(field);
135     }
136 }
137
Popular Tags