package br.com.caelum.iogi.conversion; import java.text.DateFormat; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.Locale; import br.com.caelum.iogi.reflection.Target; import br.com.caelum.iogi.spi.LocaleProvider; public class LocaleBasedCalendarConverter extends TypeConverter<Calendar> { private final LocaleProvider localeProvider; public LocaleBasedCalendarConverter(final LocaleProvider localeProvider) { this.localeProvider = localeProvider; } public boolean isAbleToInstantiate(final Target<?> target) { return target.getClassType() == Calendar.class; } @Override protected Calendar convert(final String stringValue, final Target<?> to) throws ParseException { final Locale locale = providedOrDefault(); final DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, locale); final Date date = format.parse(stringValue); final Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(date.getTime()); return calendar; } private Locale providedOrDefault() { Locale locale = localeProvider.getLocale(); if (locale == null) locale = Locale.getDefault(); return locale; } }