From 71a18195fb14087601d9bea44120f6253899b59a Mon Sep 17 00:00:00 2001
From: Shinsuke Sugaya <shinsuke@apache.org>
Date: Thu, 2 Jan 2020 14:24:44 +0900
Subject: [PATCH] fix #2354 add fe:formatDuration

---
 .../java/org/codelibs/fess/taglib/FessFunctions.java |  6 ++++++
 src/main/webapp/WEB-INF/fe.tld                       | 12 ++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java
index a609a0747..d04c5ddf0 100644
--- a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java
+++ b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java
@@ -44,6 +44,7 @@ import java.util.stream.Collectors;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.lang3.time.DurationFormatUtils;
 import org.apache.commons.text.StringEscapeUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -163,6 +164,11 @@ public class FessFunctions {
         return date.format(DateTimeFormatter.ofPattern(Constants.ISO_DATETIME_FORMAT, Locale.ROOT));
     }
 
+    public static String formatDuration(final long durationMillis) {
+        return DurationFormatUtils.formatDuration(durationMillis, "d 'days' HH:mm:ss.SSS").replace("0 days", StringUtil.EMPTY).trim();
+
+    }
+
     public static String formatNumber(final long value, final String pattern) {
         final DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(getUserLocale());
         df.applyPattern(pattern);
diff --git a/src/main/webapp/WEB-INF/fe.tld b/src/main/webapp/WEB-INF/fe.tld
index e8c7bb659..9f8c3a8f5 100644
--- a/src/main/webapp/WEB-INF/fe.tld
+++ b/src/main/webapp/WEB-INF/fe.tld
@@ -71,6 +71,18 @@
     </example>
   </function>
 
+  <function>
+    <description>
+      Returns formatted duration from a given value.
+    </description>
+    <name>formatDuration</name>
+    <function-class>org.codelibs.fess.taglib.FessFunctions</function-class>
+    <function-signature>java.lang.String formatDuration(long)</function-signature>
+    <example>
+      ${fe:formatDuration(1234)}
+    </example>
+  </function>
+
   <function>
     <description>
       Returns formatted number as a file size from a given value.
-- 
GitLab