From c09c29bf8d8d785c8695bdee1945670f710e0b75 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Sun, 6 Apr 2025 23:25:48 +0200 Subject: [PATCH] [FEAT] add jakarta some methode to parse the date more flexible --- .../converter/Jakarta/DateParamConverter.java | 51 +++++++++++++++++++ .../Jakarta/OffsetDateTimeParamConverter.java | 50 ++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 src/org/kar/archidata/converter/Jakarta/DateParamConverter.java create mode 100644 src/org/kar/archidata/converter/Jakarta/OffsetDateTimeParamConverter.java diff --git a/src/org/kar/archidata/converter/Jakarta/DateParamConverter.java b/src/org/kar/archidata/converter/Jakarta/DateParamConverter.java new file mode 100644 index 0000000..a742846 --- /dev/null +++ b/src/org/kar/archidata/converter/Jakarta/DateParamConverter.java @@ -0,0 +1,51 @@ +package org.kar.archidata.converter.Jakarta; + +import java.io.IOException; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.time.OffsetDateTime; +import java.util.Date; + +import org.kar.archidata.tools.DateTools; + +import jakarta.ws.rs.ext.ParamConverter; +import jakarta.ws.rs.ext.ParamConverterProvider; +import jakarta.ws.rs.ext.Provider; + +@Provider +public class DateParamConverter implements ParamConverterProvider { + + @SuppressWarnings("unchecked") + @Override + public ParamConverter getConverter( + final Class rawType, + final Type genericType, + final Annotation[] annotations) { + if (rawType != OffsetDateTime.class) { + return null; + } + return (ParamConverter) new ParamConverter() { + @Override + public Date fromString(final String value) { + if (value == null || value.isEmpty()) { + return null; + } + System.out.println(value); + try { + return DateTools.parseDate(value); + } catch (final IOException e) { + throw new IllegalArgumentException("Invalid date format. Please use ISO8601", e); + } + } + + @Override + public String toString(final Date value) { + if (value == null) { + return null; + } + return DateTools.serializeMilliWithUTCTimeZone(value); + } + + }; + } +} diff --git a/src/org/kar/archidata/converter/Jakarta/OffsetDateTimeParamConverter.java b/src/org/kar/archidata/converter/Jakarta/OffsetDateTimeParamConverter.java new file mode 100644 index 0000000..7dcf719 --- /dev/null +++ b/src/org/kar/archidata/converter/Jakarta/OffsetDateTimeParamConverter.java @@ -0,0 +1,50 @@ +package org.kar.archidata.converter.Jakarta; + +import java.io.IOException; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.time.OffsetDateTime; + +import org.kar.archidata.tools.DateTools; + +import jakarta.ws.rs.ext.ParamConverter; +import jakarta.ws.rs.ext.ParamConverterProvider; +import jakarta.ws.rs.ext.Provider; + +@Provider +public class OffsetDateTimeParamConverter implements ParamConverterProvider { + + @SuppressWarnings("unchecked") + @Override + public ParamConverter getConverter( + final Class rawType, + final Type genericType, + final Annotation[] annotations) { + if (rawType != OffsetDateTime.class) { + return null; + } + return (ParamConverter) new ParamConverter() { + @Override + public OffsetDateTime fromString(final String value) { + if (value == null || value.isEmpty()) { + return null; + } + System.out.println(value); + try { + return DateTools.parseOffsetDateTime(value); + } catch (final IOException e) { + throw new IllegalArgumentException("Invalid date format. Please use ISO8601", e); + } + } + + @Override + public String toString(final OffsetDateTime value) { + if (value == null) { + return null; + } + return DateTools.serializeMilliWithUTCTimeZone(value); + } + + }; + } +}