All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sfm.jdbc.ResultSetGetterFactory Maven / Gradle / Ivy

package org.sfm.jdbc;

import java.lang.reflect.Type;
import java.sql.ResultSet;
import java.sql.Types;
import java.util.Date;

import org.sfm.jdbc.getter.BooleanIndexedResultSetGetter;
import org.sfm.jdbc.getter.BooleanNamedResultSetGetter;
import org.sfm.jdbc.getter.ByteIndexedResultSetGetter;
import org.sfm.jdbc.getter.ByteNamedResultSetGetter;
import org.sfm.jdbc.getter.CharacterIndexedResultSetGetter;
import org.sfm.jdbc.getter.CharacterNamedResultSetGetter;
import org.sfm.jdbc.getter.DoubleIndexedResultSetGetter;
import org.sfm.jdbc.getter.DoubleNamedResultSetGetter;
import org.sfm.jdbc.getter.EnumIndexedResultSetGetter;
import org.sfm.jdbc.getter.EnumNamedResultSetGetter;
import org.sfm.jdbc.getter.FloatIndexedResultSetGetter;
import org.sfm.jdbc.getter.FloatNamedResultSetGetter;
import org.sfm.jdbc.getter.IntIndexedResultSetGetter;
import org.sfm.jdbc.getter.IntNamedResultSetGetter;
import org.sfm.jdbc.getter.LongIndexedResultSetGetter;
import org.sfm.jdbc.getter.LongNamedResultSetGetter;
import org.sfm.jdbc.getter.OrdinalEnumIndexedResultSetGetter;
import org.sfm.jdbc.getter.OrdinalEnumNamedResultSetGetter;
import org.sfm.jdbc.getter.ShortIndexedResultSetGetter;
import org.sfm.jdbc.getter.ShortNamedResultSetGetter;
import org.sfm.jdbc.getter.StringEnumIndexedResultSetGetter;
import org.sfm.jdbc.getter.StringEnumNamedResultSetGetter;
import org.sfm.jdbc.getter.StringIndexedResultSetGetter;
import org.sfm.jdbc.getter.StringNamedResultSetGetter;
import org.sfm.jdbc.getter.TimestampIndexedResultSetGetter;
import org.sfm.jdbc.getter.TimestampNamedResultSetGetter;
import org.sfm.map.GetterFactory;
import org.sfm.map.MapperBuildingException;
import org.sfm.reflect.Getter;
import org.sfm.reflect.TypeHelper;

public final class ResultSetGetterFactory implements GetterFactory{
	public static final int UNDEFINED = -99999;

	@SuppressWarnings("unchecked")
	private 

Getter newNamedGetter( final Type genericType, final ColumnKey key) { Getter getter = null; Class type = TypeHelper.toClass(genericType); final String column = key.getColumnName(); if (String.class.isAssignableFrom(type)) { getter = (Getter) new StringNamedResultSetGetter(column); } else if (Date.class.isAssignableFrom(type)) { getter = (Getter) new TimestampNamedResultSetGetter(column); } else if (type.equals(Boolean.class) || type.equals(boolean.class)) { getter = (Getter) new BooleanNamedResultSetGetter(column); } else if (type.equals(Integer.class) || type.equals(int.class)) { getter = (Getter) new IntNamedResultSetGetter(column); } else if (type.equals(Long.class) || type.equals(long.class)) { getter = (Getter) new LongNamedResultSetGetter(column); } else if (type.equals(Float.class) || type.equals(float.class)) { getter = (Getter) new FloatNamedResultSetGetter(column); } else if (type.equals(Double.class) || type.equals(double.class)) { getter = (Getter) new DoubleNamedResultSetGetter(column); } else if (type.equals(Byte.class)|| type.equals(byte.class)) { getter = (Getter) new ByteNamedResultSetGetter(column); } else if (type.equals(Character.class) || type.equals(char.class)) { getter = (Getter) new CharacterNamedResultSetGetter(column); } else if (type.equals(Short.class) || type.equals(short.class)) { getter = (Getter) new ShortNamedResultSetGetter(column); } else if (Enum.class.isAssignableFrom(type)) { @SuppressWarnings("rawtypes") Class enumClass = (Class) type; getter = nameEnumGetter(enumClass, key); } return getter; } @SuppressWarnings("unchecked") private

Getter newIndexedGetter( Type genericType, ColumnKey key) { Getter getter = null; Class type = TypeHelper.toClass(genericType); int column = key.getColumnIndex(); if (String.class.isAssignableFrom(type)) { getter = (Getter) new StringIndexedResultSetGetter(column); } else if (Date.class.isAssignableFrom(type)) { getter = (Getter) new TimestampIndexedResultSetGetter(column); } else if (type.equals(Boolean.class) || type.equals(boolean.class)) { getter = (Getter) new BooleanIndexedResultSetGetter(column); } else if (type.equals(Integer.class) || type.equals(int.class)) { getter = (Getter) new IntIndexedResultSetGetter(column); } else if (type.equals(Long.class) || type.equals(long.class)) { getter = (Getter) new LongIndexedResultSetGetter(column); } else if (type.equals(Float.class) || type.equals(float.class)) { getter = (Getter) new FloatIndexedResultSetGetter(column); } else if (type.equals(Double.class) || type.equals(double.class)) { getter = (Getter) new DoubleIndexedResultSetGetter(column); } else if (type.equals(Byte.class) || type.equals(byte.class)) { getter = (Getter) new ByteIndexedResultSetGetter(column); } else if (type.equals(Character.class) || type.equals(char.class)) { getter = (Getter) new CharacterIndexedResultSetGetter(column); } else if (type.equals(Short.class) || type.equals(short.class)) { getter = (Getter) new ShortIndexedResultSetGetter(column); } else if (Enum.class.isAssignableFrom(type)) { @SuppressWarnings("rawtypes") Class enumClass = (Class) type; getter = indexEnumGetter(enumClass, key); } return getter; } private

> Getter indexEnumGetter(Class

type, ColumnKey key) { int column = key.getColumnIndex(); switch(key.getSqlType()) { case ColumnKey.UNDEFINED_TYPE: return new EnumIndexedResultSetGetter

(column, type); case Types.BIGINT: case Types.INTEGER: case Types.NUMERIC: case Types.SMALLINT: case Types.TINYINT: return new OrdinalEnumIndexedResultSetGetter

(column, type); case Types.CHAR: case Types.LONGNVARCHAR: case Types.LONGVARCHAR: case Types.NCHAR: case Types.NVARCHAR: case Types.VARCHAR: return new StringEnumIndexedResultSetGetter

(column, type); default: throw new MapperBuildingException("Incompatible type " + key.getSqlType() + " with enum"); } } private

> Getter nameEnumGetter( final Class

type, final ColumnKey key) { String column = key.getColumnName(); switch(key.getSqlType()) { case ColumnKey.UNDEFINED_TYPE: return new EnumNamedResultSetGetter

(column, type); case Types.BIGINT: case Types.INTEGER: case Types.NUMERIC: case Types.SMALLINT: case Types.TINYINT: return new OrdinalEnumNamedResultSetGetter

(column, type); case Types.CHAR: case Types.LONGNVARCHAR: case Types.LONGVARCHAR: case Types.NCHAR: case Types.NVARCHAR: case Types.VARCHAR: return new StringEnumNamedResultSetGetter

(column, type); default: throw new MapperBuildingException("Incompatible type " + key.getSqlType() + " with enum"); } } @Override public

Getter newGetter(Type genericType, ColumnKey key) { if (key.hasColumnIndex()) { return newIndexedGetter(genericType, key); } else { return newNamedGetter(genericType, key); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy