From 1263d0268707b5505c1eb55796c0664f283818eb Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Thu, 4 May 2017 13:15:56 +0300 Subject: juick-www: pebble pretty time filter --- .../java/com/juick/util/PrettyTimeFormatter.java | 36 ++++++++++++++++++++++ .../pebble/extension/FormatterExtension.java | 2 ++ .../pebble/extension/filters/PrettyTimeFilter.java | 33 ++++++++++++++++++++ juick-www/src/main/webapp/WEB-INF/views/index.html | 2 +- 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 juick-core/src/main/java/com/juick/util/PrettyTimeFormatter.java create mode 100644 juick-www/src/main/java/com/mitchellbosecke/pebble/extension/filters/PrettyTimeFilter.java diff --git a/juick-core/src/main/java/com/juick/util/PrettyTimeFormatter.java b/juick-core/src/main/java/com/juick/util/PrettyTimeFormatter.java new file mode 100644 index 00000000..69be724b --- /dev/null +++ b/juick-core/src/main/java/com/juick/util/PrettyTimeFormatter.java @@ -0,0 +1,36 @@ +package com.juick.util; + +import org.ocpsoft.prettytime.PrettyTime; + +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.Locale; +import java.util.Map; + +/** + * Created by vitalyster on 04.05.2017. + */ +public class PrettyTimeFormatter { + private static final int MAX_CACHE_SIZE = 20; + + // Cache PrettyTime per locale. LRU cache to prevent memory leak. + private static final Map PRETTY_TIME_LOCALE_MAP = + new LinkedHashMap(MAX_CACHE_SIZE + 1, 1.1F, true) + { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) + { + return size() > MAX_CACHE_SIZE; + } + }; + + public String format(final Locale locale, final Date value) + { + PrettyTime prettyTime; + + synchronized (PRETTY_TIME_LOCALE_MAP) { + prettyTime = PRETTY_TIME_LOCALE_MAP.computeIfAbsent(locale, PrettyTime::new); + } + return prettyTime.format(value); + } +} diff --git a/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/FormatterExtension.java b/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/FormatterExtension.java index e26b5c20..220e0460 100644 --- a/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/FormatterExtension.java +++ b/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/FormatterExtension.java @@ -1,6 +1,7 @@ package com.mitchellbosecke.pebble.extension; import com.mitchellbosecke.pebble.extension.filters.FormatMessageFilter; +import com.mitchellbosecke.pebble.extension.filters.PrettyTimeFilter; import java.util.HashMap; import java.util.Map; @@ -13,6 +14,7 @@ public class FormatterExtension extends AbstractExtension { public Map getFilters() { Map filters = new HashMap<>(); filters.put("formatMessage", new FormatMessageFilter()); + filters.put("prettyTime", new PrettyTimeFilter()); return filters; } } diff --git a/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/filters/PrettyTimeFilter.java b/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/filters/PrettyTimeFilter.java new file mode 100644 index 00000000..bbe31bb7 --- /dev/null +++ b/juick-www/src/main/java/com/mitchellbosecke/pebble/extension/filters/PrettyTimeFilter.java @@ -0,0 +1,33 @@ +package com.mitchellbosecke.pebble.extension.filters; + +import com.juick.util.PrettyTimeFormatter; +import com.mitchellbosecke.pebble.extension.Filter; +import com.mitchellbosecke.pebble.template.EvaluationContext; + +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * Created by vitalyster on 04.05.2017. + */ +public class PrettyTimeFilter implements Filter { + + PrettyTimeFormatter formatter = new PrettyTimeFormatter(); + + @Override + public Object apply(Object input, Map args) { + if (input instanceof Date) { + EvaluationContext context = (EvaluationContext) args.get("_context"); + Locale locale = context.getLocale(); + return formatter.format(locale, (Date)input); + } + throw new IllegalArgumentException("invalid input"); + } + + @Override + public List getArgumentNames() { + return null; + } +} diff --git a/juick-www/src/main/webapp/WEB-INF/views/index.html b/juick-www/src/main/webapp/WEB-INF/views/index.html index a9d6d058..e2a38939 100644 --- a/juick-www/src/main/webapp/WEB-INF/views/index.html +++ b/juick-www/src/main/webapp/WEB-INF/views/index.html @@ -16,7 +16,7 @@ -- cgit v1.2.3