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/JacksonJrJavaExtensionsTest.java b/jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaExtensionsTest.java new file mode 100644 index 00000000..487bd6f3 --- /dev/null +++ b/jr-extension-javatime/src/test/java/com/fasterxml/jackson/jr/extension/javatime/JacksonJrJavaExtensionsTest.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 JacksonJrJavaExtensionsTest 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