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