From 58590976d54d8b69eaaeab9caec12b7297469a9e Mon Sep 17 00:00:00 2001 From: Shalnark <65479699+Shounaks@users.noreply.github.com> Date: Sun, 25 Feb 2024 13:14:37 +0530 Subject: [PATCH 1/2] Initial Commit for Java.util.Date Extension Support + LocalDateTime Unit Test. --- .../javatime/date/DateValueReader.java | 25 +++++++++ .../javatime/date/DateValueWriter.java | 21 ++++++++ .../date/JacksonJrJavaDateExtension.java | 20 +++++++ .../date/JavaDateReaderWriterProvider.java | 24 +++++++++ .../JacksonJrJavaTimeExtension.java | 4 +- .../JavaTimeReaderWriterProvider.java | 4 +- .../LocalDateTimeValueReader.java | 2 +- .../LocalDateTimeValueWriter.java | 2 +- .../JacksonJrJavaTimeExtensionTest.java | 52 +++++++++++++++++++ 9 files changed, 148 insertions(+), 6 deletions(-) create mode 100644 jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/DateValueReader.java create mode 100644 jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/DateValueWriter.java create mode 100644 jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/JacksonJrJavaDateExtension.java create mode 100644 jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/JavaDateReaderWriterProvider.java rename jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/{ => localdatetime}/JacksonJrJavaTimeExtension.java (81%) rename jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/{ => localdatetime}/JavaTimeReaderWriterProvider.java (92%) rename jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/{ => localdatetime}/LocalDateTimeValueReader.java (90%) rename jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/{ => localdatetime}/LocalDateTimeValueWriter.java (92%) create mode 100644 jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtensionTest.java diff --git a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/DateValueReader.java b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/DateValueReader.java new file mode 100644 index 00000000..a6c30e85 --- /dev/null +++ b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/DateValueReader.java @@ -0,0 +1,25 @@ +package com.fasterxml.jackson.jr.extension.javatime.date; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.jr.ob.api.ValueReader; +import com.fasterxml.jackson.jr.ob.impl.JSONReader; + +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateValueReader extends ValueReader { + protected DateValueReader() { + super(Date.class); + } + + @Override + public Object read(JSONReader reader, JsonParser p) throws IOException { + try { + return new SimpleDateFormat().parse(p.getText()); + } catch (ParseException e) { + throw new IOException(e); + } + } +} diff --git a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/DateValueWriter.java b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/DateValueWriter.java new file mode 100644 index 00000000..1a275159 --- /dev/null +++ b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/DateValueWriter.java @@ -0,0 +1,21 @@ +package com.fasterxml.jackson.jr.extension.javatime.date; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.jr.ob.api.ValueWriter; +import com.fasterxml.jackson.jr.ob.impl.JSONWriter; + +import java.io.IOException; +import java.util.Date; + +public class DateValueWriter implements ValueWriter { + @Override + public void writeValue(JSONWriter context, JsonGenerator g, Object value) throws IOException { + String date = value.toString(); + context.writeValue(date); + } + + @Override + public Class valueType() { + return Date.class; + } +} diff --git a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/JacksonJrJavaDateExtension.java b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/JacksonJrJavaDateExtension.java new file mode 100644 index 00000000..df4aa7cc --- /dev/null +++ b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/JacksonJrJavaDateExtension.java @@ -0,0 +1,20 @@ +package com.fasterxml.jackson.jr.extension.javatime.date; + +import com.fasterxml.jackson.jr.ob.JacksonJrExtension; +import com.fasterxml.jackson.jr.ob.api.ExtensionContext; + +public class JacksonJrJavaDateExtension extends JacksonJrExtension { + static final JavaDateReaderWriterProvider DEFAULT_RW_PROVIDER = new JavaDateReaderWriterProvider(); + + private JavaDateReaderWriterProvider readerWriterProvider = DEFAULT_RW_PROVIDER; + + @Override + protected void register(ExtensionContext ctxt) { + ctxt.insertProvider(readerWriterProvider); + } + + public JacksonJrJavaDateExtension with(JavaDateReaderWriterProvider p) { + readerWriterProvider = p; + return this; + } +} diff --git a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/JavaDateReaderWriterProvider.java b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/JavaDateReaderWriterProvider.java new file mode 100644 index 00000000..8c2240b7 --- /dev/null +++ b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/date/JavaDateReaderWriterProvider.java @@ -0,0 +1,24 @@ +package com.fasterxml.jackson.jr.extension.javatime.date; + +import com.fasterxml.jackson.jr.ob.api.ReaderWriterProvider; +import com.fasterxml.jackson.jr.ob.api.ValueReader; +import com.fasterxml.jackson.jr.ob.api.ValueWriter; +import com.fasterxml.jackson.jr.ob.impl.JSONReader; +import com.fasterxml.jackson.jr.ob.impl.JSONWriter; + +import java.util.Date; + +public class JavaDateReaderWriterProvider extends ReaderWriterProvider { + public JavaDateReaderWriterProvider() { + } + + @Override + public ValueReader findValueReader(JSONReader readContext, Class type) { + return Date.class.isAssignableFrom(type) ? new DateValueReader() : null; + } + + @Override + public ValueWriter findValueWriter(JSONWriter writeContext, Class type) { + return Date.class.isAssignableFrom(type) ? new DateValueWriter() : null; + } +} diff --git a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtension.java b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/JacksonJrJavaTimeExtension.java similarity index 81% rename from jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtension.java rename to jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/JacksonJrJavaTimeExtension.java index a1077d78..c301fae6 100644 --- a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtension.java +++ b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/JacksonJrJavaTimeExtension.java @@ -1,10 +1,10 @@ -package com.fasterxml.jackson.jr.extension.javatime; +package com.fasterxml.jackson.jr.extension.javatime.localdatetime; import com.fasterxml.jackson.jr.ob.JacksonJrExtension; import com.fasterxml.jackson.jr.ob.api.ExtensionContext; public class JacksonJrJavaTimeExtension extends JacksonJrExtension { - final static JavaTimeReaderWriterProvider DEFAULT_RW_PROVIDER = new JavaTimeReaderWriterProvider(); + static final JavaTimeReaderWriterProvider DEFAULT_RW_PROVIDER = new JavaTimeReaderWriterProvider(); private JavaTimeReaderWriterProvider readerWriterProvider = DEFAULT_RW_PROVIDER; diff --git a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/JavaTimeReaderWriterProvider.java b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/JavaTimeReaderWriterProvider.java similarity index 92% rename from jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/JavaTimeReaderWriterProvider.java rename to jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/JavaTimeReaderWriterProvider.java index bf204791..42ef69d8 100644 --- a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/JavaTimeReaderWriterProvider.java +++ b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/JavaTimeReaderWriterProvider.java @@ -1,4 +1,4 @@ -package com.fasterxml.jackson.jr.extension.javatime; +package com.fasterxml.jackson.jr.extension.javatime.localdatetime; import com.fasterxml.jackson.jr.ob.api.ReaderWriterProvider; import com.fasterxml.jackson.jr.ob.api.ValueReader; @@ -37,7 +37,7 @@ public ValueWriter findValueWriter(JSONWriter writeContext, Class type) { * * * - * @param formatter + * @param formatter {@link DateTimeFormatter} instance * * @return This provider instance for call chaining */ diff --git a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/LocalDateTimeValueReader.java b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/LocalDateTimeValueReader.java similarity index 90% rename from jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/LocalDateTimeValueReader.java rename to jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/LocalDateTimeValueReader.java index cc133327..419afb4f 100644 --- a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/LocalDateTimeValueReader.java +++ b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/LocalDateTimeValueReader.java @@ -1,4 +1,4 @@ -package com.fasterxml.jackson.jr.extension.javatime; +package com.fasterxml.jackson.jr.extension.javatime.localdatetime; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.jr.ob.api.ValueReader; diff --git a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/LocalDateTimeValueWriter.java b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/LocalDateTimeValueWriter.java similarity index 92% rename from jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/LocalDateTimeValueWriter.java rename to jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/LocalDateTimeValueWriter.java index 020963f6..882db146 100644 --- a/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/LocalDateTimeValueWriter.java +++ b/jr-extension-javatime/src/main/java/com/fasterxml/jackson/jr/extension/javatime/localdatetime/LocalDateTimeValueWriter.java @@ -1,4 +1,4 @@ -package com.fasterxml.jackson.jr.extension.javatime; +package com.fasterxml.jackson.jr.extension.javatime.localdatetime; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.jr.ob.api.ValueWriter; diff --git a/jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtensionTest.java b/jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtensionTest.java new file mode 100644 index 00000000..43167ff0 --- /dev/null +++ b/jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtensionTest.java @@ -0,0 +1,52 @@ +package com.fasterxml.jackson.jr.extension.javatime; + +import com.fasterxml.jackson.jr.extension.javatime.localdatetime.JacksonJrJavaTimeExtension; +import com.fasterxml.jackson.jr.extension.javatime.date.JacksonJrJavaDateExtension; +import com.fasterxml.jackson.jr.ob.JSON; +import junit.framework.TestCase; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.util.Date; + +public class JacksonJrJavaTimeExtensionTest extends TestCase { + + public void testLocalDateTimeTest() throws Exception { + //Register the extension + JSON json = JSON.builder().register(new JacksonJrJavaTimeExtension()).build(); + + //Test + LocalDateTime sampleDateTime = LocalDateTime.of(2024, 2, 25, 2, 32); + String expectedOutput = "{\"aVariable\":\"A_VARIABLE_TEST\",\"dateTime\":\"2024-02-25T02:32:00\"}"; + String aVariableTest = json.asString(new LocalDateTimeClass(sampleDateTime, "A_VARIABLE_TEST")); + assertEquals(aVariableTest, expectedOutput); + } + + public void testDateTest() throws Exception { + //Register the extension + JSON json = JSON.builder().register(new JacksonJrJavaDateExtension()).build(); + Date date = Date.from(Instant.now()); + String expectedOutput = "{\"aVariable\":\"A_VARIABLE_TEST\",\"date\":\""+ date +"\"}"; + String aVariableTest = json.asString(new DateClass(date, "A_VARIABLE_TEST")); + assertEquals(aVariableTest, expectedOutput); + } +} + +class DateClass { + public Date date; + public String aVariable; + + public DateClass(Date date, String aVariable) { + this.date = date; + this.aVariable = aVariable; + } +} + +class LocalDateTimeClass { + public LocalDateTime dateTime; + public String aVariable; + public LocalDateTimeClass(LocalDateTime dateTime, String aVariable) { + this.dateTime = dateTime; + this.aVariable = aVariable; + } +} \ No newline at end of file From 2fd907fc761dd105d5a24a1614bc6d67619159a3 Mon Sep 17 00:00:00 2001 From: Shalnark <65479699+Shounaks@users.noreply.github.com> Date: Sun, 25 Feb 2024 13:19:13 +0530 Subject: [PATCH 2/2] Renaming Test Class Name. --- ...aTimeExtensionTest.java => JacksonJrJavaExtensionsTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/{JacksonJrJavaTimeExtensionTest.java => JacksonJrJavaExtensionsTest.java} (96%) diff --git a/jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtensionTest.java b/jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaExtensionsTest.java similarity index 96% rename from jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtensionTest.java rename to jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaExtensionsTest.java index 43167ff0..487bd6f3 100644 --- a/jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaTimeExtensionTest.java +++ b/jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaExtensionsTest.java @@ -9,7 +9,7 @@ import java.time.LocalDateTime; import java.util.Date; -public class JacksonJrJavaTimeExtensionTest extends TestCase { +public class JacksonJrJavaExtensionsTest extends TestCase { public void testLocalDateTimeTest() throws Exception { //Register the extension