You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streams.apache.org by mf...@apache.org on 2014/04/01 05:31:07 UTC
[1/3] git commit: Added RFC3339 utility
Repository: incubator-streams
Updated Branches:
refs/heads/springcleaning eb6f46ac9 -> 574e10338
Added RFC3339 utility
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/361fea93
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/361fea93
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/361fea93
Branch: refs/heads/springcleaning
Commit: 361fea93d448393f81585eaf9665a5d1365f13ab
Parents: eb6f46a
Author: mfranklin <mf...@apache.org>
Authored: Mon Mar 31 22:59:53 2014 -0400
Committer: mfranklin <mf...@apache.org>
Committed: Mon Mar 31 22:59:53 2014 -0400
----------------------------------------------------------------------
.../apache/streams/data/util/RFC3339Utils.java | 94 ++++++++++++
.../data/data/util/RFC3339UtilsTest.java | 147 +++++++++++++++++++
2 files changed, 241 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/361fea93/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java b/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
new file mode 100644
index 0000000..9b8339e
--- /dev/null
+++ b/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
@@ -0,0 +1,94 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.streams.data.util;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Parses and formats Joda Time {@link org.joda.time.DateTime} dates to and from RFC3339 compatible Strings
+ */
+public class RFC3339Utils {
+ private static final String BASE = "^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}";
+ private static final String TZ = "[+-][0-9]{2}:?[0-9]{2}$";
+ private static final String SUB_SECOND = "\\.([0-9]*)";
+ private static final String UTC = "Z$";
+
+ private static final Pattern MILLIS = Pattern.compile("^[0-9]*$");
+ private static final Pattern UTC_STANDARD = Pattern.compile(BASE + UTC);
+ private static final Pattern UTC_SUB_SECOND = Pattern.compile(BASE + SUB_SECOND + UTC);
+ private static final Pattern LOCAL_STANDARD = Pattern.compile(BASE + TZ);
+ private static final Pattern LOCAL_SUB_SECOND = Pattern.compile(BASE + SUB_SECOND + TZ);
+
+ private static final String BASE_FMT = "yyyy-MM-dd'T'HH:mm:ss";
+ private static final DateTimeFormatter UTC_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "'Z'").withZoneUTC();
+ private static final DateTimeFormatter LOCAL_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "Z").withZoneUTC();
+
+
+ private RFC3339Utils() {}
+
+ public static DateTime parseUTC(String toParse) {
+ if(MILLIS.matcher(toParse).matches()) {
+ return new DateTime(Long.valueOf(toParse));
+ }
+ if(UTC_STANDARD.matcher(toParse).matches()) {
+ return parseUTC(UTC_STANDARD_FMT, toParse);
+ }
+ Matcher utc = UTC_SUB_SECOND.matcher(toParse);
+ if(utc.matches()) {
+ return parseUTC(getSubSecondFormat(utc.group(1), "'Z'"), toParse);
+ }
+ if(LOCAL_STANDARD.matcher(toParse).matches()) {
+ return parseUTC(LOCAL_STANDARD_FMT, toParse);
+ }
+ Matcher local = LOCAL_SUB_SECOND.matcher(toParse);
+ if(local.matches()) {
+ return parseUTC(getSubSecondFormat(local.group(1), "Z"), toParse);
+ }
+ throw new IllegalArgumentException(String.format("Failed to parse date %s. Ensure format is RFC3339 Compliant", toParse));
+ }
+
+ public static String format(DateTime toFormat) {
+ return UTC_STANDARD_FMT.print(toFormat.getMillis());
+ }
+
+ public static String format(DateTime toFormat, Locale locale) {
+ return LOCAL_STANDARD_FMT.withLocale(locale).print(toFormat.getMillis());
+ }
+
+ private static DateTime parseUTC(DateTimeFormatter formatter, String toParse) {
+ return formatter.parseDateTime(toParse);
+ }
+
+ private static DateTimeFormatter getSubSecondFormat(String sub, String suffix) {
+ StringBuilder pattern = new StringBuilder();
+ pattern.append(BASE_FMT);
+ pattern.append(".");
+ for(int i=0; i<sub.length(); i++) {
+ pattern.append("S");
+ }
+ pattern.append(suffix);
+ return DateTimeFormat.forPattern(pattern.toString()).withZoneUTC();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/361fea93/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java b/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
new file mode 100644
index 0000000..0471d2b
--- /dev/null
+++ b/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
@@ -0,0 +1,147 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.streams.data.data.util;
+
+
+import org.joda.time.DateTime;
+import org.junit.Test;
+
+import static org.apache.streams.data.util.RFC3339Utils.parseUTC;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class RFC3339UtilsTest {
+
+ @Test
+ public void validUTC() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00Z");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(12)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ }
+
+ @Test
+ public void validUTCSubSecond() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00.7Z");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(12)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ assertThat(parsed.millisOfSecond().get(), is(equalTo(700)));
+ }
+
+ @Test
+ public void validUTCSubSecondMultiDigit() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00.7343Z");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(12)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ assertThat(parsed.millisOfSecond().get(), is(equalTo(734)));
+ }
+
+ @Test
+ public void validEST() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00-05:00");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(17)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ }
+
+ @Test
+ public void validESTSubSecond() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00.7-05:00");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(17)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ assertThat(parsed.millisOfSecond().get(), is(equalTo(700)));
+ }
+
+ @Test
+ public void validESTSubSecondMultiDigit() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00.7343-05:00");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(17)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ assertThat(parsed.millisOfSecond().get(), is(equalTo(734)));
+ }
+
+ @Test
+ public void validESTNoSeparator() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00-0500");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(17)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ }
+
+ @Test
+ public void validESTSubSecondNoSeparator() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00.7-0500");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(17)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ assertThat(parsed.millisOfSecond().get(), is(equalTo(700)));
+ }
+
+ @Test
+ public void validESTSubSecondMultiDigitNoSeparator() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00.7343-0500");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(17)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ assertThat(parsed.millisOfSecond().get(), is(equalTo(734)));
+ }
+
+ @Test
+ public void validCET() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00+01:00");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(11)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ }
+
+ @Test
+ public void validCETSubSecond() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00.7+01:00");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(11)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ assertThat(parsed.millisOfSecond().get(), is(equalTo(700)));
+ }
+
+ @Test
+ public void validCETSubSecondMultidigit() {
+ DateTime parsed = parseUTC("2014-12-25T12:00:00.7343+01:00");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(11)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ assertThat(parsed.millisOfSecond().get(), is(equalTo(734)));
+ System.out.println(parsed.getMillis());
+ }
+}
[2/3] git commit: Added unit tests and fixed bugs
Posted by mf...@apache.org.
Added unit tests and fixed bugs
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/41a04f9c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/41a04f9c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/41a04f9c
Branch: refs/heads/springcleaning
Commit: 41a04f9c1e07ab83fe79a84b78e05a638d34ee03
Parents: 361fea9
Author: mfranklin <mf...@apache.org>
Authored: Mon Mar 31 23:24:51 2014 -0400
Committer: mfranklin <mf...@apache.org>
Committed: Mon Mar 31 23:24:51 2014 -0400
----------------------------------------------------------------------
.../apache/streams/data/util/RFC3339Utils.java | 33 +++++++++++++-------
.../data/data/util/RFC3339UtilsTest.java | 29 ++++++++++++++++-
2 files changed, 50 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/41a04f9c/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java b/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
index 9b8339e..daf73a6 100644
--- a/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
+++ b/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
@@ -23,6 +23,7 @@ import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.util.Locale;
+import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -43,14 +44,16 @@ public class RFC3339Utils {
private static final String BASE_FMT = "yyyy-MM-dd'T'HH:mm:ss";
private static final DateTimeFormatter UTC_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "'Z'").withZoneUTC();
+ private static final DateTimeFormatter UTC_SUB_SECOND_FMT = DateTimeFormat.forPattern(BASE_FMT + ".SSS'Z'").withZoneUTC();
private static final DateTimeFormatter LOCAL_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "Z").withZoneUTC();
+ private static final DateTimeFormatter LOCAL_SUB_SECOND_FMT = DateTimeFormat.forPattern(BASE_FMT + ".SSSZ").withZoneUTC();
private RFC3339Utils() {}
public static DateTime parseUTC(String toParse) {
if(MILLIS.matcher(toParse).matches()) {
- return new DateTime(Long.valueOf(toParse));
+ return new DateTime(Long.valueOf(toParse), DateTimeZone.UTC);
}
if(UTC_STANDARD.matcher(toParse).matches()) {
return parseUTC(UTC_STANDARD_FMT, toParse);
@@ -70,11 +73,11 @@ public class RFC3339Utils {
}
public static String format(DateTime toFormat) {
- return UTC_STANDARD_FMT.print(toFormat.getMillis());
+ return UTC_SUB_SECOND_FMT.print(toFormat.getMillis());
}
- public static String format(DateTime toFormat, Locale locale) {
- return LOCAL_STANDARD_FMT.withLocale(locale).print(toFormat.getMillis());
+ public static String format(DateTime toFormat, TimeZone tz) {
+ return LOCAL_SUB_SECOND_FMT.withZone(DateTimeZone.forTimeZone(tz)).print(toFormat.getMillis());
}
private static DateTime parseUTC(DateTimeFormatter formatter, String toParse) {
@@ -82,13 +85,21 @@ public class RFC3339Utils {
}
private static DateTimeFormatter getSubSecondFormat(String sub, String suffix) {
- StringBuilder pattern = new StringBuilder();
- pattern.append(BASE_FMT);
- pattern.append(".");
- for(int i=0; i<sub.length(); i++) {
- pattern.append("S");
+ DateTimeFormatter result;
+ //Since RFC3339 allows for any number of sub-second notations, we need to flexibly support more or less than 3
+ //digits; however, if it is exactly 3, just use the standards.
+ if(sub.length() == 3) {
+ result = suffix.equals("Z") ? LOCAL_SUB_SECOND_FMT : UTC_SUB_SECOND_FMT;
+ } else {
+ StringBuilder pattern = new StringBuilder();
+ pattern.append(BASE_FMT);
+ pattern.append(".");
+ for (int i = 0; i < sub.length(); i++) {
+ pattern.append("S");
+ }
+ pattern.append(suffix);
+ result = DateTimeFormat.forPattern(pattern.toString()).withZoneUTC();
}
- pattern.append(suffix);
- return DateTimeFormat.forPattern(pattern.toString()).withZoneUTC();
+ return result;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/41a04f9c/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java b/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
index 0471d2b..1cf790a 100644
--- a/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
+++ b/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
@@ -19,8 +19,13 @@ package org.apache.streams.data.data.util;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.junit.Test;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import static org.apache.streams.data.util.RFC3339Utils.format;
import static org.apache.streams.data.util.RFC3339Utils.parseUTC;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
@@ -142,6 +147,28 @@ public class RFC3339UtilsTest {
assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
assertThat(parsed.millisOfSecond().get(), is(equalTo(734)));
- System.out.println(parsed.getMillis());
+ }
+
+ @Test
+ public void validLong() {
+ DateTime parsed = parseUTC("1419505200734");
+ assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+ assertThat(parsed.hourOfDay().get(), is(equalTo(11)));
+ assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+ assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+ assertThat(parsed.millisOfSecond().get(), is(equalTo(734)));
+ }
+
+ @Test
+ public void validFormatUTC() {
+ DateTime parsed = new DateTime(1419505200734L);
+ assertThat(format(parsed), is(equalTo("2014-12-25T11:00:00.734Z")));
+ }
+
+ @Test
+ public void validFormat() {
+ TimeZone cet = TimeZone.getTimeZone("CET");
+ DateTime parsed = new DateTime(1419505200734L);
+ assertThat(format(parsed, cet), is(equalTo("2014-12-25T12:00:00.734+0100")));
}
}
[3/3] git commit: Updated serialization utilities
Posted by mf...@apache.org.
Updated serialization utilities
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/574e1033
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/574e1033
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/574e1033
Branch: refs/heads/springcleaning
Commit: 574e10338c1adde054c411cb12d5efd55eaaf1cb
Parents: 41a04f9
Author: mfranklin <mf...@apache.org>
Authored: Mon Mar 31 23:30:48 2014 -0400
Committer: mfranklin <mf...@apache.org>
Committed: Mon Mar 31 23:30:48 2014 -0400
----------------------------------------------------------------------
.../apache/streams/data/util/RFC3339Utils.java | 9 ++++----
.../jackson/StreamsDateTimeDeserializer.java | 23 ++------------------
.../jackson/StreamsDateTimeSerializer.java | 5 ++---
.../streams/jackson/StreamsJacksonMapper.java | 2 --
.../data/data/util/DateTimeSerDeTest.java | 2 +-
5 files changed, 9 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/574e1033/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java b/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
index daf73a6..7af16c4 100644
--- a/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
+++ b/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
@@ -22,7 +22,6 @@ import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
-import java.util.Locale;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -43,10 +42,10 @@ public class RFC3339Utils {
private static final Pattern LOCAL_SUB_SECOND = Pattern.compile(BASE + SUB_SECOND + TZ);
private static final String BASE_FMT = "yyyy-MM-dd'T'HH:mm:ss";
- private static final DateTimeFormatter UTC_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "'Z'").withZoneUTC();
- private static final DateTimeFormatter UTC_SUB_SECOND_FMT = DateTimeFormat.forPattern(BASE_FMT + ".SSS'Z'").withZoneUTC();
- private static final DateTimeFormatter LOCAL_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "Z").withZoneUTC();
- private static final DateTimeFormatter LOCAL_SUB_SECOND_FMT = DateTimeFormat.forPattern(BASE_FMT + ".SSSZ").withZoneUTC();
+ public static final DateTimeFormatter UTC_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "'Z'").withZoneUTC();
+ public static final DateTimeFormatter UTC_SUB_SECOND_FMT = DateTimeFormat.forPattern(BASE_FMT + ".SSS'Z'").withZoneUTC();
+ public static final DateTimeFormatter LOCAL_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "Z").withZoneUTC();
+ public static final DateTimeFormatter LOCAL_SUB_SECOND_FMT = DateTimeFormat.forPattern(BASE_FMT + ".SSSZ").withZoneUTC();
private RFC3339Utils() {}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/574e1033/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java
index 34459fd..8d56c53 100644
--- a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java
+++ b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeDeserializer.java
@@ -3,11 +3,10 @@ package org.apache.streams.jackson;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import org.apache.streams.data.util.RFC3339Utils;
import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
import java.io.IOException;
-import java.util.regex.Pattern;
/**
* Created by sblackmon on 3/27/14.
@@ -20,24 +19,6 @@ public class StreamsDateTimeDeserializer extends StdDeserializer<DateTime> {
@Override
public DateTime deserialize(JsonParser jpar, DeserializationContext context) throws IOException {
- DateTime result = null;
-
- if( jpar.getCurrentToken().isNumeric() ) {
- Long numberValue = jpar.getValueAsLong();
- if (numberValue != 0L) {
- result = new DateTime(numberValue);
- }
- }
- else {
- String nodeValue = jpar.getValueAsString();
- if (nodeValue != null) {
- result = StreamsJacksonMapper.ACTIVITY_FORMAT.parseDateTime(nodeValue);
- }
- }
-
- if( result == null )
- throw new IOException(" could not deserialize " + jpar.toString());
-
- return result;
+ return RFC3339Utils.parseUTC(jpar.getValueAsString());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/574e1033/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java
index 08a3caf..4677fce 100644
--- a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java
+++ b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsDateTimeSerializer.java
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+import org.apache.streams.data.util.RFC3339Utils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
@@ -22,8 +23,6 @@ public class StreamsDateTimeSerializer extends StdSerializer<DateTime> {
@Override
public void serialize(DateTime value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
- long timestamp = value.getMillis();
- String result = StreamsJacksonMapper.ACTIVITY_FORMAT.print(timestamp);
- jgen.writeString(result);
+ jgen.writeString(RFC3339Utils.format(value));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/574e1033/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
index 4b0c2d5..275ed7e 100644
--- a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
+++ b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
@@ -21,8 +21,6 @@ import java.io.IOException;
*/
public class StreamsJacksonMapper extends ObjectMapper {
- public static final DateTimeFormatter ACTIVITY_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
-
private static final StreamsJacksonMapper INSTANCE = new StreamsJacksonMapper();
public static StreamsJacksonMapper getInstance(){
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/574e1033/streams-pojo/src/test/java/org/apache/streams/data/data/util/DateTimeSerDeTest.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/test/java/org/apache/streams/data/data/util/DateTimeSerDeTest.java b/streams-pojo/src/test/java/org/apache/streams/data/data/util/DateTimeSerDeTest.java
index 217abd4..fe1a6b6 100644
--- a/streams-pojo/src/test/java/org/apache/streams/data/data/util/DateTimeSerDeTest.java
+++ b/streams-pojo/src/test/java/org/apache/streams/data/data/util/DateTimeSerDeTest.java
@@ -48,7 +48,7 @@ public class DateTimeSerDeTest {
@Test
public void testActivityStringDeser() {
String output = "2012-01-17T21:21:46.000Z";
- long inputMillis = 1326856906000l;
+ long inputMillis = 1326835306000L;
DateTime input;
try {
input = new DateTime(inputMillis);