package org.quickbundle.third.spring.web.bind;
import java.beans.PropertyEditorSupport;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.springframework.util.StringUtils;
/**
* Property editor for <code>java.sql.Timestamp</code>,<br>
* supporting a custom <code>java.text.DateFormat</code>.
*/
public class CustomTimestampEditor extends PropertyEditorSupport {
private final SimpleDateFormat dateFormat;
private final boolean allowEmpty;
private final int exactDateLength;
public CustomTimestampEditor(SimpleDateFormat dateFormat, boolean allowEmpty) {
this.dateFormat = dateFormat;
this.allowEmpty = allowEmpty;
this.exactDateLength = -1;
}
public CustomTimestampEditor(SimpleDateFormat dateFormat,
boolean allowEmpty, int exactDateLength) {
this.dateFormat = dateFormat;
this.allowEmpty = allowEmpty;
this.exactDateLength = exactDateLength;
}
public void setAsText(String text) throws IllegalArgumentException {
if ((this.allowEmpty) && (!(StringUtils.hasText(text)))) {
setValue(null);
} else {
if ((text != null) && (this.exactDateLength >= 0)
&& (text.length() != this.exactDateLength)) {
throw new IllegalArgumentException(
"Could not parse date: it is not exactly"
+ this.exactDateLength + "characters long");
}
try {
setValue(new Timestamp(this.dateFormat.parse(text).getTime()));
} catch (ParseException ex) {
throw new IllegalArgumentException("Could not parse date: "
+ ex.getMessage(), ex);
}
}
}
public String getAsText() {
Timestamp value = (Timestamp) getValue();
return ((value != null) ? this.dateFormat.format(value) : "");
}
}