/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.store.hibernate.type; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import org.hibernate.HibernateException; public abstract class AbstractIntegerBasedUserType<T> extends AbstractBaseUserType { protected AbstractIntegerBasedUserType( Class clazz ) { super( clazz, Types.INTEGER ); } public final Object nullSafeGet( ResultSet rs, String[] names, Object owner ) throws HibernateException, SQLException { int value = rs.getInt( names[0] ); if ( rs.wasNull() ) { return null; } return get( value ); } public final void nullSafeSet( PreparedStatement st, Object value, int index ) throws HibernateException, SQLException { if ( value == null ) { st.setNull( index, getSqlType() ); } else if ( value instanceof Integer ) { st.setInt( index, (Integer) value ); } else { //noinspection unchecked final T objectValue = (T) value; final Integer intValue = getIntegerValue( objectValue ); st.setInt( index, intValue ); } } public abstract T get( final int value ); public abstract Integer getIntegerValue( final T value ); }