Pastebin is 300% more awesome when you are logged in. Sign Up, it's FREE!
Guest

Hibernate/Timestamp - JdbcDateTimestampTypeDescriptor

By: nickmz on Jul 13th, 2011  |  syntax: Java  |  size: 4.13 KB  |  hits: 145  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package xxx;
  2.  
  3. import org.hibernate.HibernateException;
  4. import org.hibernate.type.descriptor.WrapperOptions;
  5. import org.hibernate.type.descriptor.java.AbstractTypeDescriptor;
  6. import org.hibernate.type.descriptor.java.MutableMutabilityPlan;
  7.  
  8. import java.sql.Timestamp;
  9. import java.text.ParseException;
  10. import java.text.SimpleDateFormat;
  11. import java.util.Calendar;
  12. import java.util.Date;
  13. import java.util.GregorianCalendar;
  14.  
  15. public class JdbcDateTimestampTypeDescriptor extends AbstractTypeDescriptor<Date> {
  16.  
  17.     public static final JdbcDateTimestampTypeDescriptor INSTANCE = new JdbcDateTimestampTypeDescriptor();
  18.     public static final String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss";
  19.  
  20.     public static class DateMutabilityPlan extends MutableMutabilityPlan<Date> {
  21.         public static final DateMutabilityPlan INSTANCE = new DateMutabilityPlan();
  22.  
  23.         public Date deepCopyNotNull(Date value) {
  24.             return new Date(value.getTime());
  25.         }
  26.     }
  27.  
  28.     public JdbcDateTimestampTypeDescriptor() {
  29.         super( Date.class, DateMutabilityPlan.INSTANCE );
  30.     }
  31.  
  32.     public String toString(Date value) {
  33.         return new SimpleDateFormat(TIMESTAMP_FORMAT).format( value );
  34.     }
  35.  
  36.     public Date fromString(String string) {
  37.         try {
  38.             return new Date( new SimpleDateFormat(TIMESTAMP_FORMAT).parse( string ).getTime() );
  39.         }
  40.         catch ( ParseException pe) {
  41.             throw new HibernateException( "could not parse date string" + string, pe );
  42.         }
  43.     }
  44.  
  45.     @Override
  46.     public boolean areEqual(Date one, Date another) {
  47.         if ( one == another ) {
  48.             return true;
  49.         }
  50.         if ( one == null || another == null ) {
  51.             return false;
  52.         }
  53.  
  54.         return ( one.getTime() == another.getTime() );
  55.     }
  56.  
  57.     @Override
  58.     public int extractHashCode(Date value) {
  59.         return Long.valueOf( value.getTime() / 1000 ).hashCode();
  60.     }
  61.  
  62.     @SuppressWarnings({ "unchecked" })
  63.     public <X> X unwrap(Date value, Class<X> type, WrapperOptions options) {
  64.         if ( value == null ) {
  65.             return null;
  66.         }
  67.         if ( Timestamp.class.isAssignableFrom( type ) ) {
  68.             final Timestamp rtn = Timestamp.class.isInstance( value )
  69.                     ? ( Timestamp ) value
  70.                     : new Timestamp( value.getTime() );
  71.             return (X) rtn;
  72.         }
  73.         if ( java.sql.Date.class.isAssignableFrom( type ) ) {
  74.             final java.sql.Date rtn = java.sql.Date.class.isInstance( value )
  75.                     ? ( java.sql.Date ) value
  76.                     : new java.sql.Date( value.getTime() );
  77.             return (X) rtn;
  78.         }
  79.         if ( java.sql.Time.class.isAssignableFrom( type ) ) {
  80.             final java.sql.Time rtn = java.sql.Time.class.isInstance( value )
  81.                     ? ( java.sql.Time ) value
  82.                     : new java.sql.Time( value.getTime() );
  83.             return (X) rtn;
  84.         }
  85.         if ( Date.class.isAssignableFrom( type ) ) {
  86.             return (X) value;
  87.         }
  88.         if ( Calendar.class.isAssignableFrom( type ) ) {
  89.             final GregorianCalendar cal = new GregorianCalendar();
  90.             cal.setTimeInMillis( value.getTime() );
  91.             return (X) cal;
  92.         }
  93.         if ( Long.class.isAssignableFrom( type ) ) {
  94.             return (X) Long.valueOf( value.getTime() );
  95.         }
  96.         throw unknownUnwrap( type );
  97.     }
  98.  
  99.     @SuppressWarnings({ "UnnecessaryUnboxing" })
  100.     public <X> Date wrap(X value, WrapperOptions options) {
  101.         if (value == null) {
  102.             return null;
  103.         }
  104.  
  105.         if ( Timestamp.class.isInstance( value ) ) {
  106.             return new Date( ( (Timestamp) value).getTime() );
  107.         }
  108.  
  109.         if ( Long.class.isInstance( value ) ) {
  110.             return new Date( ( (Long) value ).longValue() );
  111.         }
  112.  
  113.         if ( Calendar.class.isInstance( value ) ) {
  114.             return new Date( ( (Calendar) value ).getTimeInMillis() );
  115.         }
  116.  
  117.         if ( Date.class.isInstance( value ) ) {
  118.             return (Date) value;
  119.         }
  120.  
  121.         throw unknownWrap(value.getClass());
  122.     }
  123.  
  124. }