package org.sql2o.converters;
import java.sql.Timestamp;
import java.util.Date;
/**
* Used by sql2o to convert a value from the database into a {@link Date}.
*/
public abstract class AbstractDateConverter<E extends Date> implements Converter<E> {
private final Class<E> classOfDate;
protected AbstractDateConverter(Class<E> classOfDate) {
this.classOfDate = classOfDate;
}
protected abstract E fromMilliseconds(long millisecond);
@SuppressWarnings("unchecked")
public E convert(Object val) throws ConverterException {
if (val == null){
return null;
}
if (classOfDate.isInstance(val)){
return (E) val;
}
if(val instanceof java.util.Date){
return fromMilliseconds(((Date) val).getTime());
}
if (val instanceof Number){
return fromMilliseconds(((Number) val).longValue());
}
throw new ConverterException("Cannot convert type " + val.getClass().toString() + " to java.util.Date");
}
public Object toDatabaseParam(Date val) {
if(val==null) return null;
return (val instanceof Timestamp)
? (Timestamp) val
:new Timestamp(val.getTime());
}
}