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.

There is a newer version: 1.10.3
Show 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.map.ColumnDefinition;
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;


//IFJAVA8_START
import org.sfm.map.column.time.JavaTimeHelper;
import org.sfm.jdbc.impl.getter.time.*;
import java.time.*;
//IFJAVA8_END
public final class ResultSetGetterFactory implements GetterFactory{

	public static final GetterFactory DATE_GETTER_FACTORY = new GetterFactory() {
		@SuppressWarnings("unchecked")
		@Override
		public 

Getter newGetter(Type genericType, JdbcColumnKey key, ColumnDefinition columnDefinition) { 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, ColumnDefinition columnDefinition) { 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 GetterFactory ENUM_GETTER_FACTORY = new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type type, JdbcColumnKey key, ColumnDefinition columnDefinition) { @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; private static final Map, GetterFactory> factoryPerType = new HashMap, GetterFactory>(); static { factoryPerType.put(String.class, new StringResultSetGetterFactory()); factoryPerType.put(Date.class, DATE_GETTER_FACTORY); factoryPerType.put(java.util.Calendar.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key, ColumnDefinition columnDefinition) { Getter dateGetter = DATE_GETTER_FACTORY.newGetter(Date.class, key, columnDefinition); return (Getter) new CalendarResultSetGetter(dateGetter); } }); factoryPerType.put(java.sql.Date.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

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

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

Getter newGetter(Type genericType, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new TimeResultSetGetter(key.getIndex()); } }); factoryPerType.put(Boolean.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Getter newGetter(Type genericType, JdbcColumnKey key, ColumnDefinition columnDefinition) { 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()); } } }); factoryPerType.put(Clob.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

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

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

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

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

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

Getter newGetter(Type genericType, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new SqlArrayResultSetGetter(key.getIndex()); } }); //IFJAVA8_START factoryPerType.put(LocalDate.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type target, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new JavaLocalDateResultSetGetter(key, JavaTimeHelper.getZoneId(columnDefinition)); } }); factoryPerType.put(LocalDateTime.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type target, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new JavaLocalDateTimeResultSetGetter(key, JavaTimeHelper.getZoneId(columnDefinition)); } }); factoryPerType.put(LocalTime.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type target, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new JavaLocalTimeResultSetGetter(key, JavaTimeHelper.getZoneId(columnDefinition)); } }); factoryPerType.put(OffsetDateTime.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type target, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new JavaOffsetDateTimeResultSetGetter(key, JavaTimeHelper.getZoneId(columnDefinition)); } }); factoryPerType.put(OffsetTime.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type target, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new JavaOffsetTimeResultSetGetter(key, JavaTimeHelper.getZoneId(columnDefinition)); } }); factoryPerType.put(ZonedDateTime.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type target, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new JavaZonedDateTimeResultSetGetter(key, JavaTimeHelper.getZoneId(columnDefinition)); } }); factoryPerType.put(Instant.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type target, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new JavaInstantResultSetGetter(key); } }); factoryPerType.put(Year.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type target, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new JavaYearResultSetGetter(key, JavaTimeHelper.getZoneId(columnDefinition)); } }); factoryPerType.put(YearMonth.class, new GetterFactory() { @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type target, JdbcColumnKey key, ColumnDefinition columnDefinition) { return (Getter) new JavaYearMonthResultSetGetter(key, JavaTimeHelper.getZoneId(columnDefinition)); } }); //IFJAVA8_END } @SuppressWarnings("unchecked") @Override public

Getter newGetter(Type genericType, JdbcColumnKey key, ColumnDefinition columnDefinition) { 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, columnDefinition); } else if (TypeHelper.isAssignable(List.class, genericType)) { Type elementType = TypeHelper.getComponentType(genericType); return (Getter) newArrayListGetter(elementType, key, columnDefinition); } } 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; if (getterFactory != null) { getter = (Getter) getterFactory.newGetter(genericType, key, columnDefinition); } else { getter = (Getter) JodaTimeGetterHelper.getGetter(genericType, key, columnDefinition); } return getter; } private Getter newArrayGetter(Class elementType, JdbcColumnKey key, ColumnDefinition columnDefinition) { Getter elementGetter = newGetter(elementType, new JdbcColumnKey("elt", 2), columnDefinition); if (elementGetter != null) { return new ArrayResultSetGetter(key.getIndex(), elementType, elementGetter); } return null; } private Getter> newArrayListGetter(Type elementType, JdbcColumnKey key, ColumnDefinition columnDefinition) { Getter elementGetter = newGetter(elementType, new JdbcColumnKey("elt", 2), columnDefinition); if (elementGetter != null) { return new ArrayToListResultSetGetter(key.getIndex(), elementGetter); } return null; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy