You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by bb...@apache.org on 2017/04/05 17:22:56 UTC

nifi git commit: NIFI-3664: - Updating the unmarshalling to consider the current date when parsing the time.

Repository: nifi
Updated Branches:
  refs/heads/master a565484dd -> f5f54c468


NIFI-3664: - Updating the unmarshalling to consider the current date when parsing the time.

This closes #1647.

Signed-off-by: Bryan Bende <bb...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/f5f54c46
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/f5f54c46
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/f5f54c46

Branch: refs/heads/master
Commit: f5f54c468c96eeef7726864a4af354882fbea712
Parents: a565484
Author: Matt Gilman <ma...@gmail.com>
Authored: Thu Mar 30 20:53:33 2017 +0100
Committer: Bryan Bende <bb...@apache.org>
Committed: Wed Apr 5 13:22:35 2017 -0400

----------------------------------------------------------------------
 .../nifi/web/api/dto/util/TimeAdapter.java      | 27 +++++++++++++-----
 .../nifi/web/api/dto/util/TimezoneAdapter.java  | 30 +++++++++++++++-----
 2 files changed, 43 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/f5f54c46/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimeAdapter.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimeAdapter.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimeAdapter.java
index 8f3e195..d044757 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimeAdapter.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimeAdapter.java
@@ -17,7 +17,12 @@
 package org.apache.nifi.web.api.dto.util;
 
 import javax.xml.bind.annotation.adapters.XmlAdapter;
-import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoField;
 import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
@@ -29,18 +34,26 @@ public class TimeAdapter extends XmlAdapter<String, Date> {
 
     public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss z";
 
+    private static final ZoneId ZONE_ID = TimeZone.getDefault().toZoneId();
+
     @Override
     public String marshal(Date date) throws Exception {
-        final SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_TIME_FORMAT, Locale.US);
-        formatter.setTimeZone(TimeZone.getDefault());
-        return formatter.format(date);
+        final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT, Locale.US);
+        final ZonedDateTime localDateTime = ZonedDateTime.ofInstant(date.toInstant(), ZONE_ID);
+        return formatter.format(localDateTime);
     }
 
     @Override
     public Date unmarshal(String date) throws Exception {
-        final SimpleDateFormat parser = new SimpleDateFormat(DEFAULT_TIME_FORMAT, Locale.US);
-        parser.setTimeZone(TimeZone.getDefault());
-        return parser.parse(date);
+        final LocalDateTime now = LocalDateTime.now();
+        final DateTimeFormatter parser = new DateTimeFormatterBuilder().appendPattern(DEFAULT_TIME_FORMAT)
+                .parseDefaulting(ChronoField.YEAR, now.getYear())
+                .parseDefaulting(ChronoField.MONTH_OF_YEAR, now.getMonthValue())
+                .parseDefaulting(ChronoField.DAY_OF_MONTH, now.getDayOfMonth())
+                .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
+                .toFormatter(Locale.US);
+        final LocalDateTime parsedDateTime = LocalDateTime.parse(date, parser);
+        return Date.from(parsedDateTime.toInstant(ZONE_ID.getRules().getOffset(now)));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/f5f54c46/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimezoneAdapter.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimezoneAdapter.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimezoneAdapter.java
index 391da89..557ef9c 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimezoneAdapter.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/util/TimezoneAdapter.java
@@ -17,7 +17,12 @@
 package org.apache.nifi.web.api.dto.util;
 
 import javax.xml.bind.annotation.adapters.XmlAdapter;
-import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoField;
 import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
@@ -29,18 +34,29 @@ public class TimezoneAdapter extends XmlAdapter<String, Date> {
 
     public static final String DEFAULT_DATE_TIME_FORMAT = "z";
 
+    private static final ZoneId ZONE_ID = TimeZone.getDefault().toZoneId();
+
     @Override
     public String marshal(Date date) throws Exception {
-        final SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT, Locale.US);
-        formatter.setTimeZone(TimeZone.getDefault());
-        return formatter.format(date);
+        final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT, Locale.US);
+        final ZonedDateTime localDateTime = ZonedDateTime.ofInstant(date.toInstant(), ZONE_ID);
+        return formatter.format(localDateTime);
     }
 
     @Override
     public Date unmarshal(String date) throws Exception {
-        final SimpleDateFormat parser = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT, Locale.US);
-        parser.setTimeZone(TimeZone.getDefault());
-        return parser.parse(date);
+        final LocalDateTime now = LocalDateTime.now();
+        final DateTimeFormatter parser = new DateTimeFormatterBuilder().appendPattern(DEFAULT_DATE_TIME_FORMAT)
+                .parseDefaulting(ChronoField.YEAR, now.getYear())
+                .parseDefaulting(ChronoField.MONTH_OF_YEAR, now.getMonthValue())
+                .parseDefaulting(ChronoField.DAY_OF_MONTH, now.getDayOfMonth())
+                .parseDefaulting(ChronoField.HOUR_OF_DAY, now.getHour())
+                .parseDefaulting(ChronoField.MINUTE_OF_HOUR, now.getMinute())
+                .parseDefaulting(ChronoField.SECOND_OF_MINUTE, now.getSecond())
+                .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
+                .toFormatter(Locale.US);
+        final LocalDateTime parsedDateTime = LocalDateTime.parse(date, parser);
+        return Date.from(parsedDateTime.toInstant(ZONE_ID.getRules().getOffset(now)));
     }
 
 }