001/* ========================================================================
002 * JCommon : a free general purpose class library for the Java(tm) platform
003 * ========================================================================
004 *
005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
006 * 
007 * Project Info:  http://www.jfree.org/jcommon/index.html
008 *
009 * This library is free software; you can redistribute it and/or modify it 
010 * under the terms of the GNU Lesser General Public License as published by 
011 * the Free Software Foundation; either version 2.1 of the License, or 
012 * (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but 
015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
017 * License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this library; if not, write to the Free Software
021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
022 * USA.  
023 *
024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
025 * in the United States and other countries.]
026 * 
027 * ---------------------
028 * BasicTypeSupport.java
029 * ---------------------
030 * (C)opyright 2003-2005, by Thomas Morgner and Contributors.
031 *
032 * Original Author:  Thomas Morgner;
033 * Contributor(s):   David Gilbert (for Object Refinery Limited);
034 *
035 * $Id: BasicTypeSupport.java,v 1.4 2005/10/18 13:33:53 mungady Exp $
036 *
037 * Changes 
038 * -------
039 * 12-Nov-2003 : Initial version (TM);
040 * 26-Nov-2003 : Updated header and Javadocs (DG);
041 *  
042 */
043
044package org.jfree.xml.util;
045
046import org.jfree.xml.attributehandlers.BooleanAttributeHandler;
047import org.jfree.xml.attributehandlers.ByteAttributeHandler;
048import org.jfree.xml.attributehandlers.DoubleAttributeHandler;
049import org.jfree.xml.attributehandlers.FloatAttributeHandler;
050import org.jfree.xml.attributehandlers.IntegerAttributeHandler;
051import org.jfree.xml.attributehandlers.LongAttributeHandler;
052import org.jfree.xml.attributehandlers.ShortAttributeHandler;
053import org.jfree.xml.attributehandlers.StringAttributeHandler;
054
055/**
056 * A class that contains information about some basic types.
057 */
058public class BasicTypeSupport {
059
060  private BasicTypeSupport ()
061  {
062  }
063
064    /**
065     * Returns the fully qualified class name for the attribute handler for a property of 
066     * the specified class.
067     * 
068     * @param c  the property class.
069     * 
070     * @return the attribute handler class name.
071     */
072    public static String getHandlerClass(final Class c) {
073        if (c.equals(Integer.class) || c.equals(Integer.TYPE)) {
074            return IntegerAttributeHandler.class.getName();
075        }
076        if (c.equals(Short.class) || c.equals(Short.TYPE)) {
077            return ShortAttributeHandler.class.getName();
078        }
079        if (c.equals(Long.class) || c.equals(Long.TYPE)) {
080            return LongAttributeHandler.class.getName();
081        }
082        if (c.equals(Boolean.class) || c.equals(Boolean.TYPE)) {
083            return BooleanAttributeHandler.class.getName();
084        }
085        if (c.equals(Float.class) || c.equals(Float.TYPE)) {
086            return FloatAttributeHandler.class.getName();
087        }
088        if (c.equals(Double.class) || c.equals(Double.TYPE)) {
089            return DoubleAttributeHandler.class.getName();
090        }
091        if (c.equals(Byte.class) || c.equals(Byte.TYPE)) {
092            return ByteAttributeHandler.class.getName();
093        }
094        // string can also be handled directly ...
095        if (c.equals(String.class)) {
096            return StringAttributeHandler.class.getName();
097        }
098        throw new IllegalArgumentException("BasicTypeSupport.getHandlerClass(Class): "
099            + "this is no attribute type.");
100    }
101
102    /**
103     * Returns <code>true</code> if the specified class is a "basic" type, and <code>false</code>
104     * otherwise.  Basic types are written as attributes (rather than elements) in XML output.
105     * 
106     * @param c  the class.
107     * 
108     * @return a boolean.
109     */
110    public static boolean isBasicDataType (final Class c) {
111        if (c.equals(Integer.class) || c.equals(Integer.TYPE)) {
112            return true;
113        }
114        if (c.equals(Short.class) || c.equals(Short.TYPE)) {
115            return true;
116        }
117        if (c.equals(Long.class) || c.equals(Long.TYPE)) {
118            return true;
119        }
120        if (c.equals(Boolean.class) || c.equals(Boolean.TYPE)) {
121            return true;
122        }
123        if (c.equals(Float.class) || c.equals(Float.TYPE)) {
124            return true;
125        }
126        if (c.equals(Double.class) || c.equals(Double.TYPE)) {
127            return true;
128        }
129        if (c.equals(Byte.class) || c.equals(Byte.TYPE)) {
130            return true;
131        }
132        // string can also be handled directly ...
133        if (c.equals(String.class)) {
134            return true;
135        }
136        return false;
137    }
138
139    /**
140     * Returns the class for a given primitive class type.
141     * 
142     * @param className  the primitive class name.
143     * 
144     * @return a class.
145     */
146    public static Class getClassRepresentation(final String className) {
147        if (className.equals("::double")) {
148            return Double.TYPE;
149        }
150        if (className.equals("::boolean")) {
151            return Boolean.TYPE;
152        }
153        if (className.equals("::int")) {
154            return Integer.TYPE;
155        }
156        if (className.equals("::short")) {
157            return Short.TYPE;
158        }
159        if (className.equals("::long")) {
160            return Long.TYPE;
161        }
162        if (className.equals("::byte")) {
163            return Byte.TYPE;
164        }
165        throw new IllegalArgumentException("This is none of my primitives.");
166    }
167
168}