Merge branch 'stable-2.14'
* stable-2.14:
Use Java 8 Date/time API
Autoclose writer instance
Use latest bazlets
Change-Id: I535b8cbb3e50153aef0154317317e5022a5ced8f
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java
index 41e90e2..03e5076 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java
@@ -62,11 +62,9 @@
rsp.setContentType("text/html");
Map<String, String> params =
req.getQueryString() != null ? getParameters(req) : null;
- Writer out = rsp.getWriter();
- String query = null;
- try {
- query = queryMaker.formQueryFromRequestParameters(params);
+ try (Writer out = rsp.getWriter()) {
+ String query = queryMaker.formQueryFromRequestParameters(params);
for (String event : store.queryChangeEvents(query)) {
out.write(event + "\n");
}
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 b01de71..74a4465 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
@@ -25,11 +25,10 @@
import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
import java.util.Map;
@Singleton
@@ -37,10 +36,10 @@
private static final int TWO = 2;
private static final String TIME_ONE = "t1";
private static final String TIME_TWO = "t2";
- private static final ThreadLocal<DateFormat> DATE_TIME_FORMAT = ThreadLocal
- .withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
- private static final ThreadLocal<DateFormat> DATE_ONLY_FORMAT = ThreadLocal
- .withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));
+ private static final DateTimeFormatter DATE_TIME_FORMAT =
+ DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ private static final DateTimeFormatter DATE_ONLY_FORMAT =
+ DateTimeFormatter.ofPattern("yyyy-MM-dd");
private final int returnLimit;
@@ -55,16 +54,15 @@
if (params == null) {
return getDefaultQuery();
}
- Date[] dates;
+ String[] dates;
try {
dates = parseDates(params.get(TIME_ONE), params.get(TIME_TWO));
- } catch (ParseException e) {
+ } catch (DateTimeParseException e) {
throw new MalformedQueryException(e);
}
return String.format(
"SELECT * FROM %s WHERE %s BETWEEN '%s' and '%s' LIMIT %d", TABLE_NAME,
- DATE_ENTRY, DATE_TIME_FORMAT.get().format(dates[0]),
- DATE_TIME_FORMAT.get().format(dates[1]), returnLimit);
+ DATE_ENTRY, dates[0], dates[1], returnLimit);
}
@Override
@@ -74,27 +72,30 @@
+ " a ORDER BY " + PRIMARY_ENTRY + " ASC";
}
- private Date[] parseDates(String dateOne, String dateTwo)
- throws MalformedQueryException, ParseException {
+ private String[] parseDates(String dateOne, String dateTwo)
+ throws MalformedQueryException, DateTimeParseException {
if (dateOne == null && dateTwo == null) {
throw new MalformedQueryException();
}
- Calendar cal = Calendar.getInstance();
- Date dOne = dateOne == null ? cal.getTime() : parseDate(dateOne);
- Date dTwo = dateTwo == null ? cal.getTime() : parseDate(dateTwo);
- Date[] dates = new Date[TWO];
+ LocalDateTime dOne =
+ dateOne == null ? LocalDateTime.now() : parseDate(dateOne);
+ LocalDateTime dTwo =
+ dateTwo == null ? LocalDateTime.now() : parseDate(dateTwo);
+ LocalDateTime[] dates = new LocalDateTime[TWO];
- dates[0] = dOne.compareTo(dTwo) < 0 ? dOne : dTwo;
- dates[1] = dOne.compareTo(dTwo) < 0 ? dTwo : dOne;
- return dates;
+ dates[0] = dOne.isBefore(dTwo) ? dOne : dTwo;
+ dates[1] = dOne.isBefore(dTwo) ? dTwo : dOne;
+ return new String[] {DATE_TIME_FORMAT.format(dates[0]),
+ DATE_TIME_FORMAT.format(dates[1])};
}
- private Date parseDate(String date) throws ParseException {
- Date parsedDate;
+ private LocalDateTime parseDate(String date) throws DateTimeParseException {
+ LocalDateTime parsedDate;
try {
- parsedDate = DATE_TIME_FORMAT.get().parse(date);
- } catch (ParseException e) {
- parsedDate = DATE_ONLY_FORMAT.get().parse(date);
+ parsedDate = LocalDateTime.parse(date, DATE_TIME_FORMAT);
+ } catch (DateTimeParseException e) {
+ LocalDate localDate = LocalDate.parse(date, DATE_ONLY_FORMAT);
+ parsedDate = localDate.atStartOfDay();
}
return parsedDate;
}
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
index fd735be..96d87a1 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
@@ -105,7 +105,7 @@
@Test
public void onlyDateNoTime() throws Exception {
- String query = queryMaker.formQueryFromRequestParameters(
+ query = queryMaker.formQueryFromRequestParameters(
ImmutableMap.of(T1, "2013-10-10", T2, "2014-10-10"));
assertThat(query).isNotEqualTo(defaultQuery);
}