From 0cbdc4ecb927b7ab068e5833caefbba65c9aa87a Mon Sep 17 00:00:00 2001 From: Alexander Alexeev Date: Sat, 10 Dec 2016 21:00:14 +0700 Subject: caching date formatter --- .../juick/www/formatter/SpringDateFormatter.java | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 juick-spring-www/src/main/java/com/juick/www/formatter/SpringDateFormatter.java (limited to 'juick-spring-www/src/main/java/com/juick/www/formatter/SpringDateFormatter.java') 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 { + @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); + } + +} -- cgit v1.2.3