com.sun.rave.web.ui.util
Class TypeConverter

java.lang.Object
  extended by com.sun.rave.web.ui.util.TypeConverter

public class TypeConverter
extends java.lang.Object

Provides an efficient and robust mechanism for converting an object to a different type. For example, one can convert a String to an Integer using the TypeConverter like this:

        Integer i = (Integer) TypeConverter.asType(Integer.class, "123");
 
or using the shortcut method:
        int i = TypeConverter.asInt("123");
 
The TypeConverter comes ready to convert all the primitive types, plus a few more like java.sql.Date and java.math.BigDecimal.

The conversion process has been optimized so that it is now a constant time operation (aside from the conversion itself, which may vary). Because of this optimization, it is possible to register classes that implement the new TypeConversion interface for conversion to a custom type. For example, this means that you can define a class to convert arbitrary objects to type Foo, and register it for use throughout the VM:

        TypeConversion fooConversion = new FooTypeConversion();
        TypeConverter.registerTypeConversion(Foo.class, fooConversion);
        ...
        Bar bar = new Bar();
        Foo foo = (Foo) TypeConverter.asType(Foo.class, bar);
        ...
        String s = "bar";
        Foo foo = (Foo) TypeConverter.asType(Foo.class, s);
 
The TypeConverter allows specification of an arbitrary type key in the registerTypeConversion() and asType() methods, so one can simultaneously register a conversion object under a Class object, a class name, and a logical type name. For example, the following are valid ways of converting a string to an int using TypeConverter:
        Integer i = (Integer) TypeConverter.asType(Integer.class, "123");
        Integer i = (Integer) TypeConverter.asType("java.lang.Integer", "123");
        Integer i = (Integer) TypeConverter.asType(TypeConverter.TYPE_INT, "123");
        Integer i = (Integer) TypeConverter.asType(TypeConverter.TYPE_INTEGER, "123");
        Integer i = (Integer) TypeConverter.asType("int", "123");
        Integer i = (Integer) TypeConverter.asType("integer", "123");
        int i = TypeConverter.asInt("123");
 
Default type conversions have been registered under the following keys:
        Classes:
                java.lang.Object
                java.lang.String
                java.lang.Integer
                java.lang.Integer.TYPE (int)
                java.lang.Double
                java.lang.Double.TYPE (double)
                java.lang.Boolean
                java.lang.Boolean.TYPE (boolean)
                java.lang.Long
                java.lang.Long.TYPE (long)
                java.lang.Float
                java.lang.Float.TYPE (float)
                java.lang.Short
                java.lang.Short.TYPE (short)
                java.lang.Byte
                java.lang.Byte.TYPE (byte)
                java.lang.Character
                java.lang.Character.TYPE (char)
                java.math.BigDecimal
                java.sql.Date
                java.sql.Time
                java.sql.Timestamp

        Class name strings:
                "java.lang.Object"
                "java.lang.String"
                "java.lang.Integer"
                "java.lang.Double"
                "java.lang.Boolean"
                "java.lang.Long"
                "java.lang.Float"
                "java.lang.Short"
                "java.lang.Byte"
                "java.lang.Character"
                "java.math.BigDecimal"
                "java.sql.Date"
                "java.sql.Time"
                "java.sql.Timestamp"

        Logical type name string constants:
                TypeConverter.TYPE_UNKNOWN ("null")
                TypeConverter.TYPE_OBJECT ("object")
                TypeConverter.TYPE_STRING ("string")
                TypeConverter.TYPE_INT ("int")
                TypeConverter.TYPE_INTEGER ("integer")
                TypeConverter.TYPE_DOUBLE ("double")
                TypeConverter.TYPE_BOOLEAN ("boolean")
                TypeConverter.TYPE_LONG ("long")
                TypeConverter.TYPE_FLOAT ("float")
                TypeConverter.TYPE_SHORT ("short")
                TypeConverter.TYPE_BYTE ("byte")
                TypeConverter.TYPE_CHAR ("char")
                TypeConverter.TYPE_CHARACTER ("character")
                TypeConverter.TYPE_BIG_DECIMAL ("bigdecimal")
                TypeConverter.TYPE_SQL_DATE ("sqldate")
                TypeConverter.TYPE_SQL_TIME ("sqltime")
                TypeConverter.TYPE_SQL_TIMESTAMP ("sqltimestamp")
        
The TypeConverter treats type keys of type Class slightly differently than other keys. If the provided value is already of the type specified by the type key class, it is returned without a conversion taking place. For example, a value of type MySub that extends the class MySuper would not be converted in the following situation because it is already of the necessary type:
        MySub o = (MySub) TypeConverter.asType(MySuper.class, mySub);
 
Be warned that although the type conversion infrastructure in this class is desgned to add only minimal overhead to the conversion process, conversion of an object to another type is a potentially expensive operation and should be used with discretion.

See Also:
TypeConverter.UnknownTypeConversion

Nested Class Summary
static class TypeConverter.BigDecimalTypeConversion
           
static class TypeConverter.BooleanTypeConversion
           
static class TypeConverter.ByteTypeConversion
           
static class TypeConverter.CharacterTypeConversion
           
static class TypeConverter.DoubleTypeConversion
           
static class TypeConverter.FloatTypeConversion
           
static class TypeConverter.IntegerTypeConversion
           
static class TypeConverter.LongTypeConversion
           
static class TypeConverter.ObjectTypeConversion
           
static class TypeConverter.ShortTypeConversion
           
static class TypeConverter.SqlDateTypeConversion
           
static class TypeConverter.SqlTimestampTypeConversion
           
static class TypeConverter.SqlTimeTypeConversion
           
static class TypeConverter.StringTypeConversion
           
static class TypeConverter.UnknownTypeConversion
           
 
Field Summary
static TypeConversion BIG_DECIMAL_TYPE_CONVERSION
           
static TypeConversion BOOLEAN_TYPE_CONVERSION
           
static TypeConversion BYTE_TYPE_CONVERSION
           
static TypeConversion CHARACTER_TYPE_CONVERSION
           
static TypeConversion DOUBLE_TYPE_CONVERSION
           
static TypeConversion FLOAT_TYPE_CONVERSION
           
static TypeConversion INTEGER_TYPE_CONVERSION
           
static TypeConversion LONG_TYPE_CONVERSION
           
static TypeConversion OBJECT_TYPE_CONVERSION
           
static TypeConversion SHORT_TYPE_CONVERSION
           
static TypeConversion SQL_DATE_TYPE_CONVERSION
           
static TypeConversion SQL_TIME_TYPE_CONVERSION
           
static TypeConversion SQL_TIMESTAMP_TYPE_CONVERSION
           
static TypeConversion STRING_TYPE_CONVERSION
           
static java.lang.String TYPE_BIG_DECIMAL
          Logical type name "bigdecimal"
static java.lang.String TYPE_BOOLEAN
          Logical type name "boolean"
static java.lang.String TYPE_BYTE
          Logical type name "byte"
static java.lang.String TYPE_CHAR
          Logical type name "char"
static java.lang.String TYPE_CHARACTER
          Logical type name "character"
static java.lang.String TYPE_DOUBLE
          Logical type name "double"
static java.lang.String TYPE_FLOAT
          Logical type name "float"
static java.lang.String TYPE_INT
          Logical type name "int"
static java.lang.String TYPE_INTEGER
          Logical type name "integer"
static java.lang.String TYPE_LONG
          Logical type name "long"
static java.lang.String TYPE_OBJECT
          Logical type name "object"
static java.lang.String TYPE_SHORT
          Logical type name "short"
static java.lang.String TYPE_SQL_DATE
          Logical type name "sqldate"
static java.lang.String TYPE_SQL_TIME
          Logical type name "sqltime"
static java.lang.String TYPE_SQL_TIMESTAMP
          Logical type name "sqltimestamp"
static java.lang.String TYPE_STRING
          Logical type name "string"
static java.lang.String TYPE_UNKNOWN
          Logical type name "null"
static TypeConversion UNKNOWN_TYPE_CONVERSION
           
 
Method Summary
static boolean asBoolean(java.lang.Object value)
           
static boolean asBoolean(java.lang.Object value, boolean defaultValue)
           
static byte asByte(java.lang.Object value)
           
static byte asByte(java.lang.Object value, byte defaultValue)
           
static char asChar(java.lang.Object value)
           
static char asChar(java.lang.Object value, char defaultValue)
           
static double asDouble(java.lang.Object value)
           
static double asDouble(java.lang.Object value, double defaultValue)
           
static float asFloat(java.lang.Object value)
           
static float asFloat(java.lang.Object value, float defaultValue)
           
static int asInt(java.lang.Object value)
           
static int asInt(java.lang.Object value, int defaultValue)
           
static long asLong(java.lang.Object value)
           
static long asLong(java.lang.Object value, long defaultValue)
           
static short asShort(java.lang.Object value)
           
static short asShort(java.lang.Object value, short defaultValue)
           
static java.lang.String asString(java.lang.Object value)
           
static java.lang.String asString(java.lang.Object value, java.lang.String defaultValue)
           
static java.lang.Object asType(java.lang.Object typeKey, java.lang.Object value)
           Convert an object to the type specified by the provided type key.
static java.util.Map getTypeConversions()
          Return the map of type conversion objects.
static void registerTypeConversion(java.lang.Object key, TypeConversion conversion)
          Register a type conversion object under the specified key.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TYPE_UNKNOWN

public static final java.lang.String TYPE_UNKNOWN
Logical type name "null"

See Also:
Constant Field Values

TYPE_OBJECT

public static final java.lang.String TYPE_OBJECT
Logical type name "object"

See Also:
Constant Field Values

TYPE_STRING

public static final java.lang.String TYPE_STRING
Logical type name "string"

See Also:
Constant Field Values

TYPE_INT

public static final java.lang.String TYPE_INT
Logical type name "int"

See Also:
Constant Field Values

TYPE_INTEGER

public static final java.lang.String TYPE_INTEGER
Logical type name "integer"

See Also:
Constant Field Values

TYPE_LONG

public static final java.lang.String TYPE_LONG
Logical type name "long"

See Also:
Constant Field Values

TYPE_FLOAT

public static final java.lang.String TYPE_FLOAT
Logical type name "float"

See Also:
Constant Field Values

TYPE_DOUBLE

public static final java.lang.String TYPE_DOUBLE
Logical type name "double"

See Also:
Constant Field Values

TYPE_SHORT

public static final java.lang.String TYPE_SHORT
Logical type name "short"

See Also:
Constant Field Values

TYPE_BOOLEAN

public static final java.lang.String TYPE_BOOLEAN
Logical type name "boolean"

See Also:
Constant Field Values

TYPE_BYTE

public static final java.lang.String TYPE_BYTE
Logical type name "byte"

See Also:
Constant Field Values

TYPE_CHAR

public static final java.lang.String TYPE_CHAR
Logical type name "char"

See Also:
Constant Field Values

TYPE_CHARACTER

public static final java.lang.String TYPE_CHARACTER
Logical type name "character"

See Also:
Constant Field Values

TYPE_BIG_DECIMAL

public static final java.lang.String TYPE_BIG_DECIMAL
Logical type name "bigdecimal"

See Also:
Constant Field Values

TYPE_SQL_DATE

public static final java.lang.String TYPE_SQL_DATE
Logical type name "sqldate"

See Also:
Constant Field Values

TYPE_SQL_TIME

public static final java.lang.String TYPE_SQL_TIME
Logical type name "sqltime"

See Also:
Constant Field Values

TYPE_SQL_TIMESTAMP

public static final java.lang.String TYPE_SQL_TIMESTAMP
Logical type name "sqltimestamp"

See Also:
Constant Field Values

UNKNOWN_TYPE_CONVERSION

public static final TypeConversion UNKNOWN_TYPE_CONVERSION

OBJECT_TYPE_CONVERSION

public static final TypeConversion OBJECT_TYPE_CONVERSION

STRING_TYPE_CONVERSION

public static final TypeConversion STRING_TYPE_CONVERSION

INTEGER_TYPE_CONVERSION

public static final TypeConversion INTEGER_TYPE_CONVERSION

DOUBLE_TYPE_CONVERSION

public static final TypeConversion DOUBLE_TYPE_CONVERSION

BOOLEAN_TYPE_CONVERSION

public static final TypeConversion BOOLEAN_TYPE_CONVERSION

LONG_TYPE_CONVERSION

public static final TypeConversion LONG_TYPE_CONVERSION

FLOAT_TYPE_CONVERSION

public static final TypeConversion FLOAT_TYPE_CONVERSION

SHORT_TYPE_CONVERSION

public static final TypeConversion SHORT_TYPE_CONVERSION

BIG_DECIMAL_TYPE_CONVERSION

public static final TypeConversion BIG_DECIMAL_TYPE_CONVERSION

BYTE_TYPE_CONVERSION

public static final TypeConversion BYTE_TYPE_CONVERSION

CHARACTER_TYPE_CONVERSION

public static final TypeConversion CHARACTER_TYPE_CONVERSION

SQL_DATE_TYPE_CONVERSION

public static final TypeConversion SQL_DATE_TYPE_CONVERSION

SQL_TIME_TYPE_CONVERSION

public static final TypeConversion SQL_TIME_TYPE_CONVERSION

SQL_TIMESTAMP_TYPE_CONVERSION

public static final TypeConversion SQL_TIMESTAMP_TYPE_CONVERSION
Method Detail

getTypeConversions

public static java.util.Map getTypeConversions()
Return the map of type conversion objects. The keys for the values in this map may be arbitrary objects, but the values are of type TypeConversion.


registerTypeConversion

public static void registerTypeConversion(java.lang.Object key,
                                          TypeConversion conversion)
Register a type conversion object under the specified key. This method can be used by developers to register custom type conversion objects.


asType

public static java.lang.Object asType(java.lang.Object typeKey,
                                      java.lang.Object value)

Convert an object to the type specified by the provided type key. A type conversion object must have been previously registered under the provided key in order for the conversion to succeed (with one exception, see below).

Note, this method treats type keys of type Class differently than other type keys. That is, this method will check if the provided value is the same as or a subclass of the specified class. If it is, this method returns the value object immediately without attempting to convert its type. One exception to this rule is if the provided type key is Object.class, in which case the conversion is attempted anyway. The reason for this deviation is that this key may have special meaning based on the type of the provided value. For example, if the provided value is a byte array, the ObjectTypeConversion class assumes it is a serialized object and attempts to deserialize it. Because all objects, including arrays, are of type Object, this conversion would never be attempted without this special handling. (Note that the default conversion for type key Object.class is to simply return the original object.)

Parameters:
typeKey - The key under which the desired type conversion object has been previously registered. Most commonly, this key should be a Class object, a class name string, or a logical type string represented by the various TYPE_* constants defined in this class.
value - The value to convert to the specified target type
Returns:
The converted value object, or null if the original value is null

asByte

public static byte asByte(java.lang.Object value)

asByte

public static byte asByte(java.lang.Object value,
                          byte defaultValue)

asShort

public static short asShort(java.lang.Object value)

asShort

public static short asShort(java.lang.Object value,
                            short defaultValue)

asInt

public static int asInt(java.lang.Object value)

asInt

public static int asInt(java.lang.Object value,
                        int defaultValue)

asLong

public static long asLong(java.lang.Object value)

asLong

public static long asLong(java.lang.Object value,
                          long defaultValue)

asFloat

public static float asFloat(java.lang.Object value)

asFloat

public static float asFloat(java.lang.Object value,
                            float defaultValue)

asDouble

public static double asDouble(java.lang.Object value)

asDouble

public static double asDouble(java.lang.Object value,
                              double defaultValue)

asChar

public static char asChar(java.lang.Object value)

asChar

public static char asChar(java.lang.Object value,
                          char defaultValue)

asBoolean

public static boolean asBoolean(java.lang.Object value)

asBoolean

public static boolean asBoolean(java.lang.Object value,
                                boolean defaultValue)

asString

public static java.lang.String asString(java.lang.Object value)

asString

public static java.lang.String asString(java.lang.Object value,
                                        java.lang.String defaultValue)