1 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 41 public abstract class JRAbstractBeanDataSource implements JRRewindableDataSource 42 { 43 44 45 48 protected PropertyNameProvider propertyNameProvider = null; 49 50 protected static final PropertyNameProvider FIELD_NAME_PROPERTY_NAME_PROVIDER = 51 new PropertyNameProvider() 52 { 53 public String 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 getPropertyName(JRField field) 63 { 64 if (field.getDescription() == null) 65 { 66 return field.getName(); 67 } 68 return field.getDescription(); 69 } 70 }; 71 72 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 86 interface PropertyNameProvider 87 { 88 public String getPropertyName(JRField field); 89 } 90 91 protected Object getFieldValue(Object bean, JRField field) throws JRException 92 { 93 return getBeanProperty(bean, getPropertyName(field)); 94 } 95 96 protected static Object getBeanProperty(Object bean, String propertyName) throws JRException 97 { 98 Object value = null; 99 100 if (bean != null) 101 { 102 try 103 { 104 value = PropertyUtils.getProperty(bean, propertyName); 105 } 106 catch (java.lang.IllegalAccessException e) 107 { 108 throw new JRException("Error retrieving field value from bean : " + propertyName, e); 109 } 110 catch (java.lang.reflect.InvocationTargetException e) 111 { 112 throw new JRException("Error retrieving field value from bean : " + propertyName, e); 113 } 114 catch (java.lang.NoSuchMethodException e) 115 { 116 throw new JRException("Error retrieving field value from bean : " + propertyName, e); 117 } 118 catch (IllegalArgumentException e) 119 { 120 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 getPropertyName(JRField field) 133 { 134 return propertyNameProvider.getPropertyName(field); 135 } 136 } 137 | Popular Tags |