summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.foundation/src/main/java/net/wotonomy/foundation/internal/ValueConverter.java
diff options
context:
space:
mode:
authorBenjamin Culkin <scorpress@gmail.com>2024-05-20 17:58:16 -0400
committerBenjamin Culkin <scorpress@gmail.com>2024-05-20 17:58:16 -0400
commit40a9d99496e098562f090fb7ffce9e749011b131 (patch)
tree437df24d65470582e943e494a52db8ed65a881ae /projects/net.wotonomy.foundation/src/main/java/net/wotonomy/foundation/internal/ValueConverter.java
parentff072dfe782f6f22123cd4ba050828d35c0d0fbd (diff)
Formatting pass
Diffstat (limited to 'projects/net.wotonomy.foundation/src/main/java/net/wotonomy/foundation/internal/ValueConverter.java')
-rw-r--r--projects/net.wotonomy.foundation/src/main/java/net/wotonomy/foundation/internal/ValueConverter.java1215
1 files changed, 542 insertions, 673 deletions
diff --git a/projects/net.wotonomy.foundation/src/main/java/net/wotonomy/foundation/internal/ValueConverter.java b/projects/net.wotonomy.foundation/src/main/java/net/wotonomy/foundation/internal/ValueConverter.java
index d6bc797..7f28e06 100644
--- a/projects/net.wotonomy.foundation/src/main/java/net/wotonomy/foundation/internal/ValueConverter.java
+++ b/projects/net.wotonomy.foundation/src/main/java/net/wotonomy/foundation/internal/ValueConverter.java
@@ -17,6 +17,7 @@ License along with this library; if not, see http://www.gnu.org
*/
package net.wotonomy.foundation.internal;
+
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.util.Collection;
@@ -25,694 +26,562 @@ import java.util.LinkedList;
import java.util.Map;
/**
-* A utility class to convert objects to a desired class.
-*
-* @author michael@mpowers.net
-* @author $Author: cgruber $
-* @version $Revision: 893 $
-*/
-public class ValueConverter
-{
- /**
- * Returns the specified object as converted to an instance of the
- * specified class, or null if the conversion could not be performed.
- */
- static public Object convertObjectToClass( Object anObject, Class aClass )
- {
- if ( aClass == String.class )
- {
- return getString( anObject );
- }
- if ( aClass == Short.class )
- {
- return getShort( anObject );
- }
- if ( aClass == short.class )
- {
- return getShort( anObject );
- }
- if ( aClass == Integer.class )
- {
- return getInteger( anObject );
- }
- if ( aClass == int.class )
- {
- return getInteger( anObject );
- }
- if ( aClass == Long.class )
- {
- return getLong( anObject );
- }
- if ( aClass == long.class )
- {
- return getLong( anObject );
- }
- if ( aClass == Float.class )
- {
- return getFloat( anObject );
- }
- if ( aClass == float.class )
- {
- return getFloat( anObject );
- }
- if ( aClass == Double.class )
- {
- return getDouble( anObject );
- }
- if ( aClass == double.class )
- {
- return getDouble( anObject );
- }
- if ( aClass == java.util.Date.class )
- {
- return getDate( anObject );
- }
- if ( aClass == Boolean.class )
- {
- return getBoolean( anObject );
- }
- if ( aClass == boolean.class )
- {
- return getBoolean( anObject );
- }
- if ( aClass == Character.class )
- {
- return getCharacter( anObject );
- }
- if ( aClass == char.class )
- {
- return getCharacter( anObject );
- }
- if ( aClass == Byte.class )
- {
- return getByte( anObject );
- }
- if ( aClass == byte.class )
- {
- return getByte( anObject );
- }
- if ( Collection.class.isAssignableFrom( aClass ) )
- {
- return getCollection( anObject, aClass );
- }
- if ( aClass.isArray() )
- {
- return getArray( anObject, aClass );
- }
-
- return convert( anObject, aClass );
- }
-
- /**
- * Called by convertObjectToClass() when we need to
- * convert to an unrecognized type.
- * This implementation scans the constructors of the
- * specified class for the best fit to the object.
- * and returns a new instance with that constructor.
- * Subclasses can override to directly support specific
- * types.
- */
- static protected Object convert( Object anObject, Class aClass )
- {
- Constructor[] ctors = aClass.getConstructors();
-
- Class[] types;
- for ( int i = 0; i < ctors.length; i++ )
- {
- types = ctors[i].getParameterTypes();
- if ( types.length == 1 )
- {
- if ( types[0].equals( anObject.getClass() ) )
- {
- try
- {
- return ctors[i].newInstance( new Object[] { anObject } );
- }
- catch ( Exception exc )
- {
- // fall through
- }
- }
- }
- }
-
- for ( int i = 0; i < ctors.length; i++ )
- {
- types = ctors[i].getParameterTypes();
- if ( types.length == 1 )
- {
- if ( anObject.getClass().isAssignableFrom( types[0] ) )
- {
- try
- {
- return ctors[i].newInstance( new Object[] { anObject } );
- }
- catch ( Exception exc )
- {
- // fall through
- }
- }
- }
- }
-
- return null;
- }
-
- /**
- * Tries to convert all objects to either Numbers or objects
- * that will produce a parsable toString result.
- */
- static protected Object preprocess( Object anObject )
- {
- if ( anObject instanceof Boolean )
- {
- if ( ((Boolean)anObject).booleanValue() )
- {
- return new Double( 1.0 );
- }
- return new Double( 0.0 );
- }
-
- if ( anObject instanceof Character )
- {
- return anObject.toString();
- }
-
- return anObject;
- }
-
- static public short getShortValue( Object anObject )
- {
- Short result = getShort( anObject );
- return ( result == null ) ? (short) 0 : result.shortValue();
- }
- static public Short getShort( Object anObject )
- {
- if ( anObject == null ) return new Short( (short) 0 );
- if ( "".equals( anObject ) ) return new Short( (short) 0 );
- if ( anObject instanceof Short ) return (Short) anObject;
-
- anObject = preprocess( anObject );
-
- if ( anObject instanceof Number )
- {
- return new Short( ((Number)anObject).shortValue() );
- }
-
- try
- {
- return Short.valueOf( anObject.toString() );
- }
- catch ( Exception exc )
- {
- return null;
- }
- }
-
- static public int getIntValue( Object anObject )
- {
- Integer result = getInteger( anObject );
- return ( result == null ) ? 0 : result.intValue();
- }
- static public Integer getInteger( Object anObject )
- {
- if ( anObject == null ) return new Integer( 0 );
- if ( "".equals( anObject ) ) return new Integer( 0 );
- if ( anObject instanceof Integer ) return (Integer) anObject;
-
- anObject = preprocess( anObject );
-
- if ( anObject instanceof Number )
- {
- return new Integer( ((Number)anObject).intValue() );
- }
-
- try
- {
- return Integer.valueOf( anObject.toString() );
- }
- catch ( Exception exc )
- {
- return null;
- }
- }
-
- static public long getLongValue ( Object anObject )
- {
- Long result = getLong( anObject );
- return ( result == null ) ? (long) 0 : result.longValue();
- }
- static public Long getLong( Object anObject )
- {
- if ( anObject == null ) return new Long( 0 );
- if ( "".equals( anObject ) ) return new Long( 0 );
- if ( anObject instanceof Long ) return (Long) anObject;
-
- anObject = preprocess( anObject );
-
- if ( anObject instanceof Number )
- {
- return new Long( ((Number)anObject).longValue() );
- }
-
- try
- {
- return Long.valueOf( anObject.toString() );
- }
- catch ( Exception exc )
- {
- return null;
- }
- }
-
- static public double getDoubleValue ( Object anObject )
- {
- Double result = getDouble( anObject );
- return ( result == null ) ? 0.0f : result.doubleValue();
- }
- static public Double getDouble( Object anObject )
- {
- if ( anObject == null ) return new Double( 0.0 );
- if ( "".equals( anObject ) ) return new Double( 0 );
- if ( anObject instanceof Double ) return (Double) anObject;
-
- anObject = preprocess( anObject );
-
- if ( anObject instanceof Number )
- {
- return new Double( ((Number)anObject).doubleValue() );
- }
-
- try
- {
- return Double.valueOf( anObject.toString() );
- }
- catch ( Exception exc )
- {
- return null;
- }
- }
-
- static public float getFloatValue( Object anObject )
- {
- Float result = getFloat( anObject );
- return ( result == null ) ? 0.0f : result.floatValue();
- }
- static public Float getFloat( Object anObject )
- {
- if ( anObject == null ) return new Float( 0.0 );
- if ( "".equals( anObject ) ) return new Float( 0.0 );
- if ( anObject instanceof Float ) return (Float) anObject;
-
- anObject = preprocess( anObject );
-
- if ( anObject instanceof Number )
- {
- return new Float( ((Number)anObject).floatValue() );
- }
-
- try
- {
- return Float.valueOf( anObject.toString() );
- }
- catch ( Exception exc )
- {
- return null;
- }
- }
-
- static public char getCharValue( Object anObject )
- {
- Character result = getCharacter( anObject );
- return ( result == null ) ? (char) 0 : result.charValue();
- }
- static public Character getCharacter( Object anObject )
- {
- if ( anObject == null ) return new Character( (char) 0 );
- if ( anObject instanceof Character ) return (Character) anObject;
-
- anObject = preprocess( anObject );
-
- if ( anObject instanceof Number )
- {
- return new Character( (char) ((Number)anObject).byteValue() );
- }
-
- try
- {
- return new Character( anObject.toString().charAt( 0 ) );
- }
- catch ( Exception exc )
- {
- return null;
- }
- }
-
- static public byte getByteValue( Object anObject )
- {
- Byte result = getByte ( anObject );
- return ( result == null ) ? (byte) 0 : result.byteValue();
- }
- static public Byte getByte( Object anObject )
- {
- if ( anObject == null ) return new Byte( Byte.MIN_VALUE );
- if ( "".equals( anObject ) ) return new Byte( Byte.MIN_VALUE );
- if ( anObject instanceof Byte ) return (Byte) anObject;
-
- anObject = preprocess( anObject );
-
- if ( anObject instanceof Number )
- {
- return new Byte( ((Number)anObject).byteValue() );
- }
-
- try
- {
- return Byte.decode( anObject.toString() );
- }
- catch ( Exception exc )
- {
- // fall through
- }
-
- try
- {
- return Byte.valueOf( anObject.toString() );
- }
- catch ( Exception exc )
- {
- return null;
- }
- }
+ * A utility class to convert objects to a desired class.
+ *
+ * @author michael@mpowers.net
+ * @author $Author: cgruber $
+ * @version $Revision: 893 $
+ */
+public class ValueConverter {
+ /**
+ * Returns the specified object as converted to an instance of the specified
+ * class, or null if the conversion could not be performed.
+ */
+ static public Object convertObjectToClass(Object anObject, Class aClass) {
+ if (aClass == String.class) {
+ return getString(anObject);
+ }
+ if (aClass == Short.class) {
+ return getShort(anObject);
+ }
+ if (aClass == short.class) {
+ return getShort(anObject);
+ }
+ if (aClass == Integer.class) {
+ return getInteger(anObject);
+ }
+ if (aClass == int.class) {
+ return getInteger(anObject);
+ }
+ if (aClass == Long.class) {
+ return getLong(anObject);
+ }
+ if (aClass == long.class) {
+ return getLong(anObject);
+ }
+ if (aClass == Float.class) {
+ return getFloat(anObject);
+ }
+ if (aClass == float.class) {
+ return getFloat(anObject);
+ }
+ if (aClass == Double.class) {
+ return getDouble(anObject);
+ }
+ if (aClass == double.class) {
+ return getDouble(anObject);
+ }
+ if (aClass == java.util.Date.class) {
+ return getDate(anObject);
+ }
+ if (aClass == Boolean.class) {
+ return getBoolean(anObject);
+ }
+ if (aClass == boolean.class) {
+ return getBoolean(anObject);
+ }
+ if (aClass == Character.class) {
+ return getCharacter(anObject);
+ }
+ if (aClass == char.class) {
+ return getCharacter(anObject);
+ }
+ if (aClass == Byte.class) {
+ return getByte(anObject);
+ }
+ if (aClass == byte.class) {
+ return getByte(anObject);
+ }
+ if (Collection.class.isAssignableFrom(aClass)) {
+ return getCollection(anObject, aClass);
+ }
+ if (aClass.isArray()) {
+ return getArray(anObject, aClass);
+ }
+
+ return convert(anObject, aClass);
+ }
+
+ /**
+ * Called by convertObjectToClass() when we need to convert to an unrecognized
+ * type. This implementation scans the constructors of the specified class for
+ * the best fit to the object. and returns a new instance with that constructor.
+ * Subclasses can override to directly support specific types.
+ */
+ static protected Object convert(Object anObject, Class aClass) {
+ Constructor[] ctors = aClass.getConstructors();
+
+ Class[] types;
+ for (int i = 0; i < ctors.length; i++) {
+ types = ctors[i].getParameterTypes();
+ if (types.length == 1) {
+ if (types[0].equals(anObject.getClass())) {
+ try {
+ return ctors[i].newInstance(new Object[] { anObject });
+ } catch (Exception exc) {
+ // fall through
+ }
+ }
+ }
+ }
+
+ for (int i = 0; i < ctors.length; i++) {
+ types = ctors[i].getParameterTypes();
+ if (types.length == 1) {
+ if (anObject.getClass().isAssignableFrom(types[0])) {
+ try {
+ return ctors[i].newInstance(new Object[] { anObject });
+ } catch (Exception exc) {
+ // fall through
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Tries to convert all objects to either Numbers or objects that will produce a
+ * parsable toString result.
+ */
+ static protected Object preprocess(Object anObject) {
+ if (anObject instanceof Boolean) {
+ if (((Boolean) anObject).booleanValue()) {
+ return new Double(1.0);
+ }
+ return new Double(0.0);
+ }
+
+ if (anObject instanceof Character) {
+ return anObject.toString();
+ }
+
+ return anObject;
+ }
+
+ static public short getShortValue(Object anObject) {
+ Short result = getShort(anObject);
+ return (result == null) ? (short) 0 : result.shortValue();
+ }
+
+ static public Short getShort(Object anObject) {
+ if (anObject == null)
+ return new Short((short) 0);
+ if ("".equals(anObject))
+ return new Short((short) 0);
+ if (anObject instanceof Short)
+ return (Short) anObject;
+
+ anObject = preprocess(anObject);
+
+ if (anObject instanceof Number) {
+ return new Short(((Number) anObject).shortValue());
+ }
+
+ try {
+ return Short.valueOf(anObject.toString());
+ } catch (Exception exc) {
+ return null;
+ }
+ }
+
+ static public int getIntValue(Object anObject) {
+ Integer result = getInteger(anObject);
+ return (result == null) ? 0 : result.intValue();
+ }
+
+ static public Integer getInteger(Object anObject) {
+ if (anObject == null)
+ return new Integer(0);
+ if ("".equals(anObject))
+ return new Integer(0);
+ if (anObject instanceof Integer)
+ return (Integer) anObject;
+
+ anObject = preprocess(anObject);
+
+ if (anObject instanceof Number) {
+ return new Integer(((Number) anObject).intValue());
+ }
+
+ try {
+ return Integer.valueOf(anObject.toString());
+ } catch (Exception exc) {
+ return null;
+ }
+ }
+
+ static public long getLongValue(Object anObject) {
+ Long result = getLong(anObject);
+ return (result == null) ? (long) 0 : result.longValue();
+ }
+
+ static public Long getLong(Object anObject) {
+ if (anObject == null)
+ return new Long(0);
+ if ("".equals(anObject))
+ return new Long(0);
+ if (anObject instanceof Long)
+ return (Long) anObject;
+
+ anObject = preprocess(anObject);
+
+ if (anObject instanceof Number) {
+ return new Long(((Number) anObject).longValue());
+ }
+
+ try {
+ return Long.valueOf(anObject.toString());
+ } catch (Exception exc) {
+ return null;
+ }
+ }
+
+ static public double getDoubleValue(Object anObject) {
+ Double result = getDouble(anObject);
+ return (result == null) ? 0.0f : result.doubleValue();
+ }
+
+ static public Double getDouble(Object anObject) {
+ if (anObject == null)
+ return new Double(0.0);
+ if ("".equals(anObject))
+ return new Double(0);
+ if (anObject instanceof Double)
+ return (Double) anObject;
+
+ anObject = preprocess(anObject);
+
+ if (anObject instanceof Number) {
+ return new Double(((Number) anObject).doubleValue());
+ }
+
+ try {
+ return Double.valueOf(anObject.toString());
+ } catch (Exception exc) {
+ return null;
+ }
+ }
+
+ static public float getFloatValue(Object anObject) {
+ Float result = getFloat(anObject);
+ return (result == null) ? 0.0f : result.floatValue();
+ }
+
+ static public Float getFloat(Object anObject) {
+ if (anObject == null)
+ return new Float(0.0);
+ if ("".equals(anObject))
+ return new Float(0.0);
+ if (anObject instanceof Float)
+ return (Float) anObject;
+
+ anObject = preprocess(anObject);
+
+ if (anObject instanceof Number) {
+ return new Float(((Number) anObject).floatValue());
+ }
+
+ try {
+ return Float.valueOf(anObject.toString());
+ } catch (Exception exc) {
+ return null;
+ }
+ }
+
+ static public char getCharValue(Object anObject) {
+ Character result = getCharacter(anObject);
+ return (result == null) ? (char) 0 : result.charValue();
+ }
+
+ static public Character getCharacter(Object anObject) {
+ if (anObject == null)
+ return new Character((char) 0);
+ if (anObject instanceof Character)
+ return (Character) anObject;
+
+ anObject = preprocess(anObject);
+
+ if (anObject instanceof Number) {
+ return new Character((char) ((Number) anObject).byteValue());
+ }
+
+ try {
+ return new Character(anObject.toString().charAt(0));
+ } catch (Exception exc) {
+ return null;
+ }
+ }
+
+ static public byte getByteValue(Object anObject) {
+ Byte result = getByte(anObject);
+ return (result == null) ? (byte) 0 : result.byteValue();
+ }
+
+ static public Byte getByte(Object anObject) {
+ if (anObject == null)
+ return new Byte(Byte.MIN_VALUE);
+ if ("".equals(anObject))
+ return new Byte(Byte.MIN_VALUE);
+ if (anObject instanceof Byte)
+ return (Byte) anObject;
+
+ anObject = preprocess(anObject);
+
+ if (anObject instanceof Number) {
+ return new Byte(((Number) anObject).byteValue());
+ }
+
+ try {
+ return Byte.decode(anObject.toString());
+ } catch (Exception exc) {
+ // fall through
+ }
+
+ try {
+ return Byte.valueOf(anObject.toString());
+ } catch (Exception exc) {
+ return null;
+ }
+ }
/**
- * Calls getBoolean and converts result to primitive.
- */
- static public boolean getBooleanValue( Object anObject )
- {
- Boolean result = getBoolean( anObject );
- return ( result == null ) ? false : result.booleanValue();
- }
-
+ * Calls getBoolean and converts result to primitive.
+ */
+ static public boolean getBooleanValue(Object anObject) {
+ Boolean result = getBoolean(anObject);
+ return (result == null) ? false : result.booleanValue();
+ }
+
/**
- * Numbers equal to zero are true; Strings equal to "yes" are true;
- * Strings are then passed to the Boolean constructor.
- * Other values return null.
- */
- static public Boolean getBoolean( Object anObject )
- {
- if ( anObject instanceof Boolean )
- {
+ * Numbers equal to zero are true; Strings equal to "yes" are true; Strings are
+ * then passed to the Boolean constructor. Other values return null.
+ */
+ static public Boolean getBoolean(Object anObject) {
+ if (anObject instanceof Boolean) {
return (Boolean) anObject;
}
- if ( anObject instanceof Number )
- {
- return new Boolean( ((Number)anObject).doubleValue() == 0.0 );
- }
-
- if ( anObject instanceof String )
- {
- if ( anObject.toString().toLowerCase().equals( "yes" ) )
- {
+ if (anObject instanceof Number) {
+ return new Boolean(((Number) anObject).doubleValue() == 0.0);
+ }
+
+ if (anObject instanceof String) {
+ if (anObject.toString().toLowerCase().equals("yes")) {
return Boolean.TRUE;
}
- return new Boolean( (String) anObject );
- }
-
- return null;
- }
-
- /**
- * Get an appropriate String representation for the
- * object. Nulls are converted to "null". Date are
- * formatted according to the current date format.
- * All else uses toString.
- */
- static public String getString( Object anObject )
- {
- if ( anObject == null ) return "null";
- if ( anObject instanceof java.util.Date )
- {
- return dateFormat.format( (java.util.Date) anObject );
- }
- return anObject.toString();
- }
-
- /**
- * Converts the object into the specified collection class.
- * If unable to convert in any other way, resorts to creating
- * a new collection of the specified type containing the
- * specified object.
- */
- static public Collection getCollection( Object anObject, Class aCollectionClass )
- {
- if ( anObject == null ) return null;
- if ( aCollectionClass.isAssignableFrom( anObject.getClass() ) )
- {
- return (Collection) anObject;
- }
-
- Collection converted = null;
-
- // convert to collection class
- if ( anObject instanceof Collection )
- {
- converted = (Collection) anObject;
- }
- else
- // try to convert an array
- if ( anObject.getClass().isArray() )
- {
- try
- {
- int length = Array.getLength( anObject );
- converted = new LinkedList();
- for ( int i = 0; i < length; i++ )
- {
- converted.add( Array.get( anObject, i ) );
- }
- }
- catch ( Exception exc )
- {
- // try another approach
- }
- }
- else
- // convert map values to collection and pass through
- if ( anObject instanceof Map )
- {
- converted = ((Map)anObject).values();
- }
-
- // fall back on list containing the object
- if ( converted == null )
- {
- converted = new LinkedList();
- converted.add( anObject );
- }
-
- Collection result = null;
-
- if ( converted != null )
- {
- try
- {
- // collections required to have the copy constructor.
- Constructor ctor = aCollectionClass.getConstructor(
- new Class[] { Collection.class } );
- result = (Collection) ctor.newInstance( new Object[] { converted } );
- }
- catch ( Exception exc )
- {
- try
- {
- result = new LinkedList();
- result.addAll( converted );
- }
- catch ( Exception exc2 )
- {
- // all attempts failed
- result = null;
- }
- }
- }
-
- return result;
- }
-
- /**
- * Convert the object to the specified array type.
- */
- static public Object getArray( Object anObject, Class anArrayClass )
- {
- if ( anObject == null ) return null;
-
- // try to convert an array
- if ( anObject.getClass().isArray() )
- {
- try
- {
- int length = Array.getLength( anObject );
- Object result = Array.newInstance(
- anArrayClass.getComponentType(), length );
- for ( int i = 0; i < length; i++ )
- {
- Array.set( result, i, Array.get( anObject, i ) );
- }
- return result;
- }
- catch ( Exception exc )
- {
- // try another approach
- }
- }
- // convert map values to collection and pass through
- if ( anObject instanceof Map )
- {
- anObject = ((Map)anObject).values();
- }
- // try to convert a collection
- if ( anObject instanceof Collection )
- {
- try
- {
- int length = ((Collection)anObject).size();
- Object result = Array.newInstance(
- anArrayClass.getComponentType(), length );
- Iterator it = ((Collection)anObject).iterator();
- for ( int i = 0; i < length; i++ )
- {
- Array.set( result, i, it.next() );
- }
- return result;
- }
- catch ( Exception exc )
- {
- // try another approach
- }
- }
- // if appropriate type, put the object in a single element array
- if ( anObject.getClass().equals( anArrayClass.getComponentType() ) )
- {
- try
- {
- Object result = Array.newInstance(
- anArrayClass.getComponentType(), 1 );
- Array.set( result, 0, anObject );
- return result;
- }
- catch ( Exception exc )
- {
- // try another approach
- }
- }
- return null;
- }
-
- /**
- * Get an appropriate Date from the given object.
- */
- static public java.util.Date getDate( Object anObject )
- {
- if ( anObject == null ) return new java.util.Date( 0 );
- if ( anObject instanceof java.util.Date )
- return (java.util.Date) anObject;
-
- if ( anObject instanceof Number )
- {
- return new java.util.Date( getLongValue( anObject ) );
- }
-
- try
- {
- return dateFormat.parse( anObject.toString() );
- }
- catch ( Exception exc )
- {
- return null;
- }
- }
-
- static private java.text.DateFormat dateFormat =
- new java.text.SimpleDateFormat();
- static public java.text.DateFormat getDateFormat()
- {
- return dateFormat;
- }
- static public void setDateFormat( java.text.DateFormat aDateFormat )
- {
- if ( aDateFormat != null )
- {
- dateFormat = aDateFormat;
- }
- }
-
- /**
- * Returns the "inverted" value of the specified object.
- * Numbers except for chars and bytes are converted to
- * their negative representation. Chars and bytes are
- * treated as booleans. String are converted to booleans.
- * Booleans are converted to their opposite.
- * All other types return null.
- */
- public static Object invert( Object anObject )
- {
- if ( anObject == null ) return null;
- Class aClass = anObject.getClass();
-
- if ( ( ( anObject instanceof Number )
- &&! ( anObject instanceof Byte )
- &&! ( anObject instanceof Character ) )
- || ( aClass == short.class )
- || ( aClass == int.class )
- || ( aClass == long.class )
- || ( aClass == float.class )
- || ( aClass == double.class ) )
- {
- return convertObjectToClass(
- new Double( getDoubleValue( anObject ) * -1 ), aClass );
- }
-
- Boolean converted = getBoolean( anObject );
- if ( converted != null )
- {
- if ( converted.booleanValue() )
- {
- return convertObjectToClass(
- Boolean.FALSE, anObject.getClass() );
- }
- else
- {
- return convertObjectToClass(
- Boolean.TRUE, anObject.getClass() );
- }
- }
-
- return null;
- }
+ return new Boolean((String) anObject);
+ }
+
+ return null;
+ }
+
+ /**
+ * Get an appropriate String representation for the object. Nulls are converted
+ * to "null". Date are formatted according to the current date format. All else
+ * uses toString.
+ */
+ static public String getString(Object anObject) {
+ if (anObject == null)
+ return "null";
+ if (anObject instanceof java.util.Date) {
+ return dateFormat.format((java.util.Date) anObject);
+ }
+ return anObject.toString();
+ }
+
+ /**
+ * Converts the object into the specified collection class. If unable to convert
+ * in any other way, resorts to creating a new collection of the specified type
+ * containing the specified object.
+ */
+ static public Collection getCollection(Object anObject, Class aCollectionClass) {
+ if (anObject == null)
+ return null;
+ if (aCollectionClass.isAssignableFrom(anObject.getClass())) {
+ return (Collection) anObject;
+ }
+
+ Collection converted = null;
+
+ // convert to collection class
+ if (anObject instanceof Collection) {
+ converted = (Collection) anObject;
+ } else
+ // try to convert an array
+ if (anObject.getClass().isArray()) {
+ try {
+ int length = Array.getLength(anObject);
+ converted = new LinkedList();
+ for (int i = 0; i < length; i++) {
+ converted.add(Array.get(anObject, i));
+ }
+ } catch (Exception exc) {
+ // try another approach
+ }
+ } else
+ // convert map values to collection and pass through
+ if (anObject instanceof Map) {
+ converted = ((Map) anObject).values();
+ }
+
+ // fall back on list containing the object
+ if (converted == null) {
+ converted = new LinkedList();
+ converted.add(anObject);
+ }
+
+ Collection result = null;
+
+ if (converted != null) {
+ try {
+ // collections required to have the copy constructor.
+ Constructor ctor = aCollectionClass.getConstructor(new Class[] { Collection.class });
+ result = (Collection) ctor.newInstance(new Object[] { converted });
+ } catch (Exception exc) {
+ try {
+ result = new LinkedList();
+ result.addAll(converted);
+ } catch (Exception exc2) {
+ // all attempts failed
+ result = null;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Convert the object to the specified array type.
+ */
+ static public Object getArray(Object anObject, Class anArrayClass) {
+ if (anObject == null)
+ return null;
+
+ // try to convert an array
+ if (anObject.getClass().isArray()) {
+ try {
+ int length = Array.getLength(anObject);
+ Object result = Array.newInstance(anArrayClass.getComponentType(), length);
+ for (int i = 0; i < length; i++) {
+ Array.set(result, i, Array.get(anObject, i));
+ }
+ return result;
+ } catch (Exception exc) {
+ // try another approach
+ }
+ }
+ // convert map values to collection and pass through
+ if (anObject instanceof Map) {
+ anObject = ((Map) anObject).values();
+ }
+ // try to convert a collection
+ if (anObject instanceof Collection) {
+ try {
+ int length = ((Collection) anObject).size();
+ Object result = Array.newInstance(anArrayClass.getComponentType(), length);
+ Iterator it = ((Collection) anObject).iterator();
+ for (int i = 0; i < length; i++) {
+ Array.set(result, i, it.next());
+ }
+ return result;
+ } catch (Exception exc) {
+ // try another approach
+ }
+ }
+ // if appropriate type, put the object in a single element array
+ if (anObject.getClass().equals(anArrayClass.getComponentType())) {
+ try {
+ Object result = Array.newInstance(anArrayClass.getComponentType(), 1);
+ Array.set(result, 0, anObject);
+ return result;
+ } catch (Exception exc) {
+ // try another approach
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get an appropriate Date from the given object.
+ */
+ static public java.util.Date getDate(Object anObject) {
+ if (anObject == null)
+ return new java.util.Date(0);
+ if (anObject instanceof java.util.Date)
+ return (java.util.Date) anObject;
+
+ if (anObject instanceof Number) {
+ return new java.util.Date(getLongValue(anObject));
+ }
+
+ try {
+ return dateFormat.parse(anObject.toString());
+ } catch (Exception exc) {
+ return null;
+ }
+ }
+
+ static private java.text.DateFormat dateFormat = new java.text.SimpleDateFormat();
+
+ static public java.text.DateFormat getDateFormat() {
+ return dateFormat;
+ }
+
+ static public void setDateFormat(java.text.DateFormat aDateFormat) {
+ if (aDateFormat != null) {
+ dateFormat = aDateFormat;
+ }
+ }
+
+ /**
+ * Returns the "inverted" value of the specified object. Numbers except for
+ * chars and bytes are converted to their negative representation. Chars and
+ * bytes are treated as booleans. String are converted to booleans. Booleans are
+ * converted to their opposite. All other types return null.
+ */
+ public static Object invert(Object anObject) {
+ if (anObject == null)
+ return null;
+ Class aClass = anObject.getClass();
+
+ if (((anObject instanceof Number) && !(anObject instanceof Byte) && !(anObject instanceof Character))
+ || (aClass == short.class) || (aClass == int.class) || (aClass == long.class) || (aClass == float.class)
+ || (aClass == double.class)) {
+ return convertObjectToClass(new Double(getDoubleValue(anObject) * -1), aClass);
+ }
+
+ Boolean converted = getBoolean(anObject);
+ if (converted != null) {
+ if (converted.booleanValue()) {
+ return convertObjectToClass(Boolean.FALSE, anObject.getClass());
+ } else {
+ return convertObjectToClass(Boolean.TRUE, anObject.getClass());
+ }
+ }
+
+ return null;
+ }
}
/*
- * $Log$
- * Revision 1.2 2006/02/16 13:11:47 cgruber
- * Check in all sources in eclipse-friendly maven-enabled packages.
+ * $Log$ Revision 1.2 2006/02/16 13:11:47 cgruber Check in all sources in
+ * eclipse-friendly maven-enabled packages.
*
- * Revision 1.4 2002/10/11 15:33:53 mpowers
- * Now supporting "!" to invert the value of a string property.
+ * Revision 1.4 2002/10/11 15:33:53 mpowers Now supporting "!" to invert the
+ * value of a string property.
*
- * Revision 1.3 2001/07/02 16:29:08 mpowers
- * XMLRPC decoder was relying on ValueConverter to convert LinkedLists into
- * the appropriate type. This is now implemented in ValueConverter.
+ * Revision 1.3 2001/07/02 16:29:08 mpowers XMLRPC decoder was relying on
+ * ValueConverter to convert LinkedLists into the appropriate type. This is now
+ * implemented in ValueConverter.
*
- * Revision 1.2 2001/03/01 20:36:35 mpowers
- * Better error handling and better handling of nulls.
+ * Revision 1.2 2001/03/01 20:36:35 mpowers Better error handling and better
+ * handling of nulls.
*
- * Revision 1.1.1.1 2000/12/21 15:52:33 mpowers
- * Contributing wotonomy.
+ * Revision 1.1.1.1 2000/12/21 15:52:33 mpowers Contributing wotonomy.
*
- * Revision 1.8 2000/12/20 16:25:48 michael
- * Added log to all files.
+ * Revision 1.8 2000/12/20 16:25:48 michael Added log to all files.
*
*
*/
-