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

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

package org.sfm.jdbc.impl.getter;

import java.io.InputStream;
import java.io.Reader;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URL;
import java.sql.Array;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.NClob;
import java.sql.Ref;
import java.sql.ResultSet;
import java.sql.RowId;
import java.sql.SQLXML;
import java.sql.Types;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.sfm.jdbc.JdbcColumnKey;
import org.sfm.map.MapperBuildingException;
import org.sfm.map.impl.GetterFactory;
import org.sfm.reflect.Getter;
import org.sfm.reflect.TypeHelper;

public final class ResultSetGetterFactory implements GetterFactory{
	public static final class StringResultSetGetterFactory implements
			GetterFactory {
		@SuppressWarnings("unchecked")
		@Override
		public 

Getter newGetter(Type genericType, JdbcColumnKey key) { switch(key.getSqlType() ) { case Types.NCHAR: case Types.NVARCHAR: case Types.LONGNVARCHAR: case Types.NCLOB: return (Getter) new NStringResultSetGetter(key.getIndex()); default: return (Getter) new StringResultSetGetter(key.getIndex()); } } } public static final int UNDEFINED = -99999; @SuppressWarnings("serial") private static final Map, GetterFactory> factoryPerType = new HashMap, GetterFactory>() {{ put(String.class, new StringResultSetGetterFactory()); put(Date.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { switch (key.getSqlType()) { case JdbcColumnKey.UNDEFINED_TYPE: return (Getter) new UndefinedDateResultSetGetter(key.getIndex()); case Types.TIMESTAMP: return (Getter) new TimestampResultSetGetter(key.getIndex()); case Types.DATE: return (Getter) new DateResultSetGetter(key.getIndex()); case Types.TIME: return (Getter) new TimeResultSetGetter(key.getIndex()); default: return null; } } }); put(Boolean.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new BooleanResultSetGetter(key.getIndex()); } }); put(Byte.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new ByteResultSetGetter(key.getIndex()); } }); put(Character.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new CharacterResultSetGetter(key.getIndex()); } }); put(Short.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new ShortResultSetGetter(key.getIndex()); } }); put(Integer.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new IntResultSetGetter(key.getIndex()); } }); put(Long.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new LongResultSetGetter(key.getIndex()); } }); put(Float.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new FloatResultSetGetter(key.getIndex()); } }); put(Double.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new DoubleResultSetGetter(key.getIndex()); } }); put(BigInteger.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new BigIntegerResultSetGetter(key.getIndex()); } }); put(BigDecimal.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new BigDecimalResultSetGetter(key.getIndex()); } }); put(Enum.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type type, JdbcColumnKey key) { @SuppressWarnings("rawtypes") Class enumClass = TypeHelper.toClass(type); return (Getter) newEnumGetter(enumClass, key); } private

> Getter newEnumGetter(Class

type, JdbcColumnKey key) { int column = key.getIndex(); switch(key.getSqlType()) { case JdbcColumnKey.UNDEFINED_TYPE: return new EnumResultSetGetter

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

(column, type); case Types.CHAR: case Types.LONGVARCHAR: case Types.VARCHAR: case Types.CLOB: return new StringEnumResultSetGetter

(new StringResultSetGetter(column), type); case Types.LONGNVARCHAR: case Types.NCHAR: case Types.NVARCHAR: case Types.NCLOB: return new StringEnumResultSetGetter

(new NStringResultSetGetter(column), type); default: throw new MapperBuildingException("Incompatible type " + key.getSqlType() + " with enum"); } } }); put(URL.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { if (key.getSqlType() == Types.DATALINK) { return (Getter) new UrlResultSetGetter(key.getIndex()); } else { return (Getter) new UrlFromStringResultSetGetter(key.getIndex()); } } }); put(byte[].class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new ByteArrayResultSetGetter(key.getIndex()); } }); put(InputStream.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new InputStreamResultSetGetter(key.getIndex()); } }); put(Blob.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new BlobResultSetGetter(key.getIndex()); } }); put(Reader.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { switch(key.getSqlType()) { case Types.LONGNVARCHAR: case Types.NCHAR: case Types.NVARCHAR: case Types.NCLOB: return (Getter) new NReaderResultSetGetter(key.getIndex()); default: return (Getter) new ReaderResultSetGetter(key.getIndex()); } } }); put(Clob.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new ClobResultSetGetter(key.getIndex()); } }); put(NClob.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new NClobResultSetGetter(key.getIndex()); } }); put(Ref.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new NClobResultSetGetter(key.getIndex()); } }); put(Ref.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new RefResultSetGetter(key.getIndex()); } }); put(RowId.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new RowIdResultSetGetter(key.getIndex()); } }); put(SQLXML.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new SQLXMLResultSetGetter(key.getIndex()); } }); put(Array.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new SqlArrayResultSetGetter(key.getIndex()); } }); }}; @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key) { Class clazz = TypeHelper.wrap(TypeHelper.toClass(genericType)); if (key.getSqlType() == Types.ARRAY) { if (clazz.isArray()) { Class elementType = clazz.getComponentType(); return (Getter) newArrayGetter(elementType, key); } else if (TypeHelper.isAssignable(List.class, genericType)) { Type elementType = TypeHelper.getComponentType(genericType); return (Getter) newArrayListGetter(elementType, key); } } GetterFactory getterFactory = factoryPerType.get(clazz); if (getterFactory == null) { for(Entry, GetterFactory> e : factoryPerType.entrySet()) { if (e.getKey().isAssignableFrom(clazz)) { getterFactory = e.getValue(); break; } } } Getter getter = null; if (getterFactory != null) { getter = getterFactory.newGetter(genericType, key); } return getter; } private Getter newArrayGetter(Class elementType, JdbcColumnKey key) { Getter elementGetter = newGetter(elementType, new JdbcColumnKey("elt", 2)); if (elementGetter != null) { return new ArrayResultSetGetter(key.getIndex(), elementType, elementGetter); } return null; } private Getter> newArrayListGetter(Type elementType, JdbcColumnKey key) { Getter elementGetter = newGetter(elementType, new JdbcColumnKey("elt", 2)); if (elementGetter != null) { return new ArrayToListResultSetGetter(key.getIndex(), elementGetter); } return null; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy