
com.jpattern.orm.generator.ResultSetMethodHelper Maven / Gradle / Ivy
package com.jpattern.orm.generator;
import java.io.InputStream;
import java.io.Reader;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.Array;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Date;
import java.sql.NClob;
import java.sql.Ref;
import java.sql.ResultSet;
import java.sql.RowId;
import java.sql.SQLXML;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Map;
import java.util.HashMap;
import com.jpattern.orm.exception.OrmConfigurationException;
import com.jpattern.orm.exception.OrmException;
import com.jpattern.orm.generator.wrapper.BooleanToBigDecimalWrapper;
import com.jpattern.orm.generator.wrapper.ByteToBigDecimalWrapper;
import com.jpattern.orm.generator.wrapper.CharacterToStringWrapper;
import com.jpattern.orm.generator.wrapper.DoubleToBigDecimalWrapper;
import com.jpattern.orm.generator.wrapper.FloatToBigDecimalWrapper;
import com.jpattern.orm.generator.wrapper.IntegerToBigDecimalWrapper;
import com.jpattern.orm.generator.wrapper.JodaDateMidnightToTimestampWrapper;
import com.jpattern.orm.generator.wrapper.LongToBigDecimalWrapper;
import com.jpattern.orm.generator.wrapper.ShortToBigDecimalWrapper;
import com.jpattern.orm.generator.wrapper.TypeWrapper;
import com.jpattern.orm.generator.wrapper.JodaDateTimeToSqlTimestampWrapper;
import com.jpattern.orm.generator.wrapper.JodaLocalDateTimeToSqlTimestampWrapper;
import com.jpattern.orm.generator.wrapper.JodaLocalDateToSqlTimestampWrapper;
import com.jpattern.orm.generator.wrapper.UtilDateToSqlTimestampWrapper;
/**
*
* @author Francesco Cina
*
* 06/giu/2011
*/
public class ResultSetMethodHelper {
private final Map, Method> RESULTSET_GETTER_FOR_INT = new HashMap, Method>();
private final Map, Method> RESULTSET_SETTER_FOR_STRING = new HashMap, Method>();
private final Map, TypeWrapper, ?>> WRAPPER_METHODS = new HashMap, TypeWrapper, ?>>();
public ResultSetMethodHelper() {
try {
addGetter(Array.class, "getArray");
addGetter(BigDecimal.class, "getBigDecimal");
addGetter(InputStream.class, "getBinaryStream");
addGetter(Blob.class, "getBlob");
addGetter(Boolean.TYPE, "getBoolean");
addGetter(Byte.TYPE, "getByte");
addGetter(byte[].class, "getBytes");
addGetter(Reader.class, "getCharacterStream");
addGetter(Clob.class, "getClob");
addGetter(Date.class, "getDate");
addGetter(Double.TYPE, "getDouble");
addGetter(Float.TYPE, "getFloat");
addGetter(Integer.TYPE, "getInt");
addGetter(Long.TYPE, "getLong");
addGetter(NClob.class, "getNClob");
addGetter(Object.class, "getObject");
addGetter(Ref.class, "getRef");
addGetter(RowId.class, "getRowId");
addGetter(Short.TYPE, "getShort");
addGetter(SQLXML.class, "getSQLXML");
addGetter(String.class, "getString");
addGetter(Time.class, "getTime");
addGetter(Timestamp.class, "getTimestamp");
addGetter(URL.class, "getURL");
//After initialization
this.addWrappers(new BooleanToBigDecimalWrapper());
this.addWrappers(new ByteToBigDecimalWrapper());
this.addWrappers(new CharacterToStringWrapper());
this.addWrappers(new DoubleToBigDecimalWrapper());
this.addWrappers(new FloatToBigDecimalWrapper());
this.addWrappers(new IntegerToBigDecimalWrapper());
this.addWrappers(new LongToBigDecimalWrapper());
this.addWrappers(new ShortToBigDecimalWrapper());
this.addWrappers(new UtilDateToSqlTimestampWrapper());
try {
this.addWrappers(new JodaDateTimeToSqlTimestampWrapper());
this.addWrappers(new JodaDateMidnightToTimestampWrapper());
this.addWrappers(new JodaLocalDateTimeToSqlTimestampWrapper());
this.addWrappers(new JodaLocalDateToSqlTimestampWrapper());
} catch (final Throwable e) {}
} catch (final Exception e) {
throw new OrmException(e);
}
}
public final Method findResultSetGetterForString(final Class> type) throws SecurityException, NoSuchMethodException, OrmConfigurationException {
if (RESULTSET_SETTER_FOR_STRING.containsKey(type)) {
return RESULTSET_SETTER_FOR_STRING.get(type);
}
throw new OrmConfigurationException("Type [" + type + "] is not supported at this time");
}
public final Method findResultSetGetterForInt(final Class> type) throws SecurityException, NoSuchMethodException, OrmConfigurationException {
if (RESULTSET_GETTER_FOR_INT.containsKey(type)) {
return RESULTSET_GETTER_FOR_INT.get(type);
}
throw new OrmConfigurationException("Type [" + type + "] is not supported at this time");
}
private void addGetter(final Class> key, final String resultSetMethodName) throws SecurityException, NoSuchMethodException {
RESULTSET_GETTER_FOR_INT.put(key, ResultSet.class.getMethod(resultSetMethodName, new Class[] { int.class }));
RESULTSET_SETTER_FOR_STRING.put(key, ResultSet.class.getMethod(resultSetMethodName, new Class[] { String.class }));
}
public void addWrappers(final TypeWrapper wrapper) throws SecurityException, OrmConfigurationException, NoSuchMethodException {
WRAPPER_METHODS.put(wrapper.wrapperClass(), wrapper);
addGetter( wrapper.wrapperClass() , findResultSetGetterForInt( wrapper.resultSetTypeToUse() ).getName() );
}
@SuppressWarnings("unchecked")
public TypeWrapper getWrapper(final Class clazz) {
if (WRAPPER_METHODS.containsKey(clazz)) {
return (TypeWrapper) WRAPPER_METHODS.get(clazz);
}
throw new OrmConfigurationException("Type [" + clazz + "] has no wrapper associated");
}
public boolean isWrappedType(final Class> clazz) {
return WRAPPER_METHODS.containsKey(clazz);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy