package com.juick.www.formatter; import com.juick.util.DateFormatter; import org.springframework.context.MessageSource; import org.springframework.format.Formatter; import javax.annotation.Resource; import java.text.ParseException; import java.util.Date; import java.util.Locale; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; /** * Created by aalexeev on 11/22/16. */ public class SpringDateFormatter implements Formatter { @Resource private MessageSource messageSource; private ConcurrentMap formattersMap = new ConcurrentHashMap<>(4, 0.75f, 2); // MAX 4 languages and 4/2=2 threads for write @Override public Date parse(final String text, final Locale locale) throws ParseException { DateFormatter formatter = formattersMap.getOrDefault( locale, createFormatter(locale)); return formatter.parse(text); } @Override public String print(final Date object, final Locale locale) { DateFormatter formatter = formattersMap.getOrDefault( locale, createFormatter(locale)); return formatter.format(object); } private DateFormatter createFormatter(final Locale locale) { String pattern = messageSource.getMessage("date.format", null, locale); return new DateFormatter(pattern); } }