package fr.openwide.core.wicket.more.util.convert.converters; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import org.apache.commons.lang3.text.WordUtils; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.util.convert.converter.AbstractConverter; import org.apache.wicket.util.string.Strings; import fr.openwide.core.wicket.more.util.IDatePattern; public class PatternDateConverter extends AbstractConverter<Date> { private static final long serialVersionUID = 5741008524800373419L; private IDatePattern datePattern; private IModel<String> dateFormatModel; /** * Caller must take care of : * <ul> * <li>Model binding to a component</li> * <li>Model detaching</li> * </ul> */ public PatternDateConverter(IDatePattern datePattern, IModel<String> dateFormatModel) { super(); this.datePattern = datePattern; this.dateFormatModel = dateFormatModel; } /** * Back compatibility constructor. If pattern is taken from translations, then you should use a ResourceModel * with the IModel<String> constructor */ public PatternDateConverter(IDatePattern datePattern, String dateFormat) { this(datePattern, Model.of(dateFormat)); } @Override public Date convertToObject(String value, Locale locale) { if (value == null || Strings.isEmpty(value)) { return null; } else { return (Date) parse(getDateFormat(locale), value, locale); } } @Override public String convertToString(final Date value, Locale locale) { String date = getDateFormat(locale).format(value); if (datePattern.capitalize()) { return WordUtils.capitalize(date); } else { return date; } } @Override protected Class<Date> getTargetType() { return Date.class; } public DateFormat getDateFormat(Locale currentLocale) { Locale locale; if (currentLocale != null) { locale = currentLocale; } else { locale = Locale.ENGLISH; } return new SimpleDateFormat(dateFormatModel.getObject(), locale); } }