245 lines
9.9 KiB
Java
245 lines
9.9 KiB
Java
package org.apache.commons.beanutils;
|
|
|
|
import java.lang.reflect.Array;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigInteger;
|
|
import java.sql.Date;
|
|
import java.sql.Time;
|
|
import java.sql.Timestamp;
|
|
import org.apache.commons.beanutils.converters.BigDecimalConverter;
|
|
import org.apache.commons.beanutils.converters.BigIntegerConverter;
|
|
import org.apache.commons.beanutils.converters.BooleanArrayConverter;
|
|
import org.apache.commons.beanutils.converters.BooleanConverter;
|
|
import org.apache.commons.beanutils.converters.ByteArrayConverter;
|
|
import org.apache.commons.beanutils.converters.ByteConverter;
|
|
import org.apache.commons.beanutils.converters.CharacterArrayConverter;
|
|
import org.apache.commons.beanutils.converters.CharacterConverter;
|
|
import org.apache.commons.beanutils.converters.ClassConverter;
|
|
import org.apache.commons.beanutils.converters.DoubleArrayConverter;
|
|
import org.apache.commons.beanutils.converters.DoubleConverter;
|
|
import org.apache.commons.beanutils.converters.FloatArrayConverter;
|
|
import org.apache.commons.beanutils.converters.FloatConverter;
|
|
import org.apache.commons.beanutils.converters.IntegerArrayConverter;
|
|
import org.apache.commons.beanutils.converters.IntegerConverter;
|
|
import org.apache.commons.beanutils.converters.LongArrayConverter;
|
|
import org.apache.commons.beanutils.converters.LongConverter;
|
|
import org.apache.commons.beanutils.converters.ShortArrayConverter;
|
|
import org.apache.commons.beanutils.converters.ShortConverter;
|
|
import org.apache.commons.beanutils.converters.SqlDateConverter;
|
|
import org.apache.commons.beanutils.converters.SqlTimeConverter;
|
|
import org.apache.commons.beanutils.converters.SqlTimestampConverter;
|
|
import org.apache.commons.beanutils.converters.StringArrayConverter;
|
|
import org.apache.commons.beanutils.converters.StringConverter;
|
|
import org.apache.commons.collections.FastHashMap;
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
|
public class ConvertUtils {
|
|
private static Boolean defaultBoolean = Boolean.FALSE;
|
|
|
|
public static boolean getDefaultBoolean() {
|
|
return defaultBoolean.booleanValue();
|
|
}
|
|
|
|
public static void setDefaultBoolean(boolean newDefaultBoolean) {
|
|
defaultBoolean = new Boolean(newDefaultBoolean);
|
|
converters.put(boolean.class, new BooleanConverter(defaultBoolean));
|
|
converters.put(Boolean.class, new BooleanConverter(defaultBoolean));
|
|
}
|
|
|
|
private static Byte defaultByte = new Byte((byte)0);
|
|
|
|
public static byte getDefaultByte() {
|
|
return defaultByte.byteValue();
|
|
}
|
|
|
|
public static void setDefaultByte(byte newDefaultByte) {
|
|
defaultByte = new Byte(newDefaultByte);
|
|
converters.put(byte.class, new ByteConverter(defaultByte));
|
|
converters.put(Byte.class, new ByteConverter(defaultByte));
|
|
}
|
|
|
|
private static Character defaultCharacter = new Character(' ');
|
|
|
|
public static char getDefaultCharacter() {
|
|
return defaultCharacter.charValue();
|
|
}
|
|
|
|
public static void setDefaultCharacter(char newDefaultCharacter) {
|
|
defaultCharacter = new Character(newDefaultCharacter);
|
|
converters.put(char.class, new CharacterConverter(defaultCharacter));
|
|
converters.put(Character.class, new CharacterConverter(defaultCharacter));
|
|
}
|
|
|
|
private static Double defaultDouble = new Double(0.0D);
|
|
|
|
public static double getDefaultDouble() {
|
|
return defaultDouble.doubleValue();
|
|
}
|
|
|
|
public static void setDefaultDouble(double newDefaultDouble) {
|
|
defaultDouble = new Double(newDefaultDouble);
|
|
converters.put(double.class, new DoubleConverter(defaultDouble));
|
|
converters.put(Double.class, new DoubleConverter(defaultDouble));
|
|
}
|
|
|
|
private static Float defaultFloat = new Float(0.0F);
|
|
|
|
public static float getDefaultFloat() {
|
|
return defaultFloat.floatValue();
|
|
}
|
|
|
|
public static void setDefaultFloat(float newDefaultFloat) {
|
|
defaultFloat = new Float(newDefaultFloat);
|
|
converters.put(float.class, new FloatConverter(defaultFloat));
|
|
converters.put(Float.class, new FloatConverter(defaultFloat));
|
|
}
|
|
|
|
private static Integer defaultInteger = new Integer(0);
|
|
|
|
public static int getDefaultInteger() {
|
|
return defaultInteger.intValue();
|
|
}
|
|
|
|
public static void setDefaultInteger(int newDefaultInteger) {
|
|
defaultInteger = new Integer(newDefaultInteger);
|
|
converters.put(int.class, new IntegerConverter(defaultInteger));
|
|
converters.put(Integer.class, new IntegerConverter(defaultInteger));
|
|
}
|
|
|
|
private static Long defaultLong = new Long(0L);
|
|
|
|
public static long getDefaultLong() {
|
|
return defaultLong.longValue();
|
|
}
|
|
|
|
public static void setDefaultLong(long newDefaultLong) {
|
|
defaultLong = new Long(newDefaultLong);
|
|
converters.put(long.class, new LongConverter(defaultLong));
|
|
converters.put(Long.class, new LongConverter(defaultLong));
|
|
}
|
|
|
|
private static Short defaultShort = new Short((short)0);
|
|
|
|
public static short getDefaultShort() {
|
|
return defaultShort.shortValue();
|
|
}
|
|
|
|
public static void setDefaultShort(short newDefaultShort) {
|
|
defaultShort = new Short(newDefaultShort);
|
|
converters.put(short.class, new ShortConverter(defaultShort));
|
|
converters.put(Short.class, new ShortConverter(defaultShort));
|
|
}
|
|
|
|
private static FastHashMap converters = new FastHashMap();
|
|
|
|
static {
|
|
converters.setFast(false);
|
|
deregister();
|
|
converters.setFast(true);
|
|
}
|
|
|
|
private static Log log = LogFactory.getLog(ConvertUtils.class);
|
|
|
|
public static String convert(Object value) {
|
|
if (value == null)
|
|
return (String)null;
|
|
if (value.getClass().isArray()) {
|
|
if (Array.getLength(value) < 1)
|
|
return null;
|
|
value = Array.get(value, 0);
|
|
if (value == null)
|
|
return (String)null;
|
|
Converter converter1 = (Converter)converters.get(String.class);
|
|
return (String)converter1.convert(String.class, value);
|
|
}
|
|
Converter converter = (Converter)converters.get(String.class);
|
|
return (String)converter.convert(String.class, value);
|
|
}
|
|
|
|
public static Object convert(String value, Class clazz) {
|
|
if (log.isDebugEnabled())
|
|
log.debug("Convert string '" + value + "' to class '" + clazz.getName() + "'");
|
|
Converter converter = (Converter)converters.get(clazz);
|
|
if (converter == null)
|
|
converter = (Converter)converters.get(String.class);
|
|
if (log.isTraceEnabled())
|
|
log.trace(" Using converter " + converter);
|
|
return converter.convert(clazz, value);
|
|
}
|
|
|
|
public static Object convert(String[] values, Class clazz) {
|
|
Class type = clazz;
|
|
if (clazz.isArray())
|
|
type = clazz.getComponentType();
|
|
if (log.isDebugEnabled())
|
|
log.debug("Convert String[" + values.length + "] to class '" + type.getName() + "[]'");
|
|
Converter converter = (Converter)converters.get(type);
|
|
if (converter == null)
|
|
converter = (Converter)converters.get(String.class);
|
|
if (log.isTraceEnabled())
|
|
log.trace(" Using converter " + converter);
|
|
Object array = Array.newInstance(type, values.length);
|
|
for (int i = 0; i < values.length; i++)
|
|
Array.set(array, i, converter.convert(type, values[i]));
|
|
return array;
|
|
}
|
|
|
|
public static void deregister() {
|
|
boolean[] booleanArray = new boolean[0];
|
|
byte[] byteArray = new byte[0];
|
|
char[] charArray = new char[0];
|
|
double[] doubleArray = new double[0];
|
|
float[] floatArray = new float[0];
|
|
int[] intArray = new int[0];
|
|
long[] longArray = new long[0];
|
|
short[] shortArray = new short[0];
|
|
String[] stringArray = new String[0];
|
|
converters.clear();
|
|
converters.put(BigDecimal.class, new BigDecimalConverter());
|
|
converters.put(BigInteger.class, new BigIntegerConverter());
|
|
converters.put(boolean.class, new BooleanConverter(defaultBoolean));
|
|
converters.put(Boolean.class, new BooleanConverter(defaultBoolean));
|
|
converters.put(booleanArray.getClass(), new BooleanArrayConverter(booleanArray));
|
|
converters.put(byte.class, new ByteConverter(defaultByte));
|
|
converters.put(Byte.class, new ByteConverter(defaultByte));
|
|
converters.put(byteArray.getClass(), new ByteArrayConverter(byteArray));
|
|
converters.put(char.class, new CharacterConverter(defaultCharacter));
|
|
converters.put(Character.class, new CharacterConverter(defaultCharacter));
|
|
converters.put(charArray.getClass(), new CharacterArrayConverter(charArray));
|
|
converters.put(Class.class, new ClassConverter());
|
|
converters.put(double.class, new DoubleConverter(defaultDouble));
|
|
converters.put(Double.class, new DoubleConverter(defaultDouble));
|
|
converters.put(doubleArray.getClass(), new DoubleArrayConverter(doubleArray));
|
|
converters.put(float.class, new FloatConverter(defaultFloat));
|
|
converters.put(Float.class, new FloatConverter(defaultFloat));
|
|
converters.put(floatArray.getClass(), new FloatArrayConverter(floatArray));
|
|
converters.put(int.class, new IntegerConverter(defaultInteger));
|
|
converters.put(Integer.class, new IntegerConverter(defaultInteger));
|
|
converters.put(intArray.getClass(), new IntegerArrayConverter(intArray));
|
|
converters.put(long.class, new LongConverter(defaultLong));
|
|
converters.put(Long.class, new LongConverter(defaultLong));
|
|
converters.put(longArray.getClass(), new LongArrayConverter(longArray));
|
|
converters.put(short.class, new ShortConverter(defaultShort));
|
|
converters.put(Short.class, new ShortConverter(defaultShort));
|
|
converters.put(shortArray.getClass(), new ShortArrayConverter(shortArray));
|
|
converters.put(String.class, new StringConverter());
|
|
converters.put(stringArray.getClass(), new StringArrayConverter(stringArray));
|
|
converters.put(Date.class, new SqlDateConverter());
|
|
converters.put(Time.class, new SqlTimeConverter());
|
|
converters.put(Timestamp.class, new SqlTimestampConverter());
|
|
}
|
|
|
|
public static void deregister(Class clazz) {
|
|
converters.remove(clazz);
|
|
}
|
|
|
|
public static Converter lookup(Class clazz) {
|
|
return (Converter)converters.get(clazz);
|
|
}
|
|
|
|
public static void register(Converter converter, Class clazz) {
|
|
converters.put(clazz, converter);
|
|
}
|
|
}
|