Repository: incubator-streams Updated Branches: refs/heads/STREAMS-143 [created] 754bae1b7
adds arbitrary Joda format support to StreamsJacksonMapper Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/754bae1b Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/754bae1b Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/754bae1b Branch: refs/heads/STREAMS-143 Commit: 754bae1b7389cfbe47fc14effab2e1865702d1b0 Parents: 9aebd0b Author: sblackmon <[email protected]> Authored: Thu Nov 6 13:58:11 2014 -0800 Committer: sblackmon <[email protected]> Committed: Thu Nov 6 13:58:11 2014 -0800 ---------------------------------------------------------------------- .../jackson/StreamsDateTimeDeserializer.java | 23 +++++++++++++++++++- .../streams/jackson/StreamsJacksonMapper.java | 20 +++++++++++++++++ .../streams/jackson/StreamsJacksonModule.java | 9 ++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/754bae1b/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 e0b98b2..8f53954 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 @@ -21,23 +21,44 @@ 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 com.google.common.collect.Lists; import org.apache.streams.data.util.RFC3339Utils; import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; import java.io.IOException; import java.io.Serializable; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; /** * Created by sblackmon on 3/27/14. */ public class StreamsDateTimeDeserializer extends StdDeserializer<DateTime> implements Serializable { + List<DateTimeFormatter> formatters = Lists.newArrayList(); + protected StreamsDateTimeDeserializer(Class<DateTime> dateTimeClass) { super(dateTimeClass); } + protected StreamsDateTimeDeserializer(Class<DateTime> dateTimeClass, List<String> formats) { + super(dateTimeClass); + for( String format : formats ) + formatters.add(DateTimeFormat.forPattern(format)); + } + @Override public DateTime deserialize(JsonParser jpar, DeserializationContext context) throws IOException { - return RFC3339Utils.getInstance().parseToUTC(jpar.getValueAsString()); + + DateTime result = RFC3339Utils.parseToUTC(jpar.getValueAsString()); + Iterator<DateTimeFormatter> iterator = formatters.iterator(); + while( result == null && iterator.hasNext()) { + DateTimeFormatter formatter = iterator.next(); + result = formatter.parseDateTime(jpar.getValueAsString()); + } + return result; } } http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/754bae1b/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 25c0c89..8a74caa 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 @@ -25,6 +25,8 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import java.util.List; + /** * Created by sblackmon on 3/27/14. */ @@ -36,9 +38,27 @@ public class StreamsJacksonMapper extends ObjectMapper { return INSTANCE; } + public static StreamsJacksonMapper getInstance(List<String> formats){ + + StreamsJacksonMapper instance = new StreamsJacksonMapper(formats); + + return instance; + + } + public StreamsJacksonMapper() { super(); registerModule(new StreamsJacksonModule()); + configure(); + } + + public StreamsJacksonMapper(List<String> formats) { + super(); + registerModule(new StreamsJacksonModule(formats)); + configure(); + } + + public void configure() { disable(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE); configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, Boolean.TRUE); http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/754bae1b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonModule.java ---------------------------------------------------------------------- diff --git a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonModule.java b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonModule.java index 2869414..8b44b0f 100644 --- a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonModule.java +++ b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonModule.java @@ -22,6 +22,8 @@ import com.fasterxml.jackson.databind.module.SimpleModule; import org.joda.time.DateTime; import org.joda.time.Period; +import java.util.List; + /** * Created by sblackmon on 3/27/14. */ @@ -36,5 +38,12 @@ public class StreamsJacksonModule extends SimpleModule { addDeserializer(Period.class, new StreamsPeriodDeserializer(Period.class)); } + public StreamsJacksonModule(List<String> formats) { + super(); + addSerializer(DateTime.class, new StreamsDateTimeSerializer(DateTime.class)); + addDeserializer(DateTime.class, new StreamsDateTimeDeserializer(DateTime.class, formats)); + addSerializer(Period.class, new StreamsPeriodSerializer(Period.class)); + addDeserializer(Period.class, new StreamsPeriodDeserializer(Period.class)); + } }
