/*
* 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 AbstractStringBasedUserType<T>
extends AbstractBaseUserType
{
protected AbstractStringBasedUserType( Class clazz )
{
super( clazz, Types.VARCHAR );
}
public final Object nullSafeGet( ResultSet rs, String[] names, Object owner )
throws HibernateException, SQLException
{
String value = rs.getString( 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 String )
{
st.setString( index, value.toString() );
}
else
{
//noinspection unchecked
final T objectValue = (T) value;
final String stringValue = getStringValue( objectValue );
st.setString( index, stringValue );
}
}
public abstract T get( final String value );
public abstract String getStringValue( final T value );
}