org.sfm.jooq.conv.JooqConverterFactory Maven / Gradle / Ivy
package org.sfm.jooq.conv;
import org.sfm.jdbc.JdbcColumnKey;
import org.sfm.jdbc.ResultSetGetterFactory;
import org.sfm.map.column.FieldMapperColumnDefinition;
import org.sfm.reflect.Getter;
import org.sfm.reflect.TypeHelper;
import org.sfm.utils.conv.*;
import java.lang.reflect.Type;
import java.sql.ResultSet;
import java.util.List;
public class JooqConverterFactory {
public static Converter getConverter(Class inType, Class outType) {
return getConverter(inType, (Type)outType);
}
@SuppressWarnings("unchecked")
public static
Converter getConverter(Class inType, Type outType) {
if (TypeHelper.isArray(outType)) {
return newArrayConverter(TypeHelper.getComponentTypeOfListOrArray(outType));
} else if (TypeHelper.isAssignable(List.class, outType)) {
return newArrayToListConverter(TypeHelper.getComponentTypeOfListOrArray(outType));
}
return null;
}
@SuppressWarnings("unchecked")
private static Converter newArrayConverter(Type eltType) {
final FieldMapperColumnDefinition identity = FieldMapperColumnDefinition.identity();
Getter elementGetter = new ResultSetGetterFactory().newGetter(eltType, new JdbcColumnKey("elt", 2), identity);
if (elementGetter == null) return null;
return (Converter)new ArrayConverter((Class) TypeHelper.toClass(eltType), elementGetter);
}
@SuppressWarnings("unchecked")
private static Converter newArrayToListConverter(Type eltType) {
final FieldMapperColumnDefinition identity = FieldMapperColumnDefinition.identity();
Getter elementGetter = new ResultSetGetterFactory().newGetter(eltType, new JdbcColumnKey("elt", 2), identity);
if (elementGetter == null) return null;
return (Converter)new ArrayToListConverter(elementGetter);
}
}