package org.test4j.spec.util;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import org.test4j.json.ITypeConverter;
import org.test4j.json.JSON;
public abstract class ParaConverter {
static final String DEFAULT_COMMA = ",";
static final Locale DEFAULT_NUMBER_FORMAT_LOCAL = Locale.ENGLISH;
static List<ITypeConverter> converters = new ArrayList<ITypeConverter>();
public static void addConverters(ITypeConverter... converters) {
for (ITypeConverter converter : converters) {
ParaConverter.converters.add(converter);
}
}
@SuppressWarnings("unchecked")
public static <T> T convert(String value, Type type) {
for (ITypeConverter converter : converters) {
if (converter.accept(value)) {
Object o = converter.convert(value);
return (T) o;
}
}
if (type == String.class) {
return (T) getStringValue(value);
} else {
Object o = JSON.toObject(value, type);
return (T) o;
}
}
static String getStringValue(String value) {
if (value == null) {
return null;
}
if (value.startsWith("\"") && value.endsWith("\"")) {
return value.substring(1, value.length() - 1);
}
if (value.startsWith("'") && value.endsWith("'")) {
return value.substring(1, value.length() - 1);
} else {
return value;
}
}
}