diff options
Diffstat (limited to 'juick-spring-www/src/main/java/com/juick/www/formatter/SpringDateFormatter.java')
-rw-r--r-- | juick-spring-www/src/main/java/com/juick/www/formatter/SpringDateFormatter.java | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/juick-spring-www/src/main/java/com/juick/www/formatter/SpringDateFormatter.java b/juick-spring-www/src/main/java/com/juick/www/formatter/SpringDateFormatter.java new file mode 100644 index 00000000..61a2fe88 --- /dev/null +++ b/juick-spring-www/src/main/java/com/juick/www/formatter/SpringDateFormatter.java @@ -0,0 +1,45 @@ +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<Date> { + @Resource + private MessageSource messageSource; + private ConcurrentMap<Locale, com.juick.util.DateFormatter> 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); + } + +} |