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); + } + + }; + } +}