package org.nocket.gen.page.visitor.bind.builder.components;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.util.convert.converter.DateConverter;
public final class YearCorrectingDateConverter extends DateConverter {
private static final long serialVersionUID = 1L;
protected final String datePattern;
protected final boolean useCorrection;
protected final String yyDatePatterForCorrection;
public YearCorrectingDateConverter(String datePattern) {
super();
this.datePattern = datePattern;
useCorrection = StringUtils.contains(datePattern, "yyyy");
yyDatePatterForCorrection = StringUtils.replace(datePattern, "yyyy", "yy");
}
@Override
public Date convertToObject(final String value, final Locale locale)
{
Date result = super.convertToObject(value, locale);
if (result != null && useCorrection) {
Calendar firstYyyDate = Calendar.getInstance();
firstYyyDate.set(100, 0, 1);
if (result.before(firstYyyDate.getTime())) {
result = parse(getDateFormat(locale, yyDatePatterForCorrection), value, locale);
}
}
return result;
}
/**
* @see org.apache.wicket.util.convert.converter.DateConverter#getDateFormat(java.util.Locale)
*/
@Override
public DateFormat getDateFormat(Locale locale) {
return getDateFormat(locale, datePattern);
}
public DateFormat getDateFormat(Locale locale, String pattern) {
if (locale == null) {
locale = Locale.getDefault();
}
// CHECKSTYLE_OFF Verwende FastDateFormat stattdessen!
return new SimpleDateFormat(pattern, locale);
// CHECKSTYLE_ON Verwende FastDateFormat stattdessen!
}
}