Merge branch 'stable-2.12' into stable-2.13

* stable-2.12:
  Make SimpleDateFormat thread safe

Change-Id: I9c9096d58d876cd0270ecb481278e9f8f1abfe03
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
index aadf455..5423a50 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
@@ -31,16 +31,27 @@
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Map;
+import java.util.function.Supplier;
 
 @Singleton
 class SQLQueryMaker implements QueryMaker {
   private static final int TWO = 2;
   private static final String TIME_ONE = "t1";
   private static final String TIME_TWO = "t2";
-  private static final DateFormat DATE_TIME_FORMAT = new SimpleDateFormat(
-      "yyyy-MM-dd HH:mm:ss");
-  private static final DateFormat DATE_ONLY_FORMAT = new SimpleDateFormat(
-      "yyyy-MM-dd");
+  private static final ThreadLocal<DateFormat> DATE_TIME_FORMAT =
+      ThreadLocal.withInitial(new Supplier<DateFormat>() {
+        @Override
+        public DateFormat get() {
+          return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        }
+      });
+  private static final ThreadLocal<DateFormat> DATE_ONLY_FORMAT =
+      ThreadLocal.withInitial(new Supplier<DateFormat>() {
+        @Override
+        public DateFormat get() {
+          return new SimpleDateFormat("yyyy-MM-dd");
+        }
+      });
 
   private final int returnLimit;
 
@@ -63,8 +74,8 @@
     }
     return String.format(
         "SELECT * FROM %s WHERE %s BETWEEN '%s' and '%s' LIMIT %d", TABLE_NAME,
-        DATE_ENTRY, DATE_TIME_FORMAT.format(dates[0]),
-        DATE_TIME_FORMAT.format(dates[1]), returnLimit);
+        DATE_ENTRY, DATE_TIME_FORMAT.get().format(dates[0]),
+        DATE_TIME_FORMAT.get().format(dates[1]), returnLimit);
   }
 
   @Override
@@ -92,9 +103,9 @@
   private Date parseDate(String date) throws ParseException {
     Date parsedDate;
     try {
-      parsedDate = DATE_TIME_FORMAT.parse(date);
+      parsedDate = DATE_TIME_FORMAT.get().parse(date);
     } catch (ParseException e) {
-      parsedDate = DATE_ONLY_FORMAT.parse(date);
+      parsedDate = DATE_ONLY_FORMAT.get().parse(date);
     }
     return parsedDate;
   }