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 3048 2007-07-28 18:02:42Z tmorgner $
027: * ------------
028: * (C) Copyright 2000-2005, by Object Refinery Limited.
029: * (C) Copyright 2005-2007, by Pentaho Corporation.
030: */package org.jfree.report.util.beans;
031:
032: import java.beans.IntrospectionException;
033: import java.beans.PropertyDescriptor;
034: import java.beans.PropertyEditor;
035:
036: /**
037: * A class that handles the conversion of {@link Integer} attributes to and from their
038: * {@link String} representation.
039: *
040: * @author Thomas Morgner
041: */
042: public class GenericValueConverter implements ValueConverter {
043: private PropertyDescriptor propertyDescriptor;
044: private PropertyEditor propertyEditor;
045:
046: /**
047: * Creates a new value converter.
048: */
049: public GenericValueConverter(final PropertyDescriptor pd)
050: throws IntrospectionException {
051: if (pd == null) {
052: throw new NullPointerException(
053: "PropertyDescriptor must not be null.");
054: }
055: if (pd.getPropertyEditorClass() == null) {
056: throw new IntrospectionException("Property has no editor.");
057: }
058: this .propertyDescriptor = pd;
059: this .propertyEditor = createPropertyEditor(pd);
060: }
061:
062: private PropertyEditor createPropertyEditor(
063: final PropertyDescriptor pi) throws IntrospectionException {
064: final Class c = pi.getPropertyEditorClass();
065: try {
066: return (PropertyEditor) c.newInstance();
067: } catch (Exception e) {
068: throw new IntrospectionException(
069: "Unable to create PropertyEditor.");
070: }
071: }
072:
073: /**
074: * Converts the attribute to a string.
075: *
076: * @param o the attribute ({@link Integer} expected).
077: * @return A string representing the {@link Integer} value.
078: * @throws BeanException if there was an error during the conversion.
079: */
080: public String toAttributeValue(final Object o) throws BeanException {
081: if (BeanUtility.getPropertyType(propertyDescriptor).isInstance(
082: o) == false) {
083: throw new ClassCastException("Give me a real type.");
084: }
085:
086: propertyEditor.setValue(o);
087: return propertyEditor.getAsText();
088: }
089:
090: /**
091: * Converts a string to a {@link Integer}.
092: *
093: * @param s the string.
094: * @return a {@link Integer}.
095: */
096: public Object toPropertyValue(final String s) {
097: propertyEditor.setAsText(s);
098: return propertyEditor.getValue();
099: }
100: }
|