001 /**
002 * ========================================
003 * JFreeReport : a free Java report library
004 * ========================================
005 *
006 * Project Info: http://reporting.pentaho.org/
007 *
008 * (C) Copyright 2000-2007, by Object Refinery Limited, Pentaho Corporation and Contributors.
009 *
010 * This library is free software; you can redistribute it and/or modify it under the terms
011 * of the GNU Lesser General Public License as published by the Free Software Foundation;
012 * either version 2.1 of the License, or (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016 * See the GNU Lesser General Public License for more details.
017 *
018 * You should have received a copy of the GNU Lesser General Public License along with this
019 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020 * Boston, MA 02111-1307, USA.
021 *
022 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023 * in the United States and other countries.]
024 *
025 * ------------
026 * $Id: GenericValueConverter.java,v 1.7 2007/04/01 18:49:34 taqua Exp $
027 * ------------
028 * (C) Copyright 2000-2005, by Object Refinery Limited.
029 * (C) Copyright 2005-2007, by Pentaho Corporation.
030 */
031 package org.jfree.report.util.beans;
032
033 import java.beans.IntrospectionException;
034 import java.beans.PropertyDescriptor;
035 import java.beans.PropertyEditor;
036
037 /**
038 * A class that handles the conversion of {@link Integer} attributes to and from their
039 * {@link String} representation.
040 *
041 * @author Thomas Morgner
042 */
043 public class GenericValueConverter implements ValueConverter
044 {
045 private PropertyDescriptor propertyDescriptor;
046 private PropertyEditor propertyEditor;
047
048 /**
049 * Creates a new value converter.
050 */
051 public GenericValueConverter (final PropertyDescriptor pd)
052 throws IntrospectionException
053 {
054 if (pd == null)
055 {
056 throw new NullPointerException("PropertyDescriptor must not be null.");
057 }
058 if (pd.getPropertyEditorClass() == null)
059 {
060 throw new IntrospectionException("Property has no editor.");
061 }
062 this.propertyDescriptor = pd;
063 this.propertyEditor = createPropertyEditor(pd);
064 }
065
066 private PropertyEditor createPropertyEditor (final PropertyDescriptor pi)
067 throws IntrospectionException
068 {
069 final Class c = pi.getPropertyEditorClass();
070 try
071 {
072 return (PropertyEditor) c.newInstance();
073 }
074 catch (Exception e)
075 {
076 throw new IntrospectionException("Unable to create PropertyEditor.");
077 }
078 }
079
080
081 /**
082 * Converts the attribute to a string.
083 *
084 * @param o the attribute ({@link Integer} expected).
085 * @return A string representing the {@link Integer} value.
086 * @throws BeanException if there was an error during the conversion.
087 */
088 public String toAttributeValue (final Object o) throws BeanException
089 {
090 if (BeanUtility.getPropertyType(propertyDescriptor).isInstance(o) == false)
091 {
092 throw new ClassCastException("Give me a real type.");
093 }
094
095 propertyEditor.setValue(o);
096 return propertyEditor.getAsText();
097 }
098
099 /**
100 * Converts a string to a {@link Integer}.
101 *
102 * @param s the string.
103 * @return a {@link Integer}.
104 */
105 public Object toPropertyValue (final String s)
106 {
107 propertyEditor.setAsText(s);
108 return propertyEditor.getValue();
109 }
110 }