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

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

Go to download

Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.

The newest version!
package org.sfm.jdbc.impl.getter;

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

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.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public final class ResultSetGetterFactory implements GetterFactory{

	public static GetterFactory DATE_GETTER_FACTORY = 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; } } }; 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 GetterFactory ENUM_GETTER_FACTORY = 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"); } } }; 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, DATE_GETTER_FACTORY); put(java.sql.Date.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

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

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

Getter newGetter(Type genericType, JdbcColumnKey key) { return (Getter) new TimeResultSetGetter(key.getIndex()); } }); 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(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 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 (Object.class.equals(clazz)) { return (Getter) new ObjectResultSetGetter(key.getIndex()); } 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; if (clazz.isEnum()) { getterFactory = ENUM_GETTER_FACTORY; } else { getterFactory = factoryPerType.get(clazz); } if (getterFactory == null) { for(Entry, GetterFactory> e : factoryPerType.entrySet()) { if (clazz.isAssignableFrom(e.getKey())) { getterFactory = e.getValue(); break; } } } Getter getter = null; if (getterFactory != null) { getter = (Getter) getterFactory.newGetter(genericType, key); } else { getter = (Getter) JodaTimeGetterHelper.getGetter(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