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: ConverterRegistry.java 3525 2007-10-16 11:43:48Z 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.awt.Color;
033: import java.math.BigDecimal;
034: import java.math.BigInteger;
035: import java.util.HashMap;
036:
037: public final class ConverterRegistry {
038: private static ConverterRegistry instance;
039: private HashMap registeredClasses;
040:
041: public static synchronized ConverterRegistry getInstance() {
042: if (instance == null) {
043: instance = new ConverterRegistry();
044: }
045: return instance;
046: }
047:
048: private ConverterRegistry() {
049: registeredClasses = new HashMap();
050: registeredClasses.put(BigDecimal.class,
051: new BigDecimalValueConverter());
052: registeredClasses.put(BigInteger.class,
053: new BigIntegerValueConverter());
054: registeredClasses.put(Boolean.class,
055: new BooleanValueConverter());
056: registeredClasses
057: .put(Boolean.TYPE, new BooleanValueConverter());
058: registeredClasses.put(Byte.class, new ByteValueConverter());
059: registeredClasses.put(Byte.TYPE, new ByteValueConverter());
060: registeredClasses.put(Character.class,
061: new CharacterValueConverter());
062: registeredClasses.put(Character.TYPE,
063: new CharacterValueConverter());
064: registeredClasses.put(Color.class, new ColorValueConverter());
065: registeredClasses.put(Double.class, new DoubleValueConverter());
066: registeredClasses.put(Double.TYPE, new DoubleValueConverter());
067: registeredClasses.put(Float.class, new FloatValueConverter());
068: registeredClasses.put(Float.TYPE, new FloatValueConverter());
069: registeredClasses.put(Integer.class,
070: new IntegerValueConverter());
071: registeredClasses
072: .put(Integer.TYPE, new IntegerValueConverter());
073: registeredClasses.put(Long.class, new LongValueConverter());
074: registeredClasses.put(Long.TYPE, new LongValueConverter());
075: registeredClasses.put(Short.class, new ShortValueConverter());
076: registeredClasses.put(Short.TYPE, new ShortValueConverter());
077: registeredClasses.put(String.class, new StringValueConverter());
078: registeredClasses.put(Number.class,
079: new BigDecimalValueConverter());
080: registeredClasses.put(Class.class, new ClassValueConverter());
081: }
082:
083: public ValueConverter getValueConverter(final Class c) {
084: final ValueConverter plain = (ValueConverter) registeredClasses
085: .get(c);
086: if (plain != null) {
087: return plain;
088: }
089: if (c.isArray()) {
090: final Class componentType = c.getComponentType();
091: final ValueConverter componentConverter = getValueConverter(componentType);
092: if (componentConverter != null) {
093: return new ArrayValueConverter(componentType,
094: componentConverter);
095: }
096: }
097: return null;
098: }
099:
100: /**
101: * Converts an object to an attribute value.
102: *
103: * @param o the object.
104: * @return the attribute value.
105: * @throws BeanException if there was an error during the conversion.
106: */
107: public static String toAttributeValue(final Object o)
108: throws BeanException {
109: if (o == null) {
110: return null;
111: }
112: final ValueConverter vc = ConverterRegistry.getInstance()
113: .getValueConverter(o.getClass());
114: if (vc == null) {
115: return null;
116: }
117: return vc.toAttributeValue(o);
118: }
119:
120: /**
121: * Converts a string to a property value.
122: *
123: * @param s the string.
124: * @return a property value.
125: * @throws BeanException if there was an error during the conversion.
126: */
127: public static Object toPropertyValue(final String s, final Class c)
128: throws BeanException {
129: if (s == null) {
130: return null;
131: }
132: final ValueConverter vc = ConverterRegistry.getInstance()
133: .getValueConverter(c);
134: if (vc == null) {
135: return null;
136: }
137: return vc.toPropertyValue(s);
138: }
139:
140: }
|