From 42c5f2af49751539951490317b24d3dd9d89a0c4 Mon Sep 17 00:00:00 2001 From: Nikolaos Vastardis Date: Thu, 14 Nov 2024 13:49:44 +0000 Subject: [PATCH 1/9] Moving to time instants --- .../secom/core/base/CsvStringGenerator.java | 8 +++--- .../core/base/EnvelopeSignatureBearer.java | 4 +-- ...rializer.java => InstantDeSerializer.java} | 12 +++++---- ...Serializer.java => InstantSerializer.java} | 14 +++++----- .../ContainerTypeConverterProvider.java | 2 +- ...der.java => InstantConverterProvider.java} | 26 ++++++++----------- .../core/interfaces/GetSecomInterface.java | 6 ++--- .../interfaces/GetSummarySecomInterface.java | 6 ++--- .../secom/core/models/AbstractEnvelope.java | 16 ++++++------ .../secom/core/models/EnvelopeAckObject.java | 16 ++++++------ .../models/EnvelopeKeyNotificationObject.java | 16 ++++++------ .../secom/core/models/EnvelopeLinkObject.java | 16 ++++++------ .../secom/core/models/PingResponseObject.java | 17 ++++++------ .../secom/core/models/SearchObjectResult.java | 26 +++++++++---------- .../models/SubscriptionRequestObject.java | 26 +++++++++---------- .../grad/secom/core/models/SummaryObject.java | 16 ++++++------ .../models/AcknowledgementObjectTest.java | 6 ++--- .../EncryptionKeyNotificationObjectTest.java | 4 +-- .../core/models/EncryptionKeyObjectTest.java | 4 +-- .../core/models/EnvelopeAckObjectTest.java | 10 +++---- .../core/models/EnvelopeKeyObjectTest.java | 6 ++--- .../core/models/EnvelopeLinkObjectTest.java | 10 +++---- .../core/models/EnvelopeUploadObjectTest.java | 6 ++--- .../models/GetSummaryResponseObjectTest.java | 4 +-- .../core/models/PingResponseObjectTest.java | 4 +-- .../core/models/ResponseSearchObjectTest.java | 6 ++--- .../core/models/SearchObjectResultTest.java | 6 ++--- .../models/SubscriptionRequestObjectTest.java | 6 ++--- .../secom/core/models/SummaryObjectTest.java | 4 +-- .../core/models/UploadLinkObjectTest.java | 4 +-- .../secom/core/models/UploadObjectTest.java | 4 +-- .../secom/core/base/CsvStringGenerator.java | 8 +++--- .../secom/core/base/DateTimeSerializer.java | 12 ++++----- .../core/base/EnvelopeSignatureBearer.java | 4 +-- ...rializer.java => InstantDeSerializer.java} | 12 +++++---- .../ContainerTypeConverterProvider.java | 2 +- ...der.java => InstantConverterProvider.java} | 26 ++++++++----------- .../core/interfaces/GetSecomInterface.java | 6 ++--- .../interfaces/GetSummarySecomInterface.java | 6 ++--- .../secom/core/models/AbstractEnvelope.java | 12 ++++----- .../secom/core/models/EnvelopeAckObject.java | 12 ++++----- .../models/EnvelopeKeyNotificationObject.java | 12 ++++----- .../secom/core/models/EnvelopeLinkObject.java | 12 ++++----- .../secom/core/models/PingResponseObject.java | 13 +++++----- .../secom/core/models/SearchObjectResult.java | 20 +++++++------- .../models/SubscriptionRequestObject.java | 20 +++++++------- .../grad/secom/core/models/SummaryObject.java | 12 ++++----- .../models/AcknowledgementObjectTest.java | 6 ++--- .../EncryptionKeyNotificationObjectTest.java | 4 +-- .../core/models/EncryptionKeyObjectTest.java | 4 +-- .../core/models/EnvelopeAckObjectTest.java | 10 +++---- .../core/models/EnvelopeKeyObjectTest.java | 6 ++--- .../core/models/EnvelopeLinkObjectTest.java | 10 +++---- .../core/models/EnvelopeUploadObjectTest.java | 7 +++-- .../models/GetSummaryResponseObjectTest.java | 4 +-- .../core/models/PingResponseObjectTest.java | 4 +-- .../core/models/ResponseSearchObjectTest.java | 6 ++--- .../core/models/SearchObjectResultTest.java | 6 ++--- .../models/SubscriptionRequestObjectTest.java | 6 ++--- .../secom/core/models/SummaryObjectTest.java | 4 +-- .../core/models/UploadLinkObjectTest.java | 4 +-- .../secom/core/models/UploadObjectTest.java | 4 +-- .../springboot2/config/JaxrsApplication.java | 4 +-- .../springboot3/config/JaxrsApplication.java | 4 +-- 64 files changed, 293 insertions(+), 300 deletions(-) rename secom-core-jakarta/src/main/java/org/grad/secom/core/base/{DateTimeDeSerializer.java => InstantDeSerializer.java} (86%) rename secom-core-jakarta/src/main/java/org/grad/secom/core/base/{DateTimeSerializer.java => InstantSerializer.java} (81%) rename secom-core-jakarta/src/main/java/org/grad/secom/core/components/{LocalDateTimeConverterProvider.java => InstantConverterProvider.java} (77%) rename secom-core/src/main/java/org/grad/secom/core/base/{DateTimeDeSerializer.java => InstantDeSerializer.java} (86%) rename secom-core/src/main/java/org/grad/secom/core/components/{LocalDateTimeConverterProvider.java => InstantConverterProvider.java} (77%) diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/CsvStringGenerator.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/CsvStringGenerator.java index edad11da..1c1fb6e2 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/CsvStringGenerator.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/CsvStringGenerator.java @@ -20,7 +20,7 @@ import org.grad.secom.core.models.enums.SECOM_Enum; import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneOffset; import java.util.Arrays; import java.util.Base64; @@ -82,10 +82,10 @@ else if(attribute instanceof CsvStringGenerator) { .map(CsvStringGenerator::getCsvString) .orElse(""); } - else if(attribute instanceof LocalDateTime) { + else if(attribute instanceof Instant) { return Optional.of(attribute) - .map(LocalDateTime.class::cast) - .map(ldt -> ldt.toEpochSecond(ZoneOffset.UTC)) + .map(Instant.class::cast) + .map(Instant::getEpochSecond) .map(String::valueOf) .orElse(""); } else if(attribute instanceof Boolean) { diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/EnvelopeSignatureBearer.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/EnvelopeSignatureBearer.java index 5667e68e..0adc6a2e 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/EnvelopeSignatureBearer.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/EnvelopeSignatureBearer.java @@ -28,7 +28,7 @@ import java.nio.charset.StandardCharsets; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateEncodingException; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.Optional; /** @@ -102,7 +102,7 @@ default EnvelopeSignatureBearer signEnvelope(SecomCertificateProvider certificat try { this.getEnvelope().setEnvelopeSignatureCertificate(SecomPemUtils.getMinifiedPemFromCert(signatureCertificate.getCertificate())); this.getEnvelope().setEnvelopeRootCertificateThumbprint(SecomPemUtils.getCertThumbprint(signatureCertificate.getRootCertificate(), SecomConstants.CERTIFICATE_THUMBPRINT_HASH)); - this.getEnvelope().setEnvelopeSignatureTime(LocalDateTime.now()); + this.getEnvelope().setEnvelopeSignatureTime(Instant.now()); } catch (CertificateEncodingException | NoSuchAlgorithmException exception) { throw new SecomInvalidCertificateException(exception.getMessage()); } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/DateTimeDeSerializer.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java similarity index 86% rename from secom-core-jakarta/src/main/java/org/grad/secom/core/base/DateTimeDeSerializer.java rename to secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java index 74493258..47c26474 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/DateTimeDeSerializer.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java @@ -21,7 +21,9 @@ import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import java.io.IOException; +import java.time.Instant; import java.time.LocalDateTime; +import java.time.ZoneOffset; import java.util.Optional; import static java.util.function.Predicate.not; @@ -37,12 +39,12 @@ * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ -public class DateTimeDeSerializer extends StdDeserializer { +public class InstantDeSerializer extends StdDeserializer { /** * Instantiates a new Byte array de serializer. */ - protected DateTimeDeSerializer() { + protected InstantDeSerializer() { this(null); } @@ -51,7 +53,7 @@ protected DateTimeDeSerializer() { * * @param t the byte array class */ - protected DateTimeDeSerializer(Class t) { + protected InstantDeSerializer(Class t) { super(t); } @@ -64,11 +66,11 @@ protected DateTimeDeSerializer(Class t) { * @throws IOException for any IO exceptions */ @Override - public LocalDateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { + public Instant deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { final String value = jp.getCodec().readValue(jp, String.class); return Optional.ofNullable(value) .filter(not(String::isBlank)) - .map(v -> LocalDateTime.parse(v, SECOM_DATE_TIME_FORMATTER)) + .map(v -> LocalDateTime.parse(v, SECOM_DATE_TIME_FORMATTER).toInstant(ZoneOffset.UTC)) .orElse(null); } } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantSerializer.java similarity index 81% rename from secom-core-jakarta/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java rename to secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantSerializer.java index e52d9030..d957e6ad 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantSerializer.java @@ -21,7 +21,7 @@ import com.fasterxml.jackson.databind.ser.std.StdSerializer; import java.io.IOException; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneId; import java.util.Optional; @@ -37,12 +37,12 @@ * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ -public class DateTimeSerializer extends StdSerializer { +public class InstantSerializer extends StdSerializer { /** * Instantiates a new Byte array serializer. */ - protected DateTimeSerializer() { + protected InstantSerializer() { this(null); } @@ -51,22 +51,22 @@ protected DateTimeSerializer() { * * @param t the byte array class */ - protected DateTimeSerializer(Class t) { + protected InstantSerializer(Class t) { super(t); } /** * Implements the serialization procedure of the serializer. * - * @param localDateTime The input to be serialized + * @param instant The input to be serialized * @param jg The JSON generator * @param serializerProvider The serialization provider * @return the serialized output * @throws IOException for any IO exceptions */ @Override - public void serialize(LocalDateTime localDateTime, JsonGenerator jg, SerializerProvider serializerProvider) throws IOException { - jg.writeString(Optional.ofNullable(localDateTime) + public void serialize( Instant instant, JsonGenerator jg, SerializerProvider serializerProvider) throws IOException { + jg.writeString(Optional.ofNullable(instant) .map(dt -> dt.atZone(ZoneId.systemDefault())) .map(SECOM_DATE_TIME_FORMATTER::format) .orElse("")); diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/components/ContainerTypeConverterProvider.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/components/ContainerTypeConverterProvider.java index ba9fe22b..af000c25 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/components/ContainerTypeConverterProvider.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/components/ContainerTypeConverterProvider.java @@ -26,7 +26,7 @@ import java.lang.reflect.Type; /** - * The LocalDateTime Converter Provider. + * The Instant Converter Provider. * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/components/LocalDateTimeConverterProvider.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java similarity index 77% rename from secom-core-jakarta/src/main/java/org/grad/secom/core/components/LocalDateTimeConverterProvider.java rename to secom-core-jakarta/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java index 84158ecd..fe8a1269 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/components/LocalDateTimeConverterProvider.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java @@ -23,22 +23,20 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; +import java.time.*; import static org.grad.secom.core.base.SecomConstants.SECOM_DATE_TIME_FORMATTER; /** - * The LocalDateTime Converter Provider. + * The Instant Converter Provider. * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ @Provider -public class LocalDateTimeConverterProvider implements ParamConverterProvider { +public class InstantConverterProvider implements ParamConverterProvider { // Class Variables - private final LocalDateTimeConverter converter = new LocalDateTimeConverter(); + private final InstantConverter converter = new InstantConverter(); /** * Implement the converter provision function. @@ -51,16 +49,16 @@ public class LocalDateTimeConverterProvider implements ParamConverterProvider { */ @Override public ParamConverter getConverter(Class aClass, Type type, Annotation[] annotations) { - if (!aClass.equals(LocalDateTime.class)) return null; + if (!aClass.equals(Instant.class)) return null; return (ParamConverter) converter; } /** - * The LocalDateTime Converter Class. + * The Instant Converter Class. * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ - public class LocalDateTimeConverter implements ParamConverter { + public static class InstantConverter implements ParamConverter { /** * Implement the fromString operation. @@ -68,14 +66,13 @@ public class LocalDateTimeConverter implements ParamConverter { * @param value the string value to be converted into an object * @return the converted object */ - public LocalDateTime fromString(String value) { + public Instant fromString(String value) { if (value == null || value.isEmpty()) return null; try { - return LocalDateTime.parse(value, SECOM_DATE_TIME_FORMATTER); + return LocalDateTime.parse(value, SECOM_DATE_TIME_FORMATTER).toInstant(ZoneOffset.UTC); } catch (Exception ex) { // Direct to BAD_REQUEST throw new SecomValidationException(ex.getMessage()); } - } /** @@ -84,11 +81,10 @@ public LocalDateTime fromString(String value) { * @param value the object to be converted into a string * @return the converted string */ - public String toString(LocalDateTime value) { + public String toString(Instant value) { if (value == null) return ""; try { - final ZonedDateTime zonedValue = value.atZone(ZoneId.systemDefault()); - return SECOM_DATE_TIME_FORMATTER.format(zonedValue); + return SECOM_DATE_TIME_FORMATTER.format(value); } catch (Exception ex) { // Direct to BAD_REQUEST throw new SecomValidationException(ex.getMessage()); } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java index d791c3c9..53d2eee4 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java @@ -33,7 +33,7 @@ import jakarta.validation.constraints.Pattern; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -78,8 +78,8 @@ GetResponseObject get(@QueryParam("dataReference") UUID dataReference, @QueryParam("productVersion") String productVersion, @QueryParam("geometry") String geometry, @QueryParam("unlocode") @Pattern(regexp = "[A-Z]{5}") String unlocode, - @QueryParam("validFrom") LocalDateTime validFrom, - @QueryParam("validTo") LocalDateTime validTo, + @QueryParam("validFrom") Instant validFrom, + @QueryParam("validTo") Instant validTo, @QueryParam("page") @Min(0) Integer page, @QueryParam("pageSize") @Min(0) Integer pageSize); diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java index 32a3582e..d701aecf 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java @@ -33,7 +33,7 @@ import jakarta.validation.constraints.Pattern; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; -import java.time.LocalDateTime; +import java.time.Instant; /** * The SECOM Get Summary Interface Definition. @@ -76,8 +76,8 @@ GetSummaryResponseObject getSummary(@QueryParam("containerType") ContainerTypeEn @QueryParam("productVersion") String productVersion, @QueryParam("geometry") String geometry, @QueryParam("unlocode") @Pattern(regexp = "[A-Z]{5}") String unlocode, - @QueryParam("validFrom") LocalDateTime validFrom, - @QueryParam("validTo") LocalDateTime validTo, + @QueryParam("validFrom") Instant validFrom, + @QueryParam("validTo") Instant validTo, @QueryParam("page") @Min(0) Integer page, @QueryParam("pageSize") @Min(0) Integer pageSize); diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java index 0c84245c..1f8cab08 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java @@ -22,10 +22,10 @@ import org.grad.secom.core.base.CsvStringGenerator; import jakarta.validation.constraints.NotNull; -import org.grad.secom.core.base.DateTimeDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantSerializer; -import java.time.LocalDateTime; +import java.time.Instant; public abstract class AbstractEnvelope implements CsvStringGenerator { @@ -36,9 +36,9 @@ public abstract class AbstractEnvelope implements CsvStringGenerator { protected String envelopeRootCertificateThumbprint; @NotNull @Schema(description = "The envelope signature date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - protected LocalDateTime envelopeSignatureTime; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + protected Instant envelopeSignatureTime; /** * Gets envelope signature certificate. @@ -81,7 +81,7 @@ public void setEnvelopeRootCertificateThumbprint(String envelopeRootCertificateT * * @return the envelope signature time */ - public LocalDateTime getEnvelopeSignatureTime() { + public Instant getEnvelopeSignatureTime() { return envelopeSignatureTime; } @@ -90,7 +90,7 @@ public LocalDateTime getEnvelopeSignatureTime() { * * @param envelopeSignatureTime the envelope signature time */ - public void setEnvelopeSignatureTime(LocalDateTime envelopeSignatureTime) { + public void setEnvelopeSignatureTime( Instant envelopeSignatureTime) { this.envelopeSignatureTime = envelopeSignatureTime; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java index ecb12ad0..557dfcc4 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java @@ -20,13 +20,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.AckTypeEnum; import org.grad.secom.core.models.enums.NackTypeEnum; import jakarta.validation.constraints.NotNull; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -39,9 +39,9 @@ public class EnvelopeAckObject extends AbstractEnvelope { // Class Variables @NotNull @Schema(description = "The creation date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime createdAt; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant createdAt; @NotNull private UUID transactionIdentifier; @NotNull @@ -53,7 +53,7 @@ public class EnvelopeAckObject extends AbstractEnvelope { * * @return the created at */ - public LocalDateTime getCreatedAt() { + public Instant getCreatedAt() { return createdAt; } @@ -62,7 +62,7 @@ public LocalDateTime getCreatedAt() { * * @param createdAt the created at */ - public void setCreatedAt(LocalDateTime createdAt) { + public void setCreatedAt( Instant createdAt) { this.createdAt = createdAt; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java index 89a107e0..fb0c16c0 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java @@ -20,10 +20,10 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; -import org.grad.secom.core.base.DateTimeDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantSerializer; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -42,9 +42,9 @@ public class EnvelopeKeyNotificationObject { private String envelopeSignatureCertificate; @NotNull @Schema(description = "The envelope signature date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime envelopeSignatureTime; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant envelopeSignatureTime; /** * Gets data reference. @@ -105,7 +105,7 @@ public void setEnvelopeSignatureCertificate(String envelopeSignatureCertificate) * * @return the envelope signature time */ - public LocalDateTime getEnvelopeSignatureTime() { + public Instant getEnvelopeSignatureTime() { return envelopeSignatureTime; } @@ -114,7 +114,7 @@ public LocalDateTime getEnvelopeSignatureTime() { * * @param envelopeSignatureTime the envelope signature time */ - public void setEnvelopeSignatureTime(LocalDateTime envelopeSignatureTime) { + public void setEnvelopeSignatureTime( Instant envelopeSignatureTime) { this.envelopeSignatureTime = envelopeSignatureTime; } } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java index cff65402..96911b8b 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java @@ -20,15 +20,15 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.base.GenericExchangeMetadataBearer; import org.grad.secom.core.models.enums.AckRequestEnum; import org.grad.secom.core.models.enums.ContainerTypeEnum; import org.grad.secom.core.models.enums.SECOM_DataProductType; import jakarta.validation.constraints.NotNull; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -56,9 +56,9 @@ public class EnvelopeLinkObject extends AbstractEnvelope implements GenericExcha private Integer size; @NotNull @Schema(description = "The time to live date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime timeToLive; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant timeToLive; /** * Instantiates a new Envelope link object. @@ -198,7 +198,7 @@ public void setSize(Integer size) { * * @return the time to live */ - public LocalDateTime getTimeToLive() { + public Instant getTimeToLive() { return timeToLive; } @@ -207,7 +207,7 @@ public LocalDateTime getTimeToLive() { * * @param timeToLive the time to live */ - public void setTimeToLive(LocalDateTime timeToLive) { + public void setTimeToLive( Instant timeToLive) { this.timeToLive = timeToLive; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java index d0844149..1ace650c 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java @@ -19,11 +19,10 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotNull; -import org.grad.secom.core.base.DateTimeDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantSerializer; -import java.time.LocalDateTime; +import java.time.Instant; /** * The SECOM Ping Response Object Class @@ -34,16 +33,16 @@ public class PingResponseObject { // Class Variables @Schema(description = "The last private interaction date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime lastPrivateInteractionTime; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant lastPrivateInteractionTime; /** * Gets last private interaction time. * * @return the last private interaction time */ - public LocalDateTime getLastPrivateInteractionTime() { + public Instant getLastPrivateInteractionTime() { return lastPrivateInteractionTime; } @@ -52,7 +51,7 @@ public LocalDateTime getLastPrivateInteractionTime() { * * @param lastPrivateInteractionTime the last private interaction time */ - public void setLastPrivateInteractionTime(LocalDateTime lastPrivateInteractionTime) { + public void setLastPrivateInteractionTime( Instant lastPrivateInteractionTime) { this.lastPrivateInteractionTime = lastPrivateInteractionTime; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java index f21ca58e..04abd9bd 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java @@ -19,13 +19,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.SECOM_DataProductType; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.List; /** @@ -60,13 +60,13 @@ public class SearchObjectResult { // Non-standard fields (mentioned but not standardised) @Schema(description = "The publication date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime publishedAt; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant publishedAt; @Schema(description = "The last updated date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime lastUpdatedAt; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant lastUpdatedAt; private String comment; private String mmsi; private String imo; @@ -293,7 +293,7 @@ public void setInstanceAsXml(String instanceAsXml) { * * @return the published at */ - public LocalDateTime getPublishedAt() { + public Instant getPublishedAt() { return publishedAt; } @@ -302,7 +302,7 @@ public LocalDateTime getPublishedAt() { * * @param publishedAt the published at */ - public void setPublishedAt(LocalDateTime publishedAt) { + public void setPublishedAt( Instant publishedAt) { this.publishedAt = publishedAt; } @@ -311,7 +311,7 @@ public void setPublishedAt(LocalDateTime publishedAt) { * * @return the last updated at */ - public LocalDateTime getLastUpdatedAt() { + public Instant getLastUpdatedAt() { return lastUpdatedAt; } @@ -320,7 +320,7 @@ public LocalDateTime getLastUpdatedAt() { * * @param lastUpdatedAt the last updated at */ - public void setLastUpdatedAt(LocalDateTime lastUpdatedAt) { + public void setLastUpdatedAt( Instant lastUpdatedAt) { this.lastUpdatedAt = lastUpdatedAt; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java index 7e7e3022..f85a02ae 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java @@ -19,13 +19,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.ContainerTypeEnum; import org.grad.secom.core.models.enums.SECOM_DataProductType; import jakarta.validation.constraints.Pattern; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -47,13 +47,13 @@ public class SubscriptionRequestObject { @Pattern(regexp = "[A-Z]{5}") private String unlocode; @Schema(description = "The subscription period start", type = "string", example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime subscriptionPeriodStart; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant subscriptionPeriodStart; @Schema(description = "The subscription period end", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime subscriptionPeriodEnd; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant subscriptionPeriodEnd; /** * Gets container type. @@ -168,7 +168,7 @@ public void setUnlocode(String unlocode) { * * @return the subscription period start */ - public LocalDateTime getSubscriptionPeriodStart() { + public Instant getSubscriptionPeriodStart() { return subscriptionPeriodStart; } @@ -177,7 +177,7 @@ public LocalDateTime getSubscriptionPeriodStart() { * * @param subscriptionPeriodStart the subscription period start */ - public void setSubscriptionPeriodStart(LocalDateTime subscriptionPeriodStart) { + public void setSubscriptionPeriodStart( Instant subscriptionPeriodStart) { this.subscriptionPeriodStart = subscriptionPeriodStart; } @@ -186,7 +186,7 @@ public void setSubscriptionPeriodStart(LocalDateTime subscriptionPeriodStart) { * * @return the subscription period end */ - public LocalDateTime getSubscriptionPeriodEnd() { + public Instant getSubscriptionPeriodEnd() { return subscriptionPeriodEnd; } @@ -195,7 +195,7 @@ public LocalDateTime getSubscriptionPeriodEnd() { * * @param subscriptionPeriodEnd the subscription period end */ - public void setSubscriptionPeriodEnd(LocalDateTime subscriptionPeriodEnd) { + public void setSubscriptionPeriodEnd( Instant subscriptionPeriodEnd) { this.subscriptionPeriodEnd = subscriptionPeriodEnd; } } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java index e7405c2a..cc1befaf 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java @@ -20,12 +20,12 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; -import org.grad.secom.core.base.DateTimeDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.ContainerTypeEnum; import org.grad.secom.core.models.enums.SECOM_DataProductType; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -51,9 +51,9 @@ public class SummaryObject { private String info_status; private String info_description; @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime info_lastModifiedDate; + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant info_lastModifiedDate; private String info_productVersion; private Long info_size; @@ -224,7 +224,7 @@ public void setInfo_description(String info_description) { * * @return the info last modified date */ - public LocalDateTime getInfo_lastModifiedDate() { + public Instant getInfo_lastModifiedDate() { return info_lastModifiedDate; } @@ -233,7 +233,7 @@ public LocalDateTime getInfo_lastModifiedDate() { * * @param info_lastModifiedDate the info last modified date */ - public void setInfo_lastModifiedDate(LocalDateTime info_lastModifiedDate) { + public void setInfo_lastModifiedDate( Instant info_lastModifiedDate) { this.info_lastModifiedDate = info_lastModifiedDate; } diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/AcknowledgementObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/AcknowledgementObjectTest.java index e7155e7c..8516696b 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/AcknowledgementObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/AcknowledgementObjectTest.java @@ -23,7 +23,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -55,13 +55,13 @@ void setup() { // Create a new envelope upload object this.envelopeLinkObject = new EnvelopeAckObject(); - this.envelopeLinkObject.setCreatedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeLinkObject.setCreatedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.envelopeLinkObject.setTransactionIdentifier(UUID.randomUUID()); this.envelopeLinkObject.setAckType(AckTypeEnum.DELIVERED_ACK); this.envelopeLinkObject.setNackType(NackTypeEnum.UNKNOWN_DATA_TYPE_OR_VERSION); this.envelopeLinkObject.setEnvelopeSignatureCertificate("envelopeCertificate"); this.envelopeLinkObject.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.envelopeLinkObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeLinkObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new object this.obj = new AcknowledgementObject(); diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EncryptionKeyNotificationObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EncryptionKeyNotificationObjectTest.java index 7b1f7f5d..b203fed8 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EncryptionKeyNotificationObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EncryptionKeyNotificationObjectTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -49,7 +49,7 @@ void setup() { this.envelopeKeyNotificationObject.setDataReference(UUID.randomUUID()); this.envelopeKeyNotificationObject.setEnvelopeSignatureCertificate("signatureCertificate"); this.envelopeKeyNotificationObject.setPublicCertificate("publicCertificate"); - this.envelopeKeyNotificationObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeKeyNotificationObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new object this.obj = new EncryptionKeyNotificationObject(); diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EncryptionKeyObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EncryptionKeyObjectTest.java index f3567ee3..4316cb00 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EncryptionKeyObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EncryptionKeyObjectTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -61,7 +61,7 @@ void setup() { this.envelopeLinkObject.setDigitalSignatureValue(this.digitalSignatureValue); this.envelopeLinkObject.setEnvelopeSignatureCertificate("envelopeCertificate"); this.envelopeLinkObject.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.envelopeLinkObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeLinkObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new upload object this.obj = new EncryptionKeyObject(); diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeAckObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeAckObjectTest.java index 23aec6e1..59b0502a 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeAckObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeAckObjectTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -50,13 +50,13 @@ void setup() { // Generate a new object this.obj = new EnvelopeAckObject(); - this.obj.setCreatedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setCreatedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.obj.setEnvelopeSignatureCertificate("envelopeCertificate"); this.obj.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); this.obj.setTransactionIdentifier(UUID.randomUUID()); this.obj.setAckType(AckTypeEnum.OPENED_ACK); this.obj.setNackType(NackTypeEnum.UNKNOWN_DATA_TYPE_OR_VERSION); - this.obj.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** @@ -89,13 +89,13 @@ void testGetCsvString() { // Match the individual entries of the string String[] csv = signatureCSV.split("\\."); - assertEquals(this.obj.getCreatedAt().toEpochSecond(ZoneOffset.UTC), Long.parseLong(csv[0])); + assertEquals(this.obj.getCreatedAt().getEpochSecond(), Long.parseLong(csv[0])); assertEquals(this.obj.getEnvelopeCertificate(), csv[1]); assertEquals(this.obj.getEnvelopeRootCertificateThumbprint(), csv[2]); assertEquals(this.obj.getTransactionIdentifier().toString(), csv[3]); assertEquals(String.valueOf(this.obj.getAckType().getValue()), csv[4]); assertEquals(String.valueOf(this.obj.getNackType().getValue()), csv[5]); - assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().toEpochSecond(ZoneOffset.UTC)), csv[6]); + assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().getEpochSecond()), csv[6]); } } \ No newline at end of file diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeKeyObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeKeyObjectTest.java index f31ca948..633476f6 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeKeyObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeKeyObjectTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -61,7 +61,7 @@ void setup() { this.obj.setDigitalSignatureValue(this.digitalSignatureValue); this.obj.setEnvelopeSignatureCertificate("envelopeCertificate"); this.obj.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.obj.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** @@ -105,7 +105,7 @@ void testGetCsvString() { assertEquals(obj.getDigitalSignatureValue().getDigitalSignature(), csv[5]); assertEquals(obj.getEnvelopeSignatureCertificate(), csv[6]); assertEquals(obj.getEnvelopeRootCertificateThumbprint(), csv[7]); - assertEquals(obj.getEnvelopeSignatureTime().toEpochSecond(ZoneOffset.UTC), Long.parseLong(csv[8])); + assertEquals(obj.getEnvelopeSignatureTime().getEpochSecond(), Long.parseLong(csv[8])); } } \ No newline at end of file diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeLinkObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeLinkObjectTest.java index 90c9ae07..89a64f41 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeLinkObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeLinkObjectTest.java @@ -26,7 +26,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -76,8 +76,8 @@ void setup() { this.obj.setEnvelopeSignatureCertificate("envelopeCertificate"); this.obj.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); this.obj.setSize(1); - this.obj.setTimeToLive(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); - this.obj.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setTimeToLive(Instant.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** @@ -136,8 +136,8 @@ void testGetCsvString() { assertEquals(this.obj.getEnvelopeSignatureCertificate(), csv[12]); assertEquals(this.obj.getEnvelopeRootCertificateThumbprint(), csv[13]); assertEquals(String.valueOf(this.obj.getSize()), csv[14]); - assertEquals(String.valueOf(this.obj.getTimeToLive().toEpochSecond(ZoneOffset.UTC)), csv[15]); - assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().toEpochSecond(ZoneOffset.UTC)), csv[16]); + assertEquals(String.valueOf(this.obj.getTimeToLive().getEpochSecond()), csv[15]); + assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().getEpochSecond()), csv[16]); } } \ No newline at end of file diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeUploadObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeUploadObjectTest.java index ef191574..9c9c7485 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeUploadObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/EnvelopeUploadObjectTest.java @@ -27,7 +27,7 @@ import org.junit.jupiter.api.Test; import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.Base64; @@ -78,7 +78,7 @@ void setup() { this.obj.setTransactionIdentifier(UUID.randomUUID()); this.obj.setEnvelopeSignatureCertificate("envelopeCertificate"); this.obj.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.obj.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** @@ -135,7 +135,7 @@ void testGetCsvString() { assertEquals(this.obj.getTransactionIdentifier().toString(), csv[12]); assertEquals(this.obj.getEnvelopeSignatureCertificate(), csv[13]); assertEquals(this.obj.getEnvelopeRootCertificateThumbprint(), csv[14]); - assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().toEpochSecond(ZoneOffset.UTC)), csv[15]); + assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().getEpochSecond()), csv[15]); } } \ No newline at end of file diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/GetSummaryResponseObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/GetSummaryResponseObjectTest.java index edfc4c66..c0413650 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/GetSummaryResponseObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/GetSummaryResponseObjectTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; import java.util.UUID; @@ -60,7 +60,7 @@ void setup() { this.summaryObject.setInfo_name("infoName"); this.summaryObject.setInfo_status("infoStatus"); this.summaryObject.setInfo_description("infoDescription"); - this.summaryObject.setInfo_lastModifiedDate(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.summaryObject.setInfo_lastModifiedDate(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.summaryObject.setInfo_productVersion("infoProductVersion"); this.summaryObject.setInfo_size(1L); diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java index c4b3f3b8..81356540 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import static org.junit.jupiter.api.Assertions.*; @@ -44,7 +44,7 @@ void setup() { // Generate a new object this.obj = new PingResponseObject(); - this.obj.setLastPrivateInteractionTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setLastPrivateInteractionTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/ResponseSearchObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/ResponseSearchObjectTest.java index bd6c005b..6428a95a 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/ResponseSearchObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/ResponseSearchObjectTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.Test; import java.net.URISyntaxException; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; @@ -62,8 +62,8 @@ void setup() throws URISyntaxException { this.searchObjectResult.setKeywords("keywords"); this.searchObjectResult.setUnlocode(Collections.singletonList("unlocode")); this.searchObjectResult.setInstanceAsXml("instanceAsXml"); - this.searchObjectResult.setPublishedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); - this.searchObjectResult.setLastUpdatedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.searchObjectResult.setPublishedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); + this.searchObjectResult.setLastUpdatedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.searchObjectResult.setMmsi("mmsi"); this.searchObjectResult.setImo("imo"); this.searchObjectResult.setGeometry("geometry"); diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SearchObjectResultTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SearchObjectResultTest.java index bc4749a6..674683fa 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SearchObjectResultTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SearchObjectResultTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.Test; import java.net.URISyntaxException; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; @@ -61,8 +61,8 @@ void setup() throws URISyntaxException { this.obj.setKeywords("keywords"); this.obj.setUnlocode(Collections.singletonList("unlocode")); this.obj.setInstanceAsXml("instanceAsXml"); - this.obj.setPublishedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); - this.obj.setLastUpdatedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setPublishedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setLastUpdatedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.obj.setMmsi("mmsi"); this.obj.setImo("imo"); this.obj.setGeometry("geometry"); diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SubscriptionRequestObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SubscriptionRequestObjectTest.java index ce87bcaa..04135b5b 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SubscriptionRequestObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SubscriptionRequestObjectTest.java @@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test; import java.net.URISyntaxException; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -56,8 +56,8 @@ void setup() throws URISyntaxException { this.obj.setProductVersion("version"); this.obj.setGeometry("geometry"); this.obj.setUnlocode("unlocode"); - this.obj.setSubscriptionPeriodStart(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); - this.obj.setSubscriptionPeriodEnd(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setSubscriptionPeriodStart(Instant.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setSubscriptionPeriodEnd(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SummaryObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SummaryObjectTest.java index aae4821d..b67c77af 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SummaryObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/SummaryObjectTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -56,7 +56,7 @@ void setup() { this.obj.setInfo_name("infoName"); this.obj.setInfo_status("infoStatus"); this.obj.setInfo_description("infoDescription"); - this.obj.setInfo_lastModifiedDate(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setInfo_lastModifiedDate(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.obj.setInfo_productVersion("infoProductVersion"); this.obj.setInfo_size(1L); } diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/UploadLinkObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/UploadLinkObjectTest.java index 8b31a262..0a1a6c05 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/UploadLinkObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/UploadLinkObjectTest.java @@ -26,7 +26,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -76,7 +76,7 @@ void setup() { this.envelopeLinkObject.setTransactionIdentifier(UUID.randomUUID()); this.envelopeLinkObject.setEnvelopeSignatureCertificate("envelopeCertificate"); this.envelopeLinkObject.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.envelopeLinkObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeLinkObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new object this.obj = new UploadLinkObject(); diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/UploadObjectTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/UploadObjectTest.java index 51a075b4..adaba92b 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/models/UploadObjectTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/models/UploadObjectTest.java @@ -27,7 +27,7 @@ import org.junit.jupiter.api.Test; import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -78,7 +78,7 @@ void setup() { this.envelopeUploadObject.setTransactionIdentifier(UUID.randomUUID()); this.envelopeUploadObject.setEnvelopeSignatureCertificate("envelopeCertificate"); this.envelopeUploadObject.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.envelopeUploadObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeUploadObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new object this.obj = new UploadObject(); diff --git a/secom-core/src/main/java/org/grad/secom/core/base/CsvStringGenerator.java b/secom-core/src/main/java/org/grad/secom/core/base/CsvStringGenerator.java index edad11da..1c1fb6e2 100644 --- a/secom-core/src/main/java/org/grad/secom/core/base/CsvStringGenerator.java +++ b/secom-core/src/main/java/org/grad/secom/core/base/CsvStringGenerator.java @@ -20,7 +20,7 @@ import org.grad.secom.core.models.enums.SECOM_Enum; import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneOffset; import java.util.Arrays; import java.util.Base64; @@ -82,10 +82,10 @@ else if(attribute instanceof CsvStringGenerator) { .map(CsvStringGenerator::getCsvString) .orElse(""); } - else if(attribute instanceof LocalDateTime) { + else if(attribute instanceof Instant) { return Optional.of(attribute) - .map(LocalDateTime.class::cast) - .map(ldt -> ldt.toEpochSecond(ZoneOffset.UTC)) + .map(Instant.class::cast) + .map(Instant::getEpochSecond) .map(String::valueOf) .orElse(""); } else if(attribute instanceof Boolean) { diff --git a/secom-core/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java b/secom-core/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java index e52d9030..554f8ea8 100644 --- a/secom-core/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java +++ b/secom-core/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java @@ -21,7 +21,7 @@ import com.fasterxml.jackson.databind.ser.std.StdSerializer; import java.io.IOException; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneId; import java.util.Optional; @@ -37,7 +37,7 @@ * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ -public class DateTimeSerializer extends StdSerializer { +public class DateTimeSerializer extends StdSerializer { /** * Instantiates a new Byte array serializer. @@ -51,22 +51,22 @@ protected DateTimeSerializer() { * * @param t the byte array class */ - protected DateTimeSerializer(Class t) { + protected DateTimeSerializer(Class t) { super(t); } /** * Implements the serialization procedure of the serializer. * - * @param localDateTime The input to be serialized + * @param instant The input to be serialized * @param jg The JSON generator * @param serializerProvider The serialization provider * @return the serialized output * @throws IOException for any IO exceptions */ @Override - public void serialize(LocalDateTime localDateTime, JsonGenerator jg, SerializerProvider serializerProvider) throws IOException { - jg.writeString(Optional.ofNullable(localDateTime) + public void serialize(Instant instant, JsonGenerator jg, SerializerProvider serializerProvider) throws IOException { + jg.writeString(Optional.ofNullable(instant) .map(dt -> dt.atZone(ZoneId.systemDefault())) .map(SECOM_DATE_TIME_FORMATTER::format) .orElse("")); diff --git a/secom-core/src/main/java/org/grad/secom/core/base/EnvelopeSignatureBearer.java b/secom-core/src/main/java/org/grad/secom/core/base/EnvelopeSignatureBearer.java index 3a00aaa2..eb30e684 100644 --- a/secom-core/src/main/java/org/grad/secom/core/base/EnvelopeSignatureBearer.java +++ b/secom-core/src/main/java/org/grad/secom/core/base/EnvelopeSignatureBearer.java @@ -28,7 +28,7 @@ import java.nio.charset.StandardCharsets; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateEncodingException; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.Optional; /** @@ -102,7 +102,7 @@ default EnvelopeSignatureBearer signEnvelope(SecomCertificateProvider certificat try { this.getEnvelope().setEnvelopeSignatureCertificate(SecomPemUtils.getMinifiedPemFromCert(signatureCertificate.getCertificate())); this.getEnvelope().setEnvelopeRootCertificateThumbprint(SecomPemUtils.getCertThumbprint(signatureCertificate.getRootCertificate(), SecomConstants.CERTIFICATE_THUMBPRINT_HASH)); - this.getEnvelope().setEnvelopeSignatureTime(LocalDateTime.now()); + this.getEnvelope().setEnvelopeSignatureTime(Instant.now()); } catch (CertificateEncodingException | NoSuchAlgorithmException exception) { throw new SecomInvalidCertificateException(exception.getMessage()); } diff --git a/secom-core/src/main/java/org/grad/secom/core/base/DateTimeDeSerializer.java b/secom-core/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java similarity index 86% rename from secom-core/src/main/java/org/grad/secom/core/base/DateTimeDeSerializer.java rename to secom-core/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java index 74493258..47c26474 100644 --- a/secom-core/src/main/java/org/grad/secom/core/base/DateTimeDeSerializer.java +++ b/secom-core/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java @@ -21,7 +21,9 @@ import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import java.io.IOException; +import java.time.Instant; import java.time.LocalDateTime; +import java.time.ZoneOffset; import java.util.Optional; import static java.util.function.Predicate.not; @@ -37,12 +39,12 @@ * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ -public class DateTimeDeSerializer extends StdDeserializer { +public class InstantDeSerializer extends StdDeserializer { /** * Instantiates a new Byte array de serializer. */ - protected DateTimeDeSerializer() { + protected InstantDeSerializer() { this(null); } @@ -51,7 +53,7 @@ protected DateTimeDeSerializer() { * * @param t the byte array class */ - protected DateTimeDeSerializer(Class t) { + protected InstantDeSerializer(Class t) { super(t); } @@ -64,11 +66,11 @@ protected DateTimeDeSerializer(Class t) { * @throws IOException for any IO exceptions */ @Override - public LocalDateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { + public Instant deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { final String value = jp.getCodec().readValue(jp, String.class); return Optional.ofNullable(value) .filter(not(String::isBlank)) - .map(v -> LocalDateTime.parse(v, SECOM_DATE_TIME_FORMATTER)) + .map(v -> LocalDateTime.parse(v, SECOM_DATE_TIME_FORMATTER).toInstant(ZoneOffset.UTC)) .orElse(null); } } diff --git a/secom-core/src/main/java/org/grad/secom/core/components/ContainerTypeConverterProvider.java b/secom-core/src/main/java/org/grad/secom/core/components/ContainerTypeConverterProvider.java index 899304cf..bce0e02a 100644 --- a/secom-core/src/main/java/org/grad/secom/core/components/ContainerTypeConverterProvider.java +++ b/secom-core/src/main/java/org/grad/secom/core/components/ContainerTypeConverterProvider.java @@ -26,7 +26,7 @@ import java.lang.reflect.Type; /** - * The LocalDateTime Converter Provider. + * The ContainerType Converter Provider. * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ diff --git a/secom-core/src/main/java/org/grad/secom/core/components/LocalDateTimeConverterProvider.java b/secom-core/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java similarity index 77% rename from secom-core/src/main/java/org/grad/secom/core/components/LocalDateTimeConverterProvider.java rename to secom-core/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java index 59501ef1..fa929361 100644 --- a/secom-core/src/main/java/org/grad/secom/core/components/LocalDateTimeConverterProvider.java +++ b/secom-core/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java @@ -23,22 +23,20 @@ import javax.ws.rs.ext.Provider; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; +import java.time.*; import static org.grad.secom.core.base.SecomConstants.SECOM_DATE_TIME_FORMATTER; /** - * The LocalDateTime Converter Provider. + * The Instant Converter Provider. * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ @Provider -public class LocalDateTimeConverterProvider implements ParamConverterProvider { +public class InstantConverterProvider implements ParamConverterProvider { // Class Variables - private final LocalDateTimeConverter converter = new LocalDateTimeConverter(); + private final InstantConverter converter = new InstantConverter(); /** * Implement the converter provision function. @@ -51,16 +49,16 @@ public class LocalDateTimeConverterProvider implements ParamConverterProvider { */ @Override public ParamConverter getConverter(Class aClass, Type type, Annotation[] annotations) { - if (!aClass.equals(LocalDateTime.class)) return null; + if (!aClass.equals(Instant.class)) return null; return (ParamConverter) converter; } /** - * The LocalDateTime Converter Class. + * The Instant Converter Class. * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ - public class LocalDateTimeConverter implements ParamConverter { + public static class InstantConverter implements ParamConverter { /** * Implement the fromString operation. @@ -68,14 +66,13 @@ public class LocalDateTimeConverter implements ParamConverter { * @param value the string value to be converted into an object * @return the converted object */ - public LocalDateTime fromString(String value) { + public Instant fromString(String value) { if (value == null || value.isEmpty()) return null; try { - return LocalDateTime.parse(value, SECOM_DATE_TIME_FORMATTER); + return LocalDateTime.parse(value, SECOM_DATE_TIME_FORMATTER).toInstant(ZoneOffset.UTC); } catch (Exception ex) { // Direct to BAD_REQUEST throw new SecomValidationException(ex.getMessage()); } - } /** @@ -84,11 +81,10 @@ public LocalDateTime fromString(String value) { * @param value the object to be converted into a string * @return the converted string */ - public String toString(LocalDateTime value) { + public String toString(Instant value) { if (value == null) return ""; try { - final ZonedDateTime zonedValue = value.atZone(ZoneId.systemDefault()); - return SECOM_DATE_TIME_FORMATTER.format(zonedValue); + return SECOM_DATE_TIME_FORMATTER.format(value); } catch (Exception ex) { // Direct to BAD_REQUEST throw new SecomValidationException(ex.getMessage()); } diff --git a/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java b/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java index 7975926e..8010f873 100644 --- a/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java +++ b/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java @@ -33,7 +33,7 @@ import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -78,8 +78,8 @@ GetResponseObject get(@QueryParam("dataReference") UUID dataReference, @QueryParam("productVersion") String productVersion, @QueryParam("geometry") String geometry, @QueryParam("unlocode") @Pattern(regexp = "[A-Z]{5}") String unlocode, - @QueryParam("validFrom") LocalDateTime validFrom, - @QueryParam("validTo") LocalDateTime validTo, + @QueryParam("validFrom") Instant validFrom, + @QueryParam("validTo") Instant validTo, @QueryParam("page") @Min(0) Integer page, @QueryParam("pageSize") @Min(0) Integer pageSize); diff --git a/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java b/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java index e283b32a..c6e2679a 100644 --- a/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java +++ b/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java @@ -33,7 +33,7 @@ import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.time.LocalDateTime; +import java.time.Instant; /** * The SECOM Get Summary Interface Definition. @@ -76,8 +76,8 @@ GetSummaryResponseObject getSummary(@QueryParam("containerType") ContainerTypeEn @QueryParam("productVersion") String productVersion, @QueryParam("geometry") String geometry, @QueryParam("unlocode") @Pattern(regexp = "[A-Z]{5}") String unlocode, - @QueryParam("validFrom") LocalDateTime validFrom, - @QueryParam("validTo") LocalDateTime validTo, + @QueryParam("validFrom") Instant validFrom, + @QueryParam("validTo") Instant validTo, @QueryParam("page") @Min(0) Integer page, @QueryParam("pageSize") @Min(0) Integer pageSize); diff --git a/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java b/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java index befec048..a0ac9dbd 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java @@ -20,11 +20,11 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; import org.grad.secom.core.base.CsvStringGenerator; -import org.grad.secom.core.base.DateTimeDeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; import org.grad.secom.core.base.DateTimeSerializer; import javax.validation.constraints.NotNull; -import java.time.LocalDateTime; +import java.time.Instant; public abstract class AbstractEnvelope implements CsvStringGenerator { @@ -36,8 +36,8 @@ public abstract class AbstractEnvelope implements CsvStringGenerator { @NotNull @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - protected LocalDateTime envelopeSignatureTime; + @JsonDeserialize(using = InstantDeSerializer.class) + protected Instant envelopeSignatureTime; /** * Gets envelope signature certificate. @@ -80,7 +80,7 @@ public void setEnvelopeRootCertificateThumbprint(String envelopeRootCertificateT * * @return the envelope signature time */ - public LocalDateTime getEnvelopeSignatureTime() { + public Instant getEnvelopeSignatureTime() { return envelopeSignatureTime; } @@ -89,7 +89,7 @@ public LocalDateTime getEnvelopeSignatureTime() { * * @param envelopeSignatureTime the envelope signature time */ - public void setEnvelopeSignatureTime(LocalDateTime envelopeSignatureTime) { + public void setEnvelopeSignatureTime(Instant envelopeSignatureTime) { this.envelopeSignatureTime = envelopeSignatureTime; } diff --git a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java index eb483154..056267e9 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java @@ -20,13 +20,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; import org.grad.secom.core.base.DateTimeSerializer; import org.grad.secom.core.models.enums.AckTypeEnum; import org.grad.secom.core.models.enums.NackTypeEnum; import javax.validation.constraints.NotNull; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -40,8 +40,8 @@ public class EnvelopeAckObject extends AbstractEnvelope { @NotNull @Schema(description = "The creation date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime createdAt; + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant createdAt; @NotNull private UUID transactionIdentifier; @NotNull @@ -53,7 +53,7 @@ public class EnvelopeAckObject extends AbstractEnvelope { * * @return the created at */ - public LocalDateTime getCreatedAt() { + public Instant getCreatedAt() { return createdAt; } @@ -62,7 +62,7 @@ public LocalDateTime getCreatedAt() { * * @param createdAt the created at */ - public void setCreatedAt(LocalDateTime createdAt) { + public void setCreatedAt(Instant createdAt) { this.createdAt = createdAt; } diff --git a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java index 32126b95..37b3e06f 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java @@ -19,11 +19,11 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; import org.grad.secom.core.base.DateTimeSerializer; import javax.validation.constraints.NotNull; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -43,8 +43,8 @@ public class EnvelopeKeyNotificationObject { @NotNull @Schema(description = "The envelope signature date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime envelopeSignatureTime; + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant envelopeSignatureTime; /** * Gets data reference. @@ -105,7 +105,7 @@ public void setEnvelopeSignatureCertificate(String envelopeSignatureCertificate) * * @return the envelope signature time */ - public LocalDateTime getEnvelopeSignatureTime() { + public Instant getEnvelopeSignatureTime() { return envelopeSignatureTime; } @@ -114,7 +114,7 @@ public LocalDateTime getEnvelopeSignatureTime() { * * @param envelopeSignatureTime the envelope signature time */ - public void setEnvelopeSignatureTime(LocalDateTime envelopeSignatureTime) { + public void setEnvelopeSignatureTime(Instant envelopeSignatureTime) { this.envelopeSignatureTime = envelopeSignatureTime; } } diff --git a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java index 2efac998..3016a60f 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java @@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; import org.grad.secom.core.base.DateTimeSerializer; import org.grad.secom.core.base.GenericExchangeMetadataBearer; import org.grad.secom.core.models.enums.AckRequestEnum; @@ -28,7 +28,7 @@ import org.grad.secom.core.models.enums.SECOM_DataProductType; import javax.validation.constraints.NotNull; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -57,8 +57,8 @@ public class EnvelopeLinkObject extends AbstractEnvelope implements GenericExcha @NotNull @Schema(description = "The time to live date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime timeToLive; + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant timeToLive; /** * Instantiates a new Envelope link object. @@ -198,7 +198,7 @@ public void setSize(Integer size) { * * @return the time to live */ - public LocalDateTime getTimeToLive() { + public Instant getTimeToLive() { return timeToLive; } @@ -207,7 +207,7 @@ public LocalDateTime getTimeToLive() { * * @param timeToLive the time to live */ - public void setTimeToLive(LocalDateTime timeToLive) { + public void setTimeToLive(Instant timeToLive) { this.timeToLive = timeToLive; } diff --git a/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java b/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java index ebfe3587..43319fb5 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java @@ -19,11 +19,10 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; import org.grad.secom.core.base.DateTimeSerializer; -import javax.validation.constraints.NotNull; -import java.time.LocalDateTime; +import java.time.Instant; /** * The SECOM Ping Response Object Class @@ -35,15 +34,15 @@ public class PingResponseObject { // Class Variables @Schema(description = "The last private interaction date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime lastPrivateInteractionTime; + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant lastPrivateInteractionTime; /** * Gets last private interaction time. * * @return the last private interaction time */ - public LocalDateTime getLastPrivateInteractionTime() { + public Instant getLastPrivateInteractionTime() { return lastPrivateInteractionTime; } @@ -52,7 +51,7 @@ public LocalDateTime getLastPrivateInteractionTime() { * * @param lastPrivateInteractionTime the last private interaction time */ - public void setLastPrivateInteractionTime(LocalDateTime lastPrivateInteractionTime) { + public void setLastPrivateInteractionTime(Instant lastPrivateInteractionTime) { this.lastPrivateInteractionTime = lastPrivateInteractionTime; } diff --git a/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java b/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java index 8ce535b6..ddf4d560 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java @@ -19,13 +19,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; import org.grad.secom.core.base.DateTimeSerializer; import org.grad.secom.core.models.enums.SECOM_DataProductType; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.List; /** @@ -61,12 +61,12 @@ public class SearchObjectResult { // Non-standard fields (mentioned but not standardised) @Schema(description = "The publication date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime publishedAt; + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant publishedAt; @Schema(description = "The last updated date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime lastUpdatedAt; + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant lastUpdatedAt; private String comment; private String mmsi; private String imo; @@ -293,7 +293,7 @@ public void setInstanceAsXml(String instanceAsXml) { * * @return the published at */ - public LocalDateTime getPublishedAt() { + public Instant getPublishedAt() { return publishedAt; } @@ -302,7 +302,7 @@ public LocalDateTime getPublishedAt() { * * @param publishedAt the published at */ - public void setPublishedAt(LocalDateTime publishedAt) { + public void setPublishedAt(Instant publishedAt) { this.publishedAt = publishedAt; } @@ -311,7 +311,7 @@ public void setPublishedAt(LocalDateTime publishedAt) { * * @return the last updated at */ - public LocalDateTime getLastUpdatedAt() { + public Instant getLastUpdatedAt() { return lastUpdatedAt; } @@ -320,7 +320,7 @@ public LocalDateTime getLastUpdatedAt() { * * @param lastUpdatedAt the last updated at */ - public void setLastUpdatedAt(LocalDateTime lastUpdatedAt) { + public void setLastUpdatedAt(Instant lastUpdatedAt) { this.lastUpdatedAt = lastUpdatedAt; } diff --git a/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java b/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java index 65f8f4fd..5b36d985 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java @@ -19,13 +19,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; import org.grad.secom.core.base.DateTimeSerializer; import org.grad.secom.core.models.enums.ContainerTypeEnum; import org.grad.secom.core.models.enums.SECOM_DataProductType; import javax.validation.constraints.Pattern; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -48,12 +48,12 @@ public class SubscriptionRequestObject { private String unlocode; @Schema(description = "The subscription period start", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime subscriptionPeriodStart; + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant subscriptionPeriodStart; @Schema(description = "The subscription period end", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime subscriptionPeriodEnd; + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant subscriptionPeriodEnd; /** * Gets container type. @@ -168,7 +168,7 @@ public void setUnlocode(String unlocode) { * * @return the subscription period start */ - public LocalDateTime getSubscriptionPeriodStart() { + public Instant getSubscriptionPeriodStart() { return subscriptionPeriodStart; } @@ -177,7 +177,7 @@ public LocalDateTime getSubscriptionPeriodStart() { * * @param subscriptionPeriodStart the subscription period start */ - public void setSubscriptionPeriodStart(LocalDateTime subscriptionPeriodStart) { + public void setSubscriptionPeriodStart(Instant subscriptionPeriodStart) { this.subscriptionPeriodStart = subscriptionPeriodStart; } @@ -186,7 +186,7 @@ public void setSubscriptionPeriodStart(LocalDateTime subscriptionPeriodStart) { * * @return the subscription period end */ - public LocalDateTime getSubscriptionPeriodEnd() { + public Instant getSubscriptionPeriodEnd() { return subscriptionPeriodEnd; } @@ -195,7 +195,7 @@ public LocalDateTime getSubscriptionPeriodEnd() { * * @param subscriptionPeriodEnd the subscription period end */ - public void setSubscriptionPeriodEnd(LocalDateTime subscriptionPeriodEnd) { + public void setSubscriptionPeriodEnd(Instant subscriptionPeriodEnd) { this.subscriptionPeriodEnd = subscriptionPeriodEnd; } } diff --git a/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java b/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java index b50f3916..31eb11e7 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java @@ -19,13 +19,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.DateTimeDeSerializer; +import org.grad.secom.core.base.InstantDeSerializer; import org.grad.secom.core.base.DateTimeSerializer; import org.grad.secom.core.models.enums.ContainerTypeEnum; import org.grad.secom.core.models.enums.SECOM_DataProductType; import javax.validation.constraints.NotNull; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.UUID; /** @@ -52,8 +52,8 @@ public class SummaryObject { private String info_description; @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = DateTimeDeSerializer.class) - private LocalDateTime info_lastModifiedDate; + @JsonDeserialize(using = InstantDeSerializer.class) + private Instant info_lastModifiedDate; private String info_productVersion; private Long info_size; @@ -224,7 +224,7 @@ public void setInfo_description(String info_description) { * * @return the info last modified date */ - public LocalDateTime getInfo_lastModifiedDate() { + public Instant getInfo_lastModifiedDate() { return info_lastModifiedDate; } @@ -233,7 +233,7 @@ public LocalDateTime getInfo_lastModifiedDate() { * * @param info_lastModifiedDate the info last modified date */ - public void setInfo_lastModifiedDate(LocalDateTime info_lastModifiedDate) { + public void setInfo_lastModifiedDate(Instant info_lastModifiedDate) { this.info_lastModifiedDate = info_lastModifiedDate; } diff --git a/secom-core/src/test/java/org/grad/secom/core/models/AcknowledgementObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/AcknowledgementObjectTest.java index e7155e7c..8516696b 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/AcknowledgementObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/AcknowledgementObjectTest.java @@ -23,7 +23,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -55,13 +55,13 @@ void setup() { // Create a new envelope upload object this.envelopeLinkObject = new EnvelopeAckObject(); - this.envelopeLinkObject.setCreatedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeLinkObject.setCreatedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.envelopeLinkObject.setTransactionIdentifier(UUID.randomUUID()); this.envelopeLinkObject.setAckType(AckTypeEnum.DELIVERED_ACK); this.envelopeLinkObject.setNackType(NackTypeEnum.UNKNOWN_DATA_TYPE_OR_VERSION); this.envelopeLinkObject.setEnvelopeSignatureCertificate("envelopeCertificate"); this.envelopeLinkObject.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.envelopeLinkObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeLinkObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new object this.obj = new AcknowledgementObject(); diff --git a/secom-core/src/test/java/org/grad/secom/core/models/EncryptionKeyNotificationObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/EncryptionKeyNotificationObjectTest.java index 7b1f7f5d..b203fed8 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/EncryptionKeyNotificationObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/EncryptionKeyNotificationObjectTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -49,7 +49,7 @@ void setup() { this.envelopeKeyNotificationObject.setDataReference(UUID.randomUUID()); this.envelopeKeyNotificationObject.setEnvelopeSignatureCertificate("signatureCertificate"); this.envelopeKeyNotificationObject.setPublicCertificate("publicCertificate"); - this.envelopeKeyNotificationObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeKeyNotificationObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new object this.obj = new EncryptionKeyNotificationObject(); diff --git a/secom-core/src/test/java/org/grad/secom/core/models/EncryptionKeyObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/EncryptionKeyObjectTest.java index f3567ee3..4316cb00 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/EncryptionKeyObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/EncryptionKeyObjectTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -61,7 +61,7 @@ void setup() { this.envelopeLinkObject.setDigitalSignatureValue(this.digitalSignatureValue); this.envelopeLinkObject.setEnvelopeSignatureCertificate("envelopeCertificate"); this.envelopeLinkObject.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.envelopeLinkObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeLinkObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new upload object this.obj = new EncryptionKeyObject(); diff --git a/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeAckObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeAckObjectTest.java index 23aec6e1..59b0502a 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeAckObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeAckObjectTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -50,13 +50,13 @@ void setup() { // Generate a new object this.obj = new EnvelopeAckObject(); - this.obj.setCreatedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setCreatedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.obj.setEnvelopeSignatureCertificate("envelopeCertificate"); this.obj.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); this.obj.setTransactionIdentifier(UUID.randomUUID()); this.obj.setAckType(AckTypeEnum.OPENED_ACK); this.obj.setNackType(NackTypeEnum.UNKNOWN_DATA_TYPE_OR_VERSION); - this.obj.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** @@ -89,13 +89,13 @@ void testGetCsvString() { // Match the individual entries of the string String[] csv = signatureCSV.split("\\."); - assertEquals(this.obj.getCreatedAt().toEpochSecond(ZoneOffset.UTC), Long.parseLong(csv[0])); + assertEquals(this.obj.getCreatedAt().getEpochSecond(), Long.parseLong(csv[0])); assertEquals(this.obj.getEnvelopeCertificate(), csv[1]); assertEquals(this.obj.getEnvelopeRootCertificateThumbprint(), csv[2]); assertEquals(this.obj.getTransactionIdentifier().toString(), csv[3]); assertEquals(String.valueOf(this.obj.getAckType().getValue()), csv[4]); assertEquals(String.valueOf(this.obj.getNackType().getValue()), csv[5]); - assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().toEpochSecond(ZoneOffset.UTC)), csv[6]); + assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().getEpochSecond()), csv[6]); } } \ No newline at end of file diff --git a/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeKeyObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeKeyObjectTest.java index f31ca948..633476f6 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeKeyObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeKeyObjectTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -61,7 +61,7 @@ void setup() { this.obj.setDigitalSignatureValue(this.digitalSignatureValue); this.obj.setEnvelopeSignatureCertificate("envelopeCertificate"); this.obj.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.obj.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** @@ -105,7 +105,7 @@ void testGetCsvString() { assertEquals(obj.getDigitalSignatureValue().getDigitalSignature(), csv[5]); assertEquals(obj.getEnvelopeSignatureCertificate(), csv[6]); assertEquals(obj.getEnvelopeRootCertificateThumbprint(), csv[7]); - assertEquals(obj.getEnvelopeSignatureTime().toEpochSecond(ZoneOffset.UTC), Long.parseLong(csv[8])); + assertEquals(obj.getEnvelopeSignatureTime().getEpochSecond(), Long.parseLong(csv[8])); } } \ No newline at end of file diff --git a/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeLinkObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeLinkObjectTest.java index 90c9ae07..89a64f41 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeLinkObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeLinkObjectTest.java @@ -26,7 +26,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -76,8 +76,8 @@ void setup() { this.obj.setEnvelopeSignatureCertificate("envelopeCertificate"); this.obj.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); this.obj.setSize(1); - this.obj.setTimeToLive(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); - this.obj.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setTimeToLive(Instant.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** @@ -136,8 +136,8 @@ void testGetCsvString() { assertEquals(this.obj.getEnvelopeSignatureCertificate(), csv[12]); assertEquals(this.obj.getEnvelopeRootCertificateThumbprint(), csv[13]); assertEquals(String.valueOf(this.obj.getSize()), csv[14]); - assertEquals(String.valueOf(this.obj.getTimeToLive().toEpochSecond(ZoneOffset.UTC)), csv[15]); - assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().toEpochSecond(ZoneOffset.UTC)), csv[16]); + assertEquals(String.valueOf(this.obj.getTimeToLive().getEpochSecond()), csv[15]); + assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().getEpochSecond()), csv[16]); } } \ No newline at end of file diff --git a/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeUploadObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeUploadObjectTest.java index ef191574..e35678e0 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeUploadObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/EnvelopeUploadObjectTest.java @@ -27,8 +27,7 @@ import org.junit.jupiter.api.Test; import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; -import java.time.ZoneOffset; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Base64; import java.util.UUID; @@ -78,7 +77,7 @@ void setup() { this.obj.setTransactionIdentifier(UUID.randomUUID()); this.obj.setEnvelopeSignatureCertificate("envelopeCertificate"); this.obj.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.obj.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** @@ -135,7 +134,7 @@ void testGetCsvString() { assertEquals(this.obj.getTransactionIdentifier().toString(), csv[12]); assertEquals(this.obj.getEnvelopeSignatureCertificate(), csv[13]); assertEquals(this.obj.getEnvelopeRootCertificateThumbprint(), csv[14]); - assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().toEpochSecond(ZoneOffset.UTC)), csv[15]); + assertEquals(String.valueOf(this.obj.getEnvelopeSignatureTime().getEpochSecond()), csv[15]); } } \ No newline at end of file diff --git a/secom-core/src/test/java/org/grad/secom/core/models/GetSummaryResponseObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/GetSummaryResponseObjectTest.java index edfc4c66..c0413650 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/GetSummaryResponseObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/GetSummaryResponseObjectTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; import java.util.UUID; @@ -60,7 +60,7 @@ void setup() { this.summaryObject.setInfo_name("infoName"); this.summaryObject.setInfo_status("infoStatus"); this.summaryObject.setInfo_description("infoDescription"); - this.summaryObject.setInfo_lastModifiedDate(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.summaryObject.setInfo_lastModifiedDate(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.summaryObject.setInfo_productVersion("infoProductVersion"); this.summaryObject.setInfo_size(1L); diff --git a/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java index c4b3f3b8..81356540 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import static org.junit.jupiter.api.Assertions.*; @@ -44,7 +44,7 @@ void setup() { // Generate a new object this.obj = new PingResponseObject(); - this.obj.setLastPrivateInteractionTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setLastPrivateInteractionTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** diff --git a/secom-core/src/test/java/org/grad/secom/core/models/ResponseSearchObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/ResponseSearchObjectTest.java index bd6c005b..6428a95a 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/ResponseSearchObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/ResponseSearchObjectTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.Test; import java.net.URISyntaxException; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; @@ -62,8 +62,8 @@ void setup() throws URISyntaxException { this.searchObjectResult.setKeywords("keywords"); this.searchObjectResult.setUnlocode(Collections.singletonList("unlocode")); this.searchObjectResult.setInstanceAsXml("instanceAsXml"); - this.searchObjectResult.setPublishedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); - this.searchObjectResult.setLastUpdatedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.searchObjectResult.setPublishedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); + this.searchObjectResult.setLastUpdatedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.searchObjectResult.setMmsi("mmsi"); this.searchObjectResult.setImo("imo"); this.searchObjectResult.setGeometry("geometry"); diff --git a/secom-core/src/test/java/org/grad/secom/core/models/SearchObjectResultTest.java b/secom-core/src/test/java/org/grad/secom/core/models/SearchObjectResultTest.java index bc4749a6..674683fa 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/SearchObjectResultTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/SearchObjectResultTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.Test; import java.net.URISyntaxException; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; @@ -61,8 +61,8 @@ void setup() throws URISyntaxException { this.obj.setKeywords("keywords"); this.obj.setUnlocode(Collections.singletonList("unlocode")); this.obj.setInstanceAsXml("instanceAsXml"); - this.obj.setPublishedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); - this.obj.setLastUpdatedAt(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setPublishedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setLastUpdatedAt(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.obj.setMmsi("mmsi"); this.obj.setImo("imo"); this.obj.setGeometry("geometry"); diff --git a/secom-core/src/test/java/org/grad/secom/core/models/SubscriptionRequestObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/SubscriptionRequestObjectTest.java index ce87bcaa..04135b5b 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/SubscriptionRequestObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/SubscriptionRequestObjectTest.java @@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test; import java.net.URISyntaxException; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -56,8 +56,8 @@ void setup() throws URISyntaxException { this.obj.setProductVersion("version"); this.obj.setGeometry("geometry"); this.obj.setUnlocode("unlocode"); - this.obj.setSubscriptionPeriodStart(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); - this.obj.setSubscriptionPeriodEnd(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setSubscriptionPeriodStart(Instant.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setSubscriptionPeriodEnd(Instant.now().truncatedTo(ChronoUnit.SECONDS)); } /** diff --git a/secom-core/src/test/java/org/grad/secom/core/models/SummaryObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/SummaryObjectTest.java index aae4821d..b67c77af 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/SummaryObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/SummaryObjectTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -56,7 +56,7 @@ void setup() { this.obj.setInfo_name("infoName"); this.obj.setInfo_status("infoStatus"); this.obj.setInfo_description("infoDescription"); - this.obj.setInfo_lastModifiedDate(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.obj.setInfo_lastModifiedDate(Instant.now().truncatedTo(ChronoUnit.SECONDS)); this.obj.setInfo_productVersion("infoProductVersion"); this.obj.setInfo_size(1L); } diff --git a/secom-core/src/test/java/org/grad/secom/core/models/UploadLinkObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/UploadLinkObjectTest.java index 8b31a262..0a1a6c05 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/UploadLinkObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/UploadLinkObjectTest.java @@ -26,7 +26,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -76,7 +76,7 @@ void setup() { this.envelopeLinkObject.setTransactionIdentifier(UUID.randomUUID()); this.envelopeLinkObject.setEnvelopeSignatureCertificate("envelopeCertificate"); this.envelopeLinkObject.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.envelopeLinkObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeLinkObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new object this.obj = new UploadLinkObject(); diff --git a/secom-core/src/test/java/org/grad/secom/core/models/UploadObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/UploadObjectTest.java index 51a075b4..adaba92b 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/UploadObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/UploadObjectTest.java @@ -27,7 +27,7 @@ import org.junit.jupiter.api.Test; import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; +import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.UUID; @@ -78,7 +78,7 @@ void setup() { this.envelopeUploadObject.setTransactionIdentifier(UUID.randomUUID()); this.envelopeUploadObject.setEnvelopeSignatureCertificate("envelopeCertificate"); this.envelopeUploadObject.setEnvelopeRootCertificateThumbprint("envelopeThumbprint"); - this.envelopeUploadObject.setEnvelopeSignatureTime(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); + this.envelopeUploadObject.setEnvelopeSignatureTime(Instant.now().truncatedTo(ChronoUnit.SECONDS)); // Generate a new object this.obj = new UploadObject(); diff --git a/secom-springboot2/src/main/java/org/grad/secom/springboot2/config/JaxrsApplication.java b/secom-springboot2/src/main/java/org/grad/secom/springboot2/config/JaxrsApplication.java index d9cb4ec6..fd184a51 100644 --- a/secom-springboot2/src/main/java/org/grad/secom/springboot2/config/JaxrsApplication.java +++ b/secom-springboot2/src/main/java/org/grad/secom/springboot2/config/JaxrsApplication.java @@ -126,8 +126,8 @@ DigitalSignatureAlgorithmConverterProvider digitalSignatureAlgorithmConverterPro * @return the LocalDateTime Converter Provider bean */ @Bean - LocalDateTimeConverterProvider localDateTimeConverterProvider() { - return new LocalDateTimeConverterProvider(); + InstantConverterProvider localDateTimeConverterProvider() { + return new InstantConverterProvider(); } /** diff --git a/secom-springboot3/src/main/java/org/grad/secom/springboot3/config/JaxrsApplication.java b/secom-springboot3/src/main/java/org/grad/secom/springboot3/config/JaxrsApplication.java index d0b6b1ca..05cc3108 100644 --- a/secom-springboot3/src/main/java/org/grad/secom/springboot3/config/JaxrsApplication.java +++ b/secom-springboot3/src/main/java/org/grad/secom/springboot3/config/JaxrsApplication.java @@ -127,8 +127,8 @@ DigitalSignatureAlgorithmConverterProvider digitalSignatureAlgorithmConverterPro * @return the LocalDateTime Converter Provider bean */ @Bean - LocalDateTimeConverterProvider localDateTimeConverterProvider() { - return new LocalDateTimeConverterProvider(); + InstantConverterProvider localDateTimeConverterProvider() { + return new InstantConverterProvider(); } /** From 3ad1980c0b550c65164955e70be681824285b78b Mon Sep 17 00:00:00 2001 From: Nikolaos Vastardis Date: Thu, 14 Nov 2024 15:52:15 +0000 Subject: [PATCH 2/9] Moving the version to a snapshot to evaluate the instant changes --- pom.xml | 2 +- secom-core-jakarta/pom.xml | 4 ++-- secom-core/pom.xml | 4 ++-- secom-springboot2/pom.xml | 4 ++-- secom-springboot3/pom.xml | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index ed7bd157..6e2a834e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.grad.secom secom-parent pom - 0.0.50 + 0.0.51-SNAPSHOT secom-core diff --git a/secom-core-jakarta/pom.xml b/secom-core-jakarta/pom.xml index 02ef5bc8..dd6f7075 100644 --- a/secom-core-jakarta/pom.xml +++ b/secom-core-jakarta/pom.xml @@ -21,13 +21,13 @@ secom-parent org.grad.secom - 0.0.50 + 0.0.51-SNAPSHOT 4.0.0 org.grad.secom secom-core-jakarta - 0.0.50 + 0.0.51-SNAPSHOT 9.0.0 diff --git a/secom-core/pom.xml b/secom-core/pom.xml index 9b66ef76..4bd8227b 100644 --- a/secom-core/pom.xml +++ b/secom-core/pom.xml @@ -21,13 +21,13 @@ secom-parent org.grad.secom - 0.0.50 + 0.0.51-SNAPSHOT 4.0.0 org.grad.secom secom-core - 0.0.50 + 0.0.51-SNAPSHOT 2.1.1 diff --git a/secom-springboot2/pom.xml b/secom-springboot2/pom.xml index b0bcf11f..b688029e 100644 --- a/secom-springboot2/pom.xml +++ b/secom-springboot2/pom.xml @@ -21,13 +21,13 @@ secom-parent org.grad.secom - 0.0.50 + 0.0.51-SNAPSHOT 4.0.0 org.grad.secom secom-springboot2 - 0.0.50 + 0.0.51-SNAPSHOT 5.3.29 diff --git a/secom-springboot3/pom.xml b/secom-springboot3/pom.xml index e0fc2f1b..fa405dc3 100644 --- a/secom-springboot3/pom.xml +++ b/secom-springboot3/pom.xml @@ -21,13 +21,13 @@ secom-parent org.grad.secom - 0.0.50 + 0.0.51-SNAPSHOT 4.0.0 org.grad.secom secom-springboot3 - 0.0.50 + 0.0.51-SNAPSHOT 6.1.6 From 79f70f2e701083fa03aa40f79789d200b44a1391 Mon Sep 17 00:00:00 2001 From: Nikolaos Vastardis Date: Fri, 15 Nov 2024 12:20:31 +0000 Subject: [PATCH 3/9] Fixing the instant serialization/deserialization --- secom-core-jakarta/pom.xml | 7 ++ .../secom/core/base/InstantDeserializer.java | 19 ++-- .../secom/core/models/AbstractEnvelope.java | 4 +- .../secom/core/models/EnvelopeAckObject.java | 4 +- .../models/EnvelopeKeyNotificationObject.java | 4 +- .../secom/core/models/EnvelopeLinkObject.java | 4 +- .../secom/core/models/PingResponseObject.java | 4 +- .../secom/core/models/SearchObjectResult.java | 6 +- .../models/SubscriptionRequestObject.java | 6 +- .../grad/secom/core/models/SummaryObject.java | 4 +- .../core/base/InstantDeserializerTest.java | 87 +++++++++++++++++ .../core/base/InstantSerializerTest.java | 93 ++++++++++++++++++ secom-core/pom.xml | 7 ++ .../secom/core/base/InstantDeserializer.java | 17 ++-- ...Serializer.java => InstantSerializer.java} | 6 +- .../secom/core/models/AbstractEnvelope.java | 8 +- .../secom/core/models/EnvelopeAckObject.java | 8 +- .../models/EnvelopeKeyNotificationObject.java | 8 +- .../secom/core/models/EnvelopeLinkObject.java | 8 +- .../secom/core/models/PingResponseObject.java | 8 +- .../secom/core/models/SearchObjectResult.java | 12 +-- .../models/SubscriptionRequestObject.java | 12 +-- .../grad/secom/core/models/SummaryObject.java | 8 +- .../core/base/InstantDeserializerTest.java | 87 +++++++++++++++++ .../core/base/InstantSerializerTest.java | 94 +++++++++++++++++++ .../core/models/PingResponseObjectTest.java | 1 + 26 files changed, 450 insertions(+), 76 deletions(-) rename secom-core/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java => secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeserializer.java (81%) create mode 100644 secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java create mode 100644 secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantSerializerTest.java rename secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java => secom-core/src/main/java/org/grad/secom/core/base/InstantDeserializer.java (82%) rename secom-core/src/main/java/org/grad/secom/core/base/{DateTimeSerializer.java => InstantSerializer.java} (93%) create mode 100644 secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java create mode 100644 secom-core/src/test/java/org/grad/secom/core/base/InstantSerializerTest.java diff --git a/secom-core-jakarta/pom.xml b/secom-core-jakarta/pom.xml index dd6f7075..f955af28 100644 --- a/secom-core-jakarta/pom.xml +++ b/secom-core-jakarta/pom.xml @@ -106,6 +106,13 @@ test + + org.mockito + mockito-core + 5.8.0 + test + + com.fasterxml.jackson.datatype jackson-datatype-jsr310 diff --git a/secom-core/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeserializer.java similarity index 81% rename from secom-core/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java rename to secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeserializer.java index 47c26474..372183fb 100644 --- a/secom-core/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeserializer.java @@ -22,15 +22,13 @@ import java.io.IOException; import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneOffset; import java.util.Optional; import static java.util.function.Predicate.not; import static org.grad.secom.core.base.SecomConstants.SECOM_DATE_TIME_FORMATTER; /** - * The DateTimeDeSerializer Class + * The DateTimeDeserializer Class *

* In SECOM the date-time format is not the frequently used ISO. According to * the standard A DateTime is a combination of a date and a time type. @@ -39,12 +37,12 @@ * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ -public class InstantDeSerializer extends StdDeserializer { +public class InstantDeserializer extends StdDeserializer { /** * Instantiates a new Byte array de serializer. */ - protected InstantDeSerializer() { + protected InstantDeserializer() { this(null); } @@ -53,24 +51,25 @@ protected InstantDeSerializer() { * * @param t the byte array class */ - protected InstantDeSerializer(Class t) { + protected InstantDeserializer(Class t) { super(t); } /** * Implements the de-serialization procedure of the de-serializer. * - * @param jp The JSON Parser - * @param ctxt The deserialization context + * @param jp The JSON Parser + * @param context The deserialization context * @return the deserialized output * @throws IOException for any IO exceptions */ @Override - public Instant deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { + public Instant deserialize(JsonParser jp, DeserializationContext context) throws IOException { final String value = jp.getCodec().readValue(jp, String.class); return Optional.ofNullable(value) .filter(not(String::isBlank)) - .map(v -> LocalDateTime.parse(v, SECOM_DATE_TIME_FORMATTER).toInstant(ZoneOffset.UTC)) + .map(SECOM_DATE_TIME_FORMATTER::parse) + .map(Instant::from) .orElse(null); } } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java index 1f8cab08..98f6c54e 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java @@ -22,7 +22,7 @@ import org.grad.secom.core.base.CsvStringGenerator; import jakarta.validation.constraints.NotNull; -import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantDeserializer; import org.grad.secom.core.base.InstantSerializer; import java.time.Instant; @@ -37,7 +37,7 @@ public abstract class AbstractEnvelope implements CsvStringGenerator { @NotNull @Schema(description = "The envelope signature date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) protected Instant envelopeSignatureTime; /** diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java index 557dfcc4..00fdf7f9 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java @@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantDeserializer; import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.AckTypeEnum; import org.grad.secom.core.models.enums.NackTypeEnum; @@ -40,7 +40,7 @@ public class EnvelopeAckObject extends AbstractEnvelope { @NotNull @Schema(description = "The creation date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant createdAt; @NotNull private UUID transactionIdentifier; diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java index fb0c16c0..99c1b5c1 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java @@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; -import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantDeserializer; import org.grad.secom.core.base.InstantSerializer; import java.time.Instant; @@ -43,7 +43,7 @@ public class EnvelopeKeyNotificationObject { @NotNull @Schema(description = "The envelope signature date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant envelopeSignatureTime; /** diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java index 96911b8b..61f99548 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java @@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantDeserializer; import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.base.GenericExchangeMetadataBearer; import org.grad.secom.core.models.enums.AckRequestEnum; @@ -57,7 +57,7 @@ public class EnvelopeLinkObject extends AbstractEnvelope implements GenericExcha @NotNull @Schema(description = "The time to live date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant timeToLive; /** diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java index 1ace650c..5c0234b6 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java @@ -19,7 +19,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantDeserializer; import org.grad.secom.core.base.InstantSerializer; import java.time.Instant; @@ -34,7 +34,7 @@ public class PingResponseObject { // Class Variables @Schema(description = "The last private interaction date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant lastPrivateInteractionTime; /** diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java index 04abd9bd..68adddea 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java @@ -19,7 +19,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantDeserializer; import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.SECOM_DataProductType; @@ -61,11 +61,11 @@ public class SearchObjectResult { // Non-standard fields (mentioned but not standardised) @Schema(description = "The publication date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant publishedAt; @Schema(description = "The last updated date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant lastUpdatedAt; private String comment; private String mmsi; diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java index f85a02ae..181636d9 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java @@ -19,7 +19,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantDeserializer; import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.ContainerTypeEnum; import org.grad.secom.core.models.enums.SECOM_DataProductType; @@ -48,11 +48,11 @@ public class SubscriptionRequestObject { private String unlocode; @Schema(description = "The subscription period start", type = "string", example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant subscriptionPeriodStart; @Schema(description = "The subscription period end", type = "string",example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant subscriptionPeriodEnd; /** diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java index cc1befaf..1108d06a 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java @@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; -import org.grad.secom.core.base.InstantDeSerializer; +import org.grad.secom.core.base.InstantDeserializer; import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.ContainerTypeEnum; import org.grad.secom.core.models.enums.SECOM_DataProductType; @@ -52,7 +52,7 @@ public class SummaryObject { private String info_description; @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530") @JsonSerialize(using = InstantSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant info_lastModifiedDate; private String info_productVersion; private Long info_size; diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java new file mode 100644 index 00000000..62454756 --- /dev/null +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2022 GLA Research and Development Directorate + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.grad.secom.core.base; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.time.Instant; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +class InstantDeserializerTest { + + // Test Parameters + InstantDeserializer instantDeserializer; + + /** + * Set up some base data. + */ + @BeforeEach + void setup() { + this.instantDeserializer = new InstantDeserializer(); + } + + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted dates. + */ + @Test + void testDeserializeDate() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20010101T121314Z").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2001-01-01T12:13:14.00Z"), result); + } + + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted dates with offsets. + */ + @Test + void testDeserializeDateWithOffset() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20010101T121314+0100").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2001-01-01T12:13:14.00+01:00"), result); + } + +} \ No newline at end of file diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantSerializerTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantSerializerTest.java new file mode 100644 index 00000000..5ac149c4 --- /dev/null +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantSerializerTest.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2022 GLA Research and Development Directorate + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.grad.secom.core.base; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.json.WriterBasedJsonGenerator; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.io.StringWriter; +import java.time.Instant; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class InstantSerializerTest { + + // Test Variables + ObjectMapper objectMapper; + InstantSerializer instantSerializer; + StringWriter stringWriter; + WriterBasedJsonGenerator jsonGenerator; + SerializerProvider serializerProvider; + + /** + * Set up some base data. + */ + @BeforeEach + void setup() throws IOException { + // Initialise the object mapper + this.objectMapper = new ObjectMapper(); + + // Initialise the serializer + this.instantSerializer = new InstantSerializer(); + + // Create a json generator + this.stringWriter = new StringWriter(); + this.jsonGenerator = (WriterBasedJsonGenerator) new JsonFactory().createGenerator(this.stringWriter); + + // And add a serialisation provider + this.serializerProvider = new ObjectMapper().getSerializerProvider(); + } + + /** + * Test that we can successfully serialise a temporal instant according to + * the SECOM standard. + */ + @Test + void testSerialize() throws IOException { + // Get a test time instance + Instant instant = Instant.now(); + + // Begin the JSON Generation + this.jsonGenerator.writeStartObject(); + + // Serialize the input + jsonGenerator.writeFieldName("date"); + instantSerializer.serialize(instant, this.jsonGenerator, this.serializerProvider); + + // Finish the JSON Generation + this.jsonGenerator.writeEndObject(); + this.jsonGenerator.close(); + + // And get the final result + final Map result = this.objectMapper.readValue( + this.stringWriter.toString(), + new TypeReference<>() {} + ); + + // Make sure it seems fine + assertNotNull(result); + assertEquals(1, result.size()); + assertTrue(result.get("date").matches("(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})(Z|\\+(\\d{4}))")); + } +} \ No newline at end of file diff --git a/secom-core/pom.xml b/secom-core/pom.xml index 4bd8227b..a712f950 100644 --- a/secom-core/pom.xml +++ b/secom-core/pom.xml @@ -106,6 +106,13 @@ test + + org.mockito + mockito-core + 5.8.0 + test + + com.fasterxml.jackson.datatype jackson-datatype-jsr310 diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java b/secom-core/src/main/java/org/grad/secom/core/base/InstantDeserializer.java similarity index 82% rename from secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java rename to secom-core/src/main/java/org/grad/secom/core/base/InstantDeserializer.java index 47c26474..454f062d 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantDeSerializer.java +++ b/secom-core/src/main/java/org/grad/secom/core/base/InstantDeserializer.java @@ -22,8 +22,6 @@ import java.io.IOException; import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneOffset; import java.util.Optional; import static java.util.function.Predicate.not; @@ -39,12 +37,12 @@ * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ -public class InstantDeSerializer extends StdDeserializer { +public class InstantDeserializer extends StdDeserializer { /** * Instantiates a new Byte array de serializer. */ - protected InstantDeSerializer() { + protected InstantDeserializer() { this(null); } @@ -53,24 +51,25 @@ protected InstantDeSerializer() { * * @param t the byte array class */ - protected InstantDeSerializer(Class t) { + protected InstantDeserializer(Class t) { super(t); } /** * Implements the de-serialization procedure of the de-serializer. * - * @param jp The JSON Parser - * @param ctxt The deserialization context + * @param jp The JSON Parser + * @param context The deserialization context * @return the deserialized output * @throws IOException for any IO exceptions */ @Override - public Instant deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { + public Instant deserialize(JsonParser jp, DeserializationContext context) throws IOException { final String value = jp.getCodec().readValue(jp, String.class); return Optional.ofNullable(value) .filter(not(String::isBlank)) - .map(v -> LocalDateTime.parse(v, SECOM_DATE_TIME_FORMATTER).toInstant(ZoneOffset.UTC)) + .map(SECOM_DATE_TIME_FORMATTER::parse) + .map(Instant::from) .orElse(null); } } diff --git a/secom-core/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java b/secom-core/src/main/java/org/grad/secom/core/base/InstantSerializer.java similarity index 93% rename from secom-core/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java rename to secom-core/src/main/java/org/grad/secom/core/base/InstantSerializer.java index 554f8ea8..4930d69f 100644 --- a/secom-core/src/main/java/org/grad/secom/core/base/DateTimeSerializer.java +++ b/secom-core/src/main/java/org/grad/secom/core/base/InstantSerializer.java @@ -37,12 +37,12 @@ * * @author Nikolaos Vastardis (email: Nikolaos.Vastardis@gla-rad.org) */ -public class DateTimeSerializer extends StdSerializer { +public class InstantSerializer extends StdSerializer { /** * Instantiates a new Byte array serializer. */ - protected DateTimeSerializer() { + protected InstantSerializer() { this(null); } @@ -51,7 +51,7 @@ protected DateTimeSerializer() { * * @param t the byte array class */ - protected DateTimeSerializer(Class t) { + protected InstantSerializer(Class t) { super(t); } diff --git a/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java b/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java index a0ac9dbd..da3abd97 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java @@ -20,8 +20,8 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; import org.grad.secom.core.base.CsvStringGenerator; -import org.grad.secom.core.base.InstantDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeserializer; +import org.grad.secom.core.base.InstantSerializer; import javax.validation.constraints.NotNull; import java.time.Instant; @@ -35,8 +35,8 @@ public abstract class AbstractEnvelope implements CsvStringGenerator { protected String envelopeRootCertificateThumbprint; @NotNull @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) protected Instant envelopeSignatureTime; /** diff --git a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java index 056267e9..5624ec31 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java @@ -20,8 +20,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeserializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.AckTypeEnum; import org.grad.secom.core.models.enums.NackTypeEnum; @@ -39,8 +39,8 @@ public class EnvelopeAckObject extends AbstractEnvelope { // Class Variables @NotNull @Schema(description = "The creation date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant createdAt; @NotNull private UUID transactionIdentifier; diff --git a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java index 37b3e06f..b45a76c9 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java @@ -19,8 +19,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeserializer; +import org.grad.secom.core.base.InstantSerializer; import javax.validation.constraints.NotNull; import java.time.Instant; @@ -42,8 +42,8 @@ public class EnvelopeKeyNotificationObject { private String envelopeSignatureCertificate; @NotNull @Schema(description = "The envelope signature date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant envelopeSignatureTime; /** diff --git a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java index 3016a60f..a0d86b61 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java @@ -20,8 +20,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeserializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.base.GenericExchangeMetadataBearer; import org.grad.secom.core.models.enums.AckRequestEnum; import org.grad.secom.core.models.enums.ContainerTypeEnum; @@ -56,8 +56,8 @@ public class EnvelopeLinkObject extends AbstractEnvelope implements GenericExcha private Integer size; @NotNull @Schema(description = "The time to live date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant timeToLive; /** diff --git a/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java b/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java index 43319fb5..39d5d1c6 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java @@ -19,8 +19,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeserializer; +import org.grad.secom.core.base.InstantSerializer; import java.time.Instant; @@ -33,8 +33,8 @@ public class PingResponseObject { // Class Variables @Schema(description = "The last private interaction date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant lastPrivateInteractionTime; /** diff --git a/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java b/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java index ddf4d560..f0452462 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java @@ -19,8 +19,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeserializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.SECOM_DataProductType; import javax.validation.constraints.NotNull; @@ -60,12 +60,12 @@ public class SearchObjectResult { // Non-standard fields (mentioned but not standardised) @Schema(description = "The publication date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant publishedAt; @Schema(description = "The last updated date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant lastUpdatedAt; private String comment; private String mmsi; diff --git a/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java b/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java index 5b36d985..db64e88e 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java @@ -19,8 +19,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeserializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.ContainerTypeEnum; import org.grad.secom.core.models.enums.SECOM_DataProductType; @@ -47,12 +47,12 @@ public class SubscriptionRequestObject { @Pattern(regexp = "[A-Z]{5}") private String unlocode; @Schema(description = "The subscription period start", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant subscriptionPeriodStart; @Schema(description = "The subscription period end", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant subscriptionPeriodEnd; /** diff --git a/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java b/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java index 31eb11e7..7df24a27 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java @@ -19,8 +19,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; -import org.grad.secom.core.base.InstantDeSerializer; -import org.grad.secom.core.base.DateTimeSerializer; +import org.grad.secom.core.base.InstantDeserializer; +import org.grad.secom.core.base.InstantSerializer; import org.grad.secom.core.models.enums.ContainerTypeEnum; import org.grad.secom.core.models.enums.SECOM_DataProductType; @@ -51,8 +51,8 @@ public class SummaryObject { private String info_status; private String info_description; @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530") - @JsonSerialize(using = DateTimeSerializer.class) - @JsonDeserialize(using = InstantDeSerializer.class) + @JsonSerialize(using = InstantSerializer.class) + @JsonDeserialize(using = InstantDeserializer.class) private Instant info_lastModifiedDate; private String info_productVersion; private Long info_size; diff --git a/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java b/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java new file mode 100644 index 00000000..62454756 --- /dev/null +++ b/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2022 GLA Research and Development Directorate + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.grad.secom.core.base; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.time.Instant; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +class InstantDeserializerTest { + + // Test Parameters + InstantDeserializer instantDeserializer; + + /** + * Set up some base data. + */ + @BeforeEach + void setup() { + this.instantDeserializer = new InstantDeserializer(); + } + + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted dates. + */ + @Test + void testDeserializeDate() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20010101T121314Z").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2001-01-01T12:13:14.00Z"), result); + } + + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted dates with offsets. + */ + @Test + void testDeserializeDateWithOffset() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20010101T121314+0100").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2001-01-01T12:13:14.00+01:00"), result); + } + +} \ No newline at end of file diff --git a/secom-core/src/test/java/org/grad/secom/core/base/InstantSerializerTest.java b/secom-core/src/test/java/org/grad/secom/core/base/InstantSerializerTest.java new file mode 100644 index 00000000..a7193aca --- /dev/null +++ b/secom-core/src/test/java/org/grad/secom/core/base/InstantSerializerTest.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2022 GLA Research and Development Directorate + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.grad.secom.core.base; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.json.WriterBasedJsonGenerator; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.io.StringWriter; +import java.time.Instant; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class InstantSerializerTest { + + // Test Variables + ObjectMapper objectMapper; + InstantSerializer instantSerializer; + StringWriter stringWriter; + WriterBasedJsonGenerator jsonGenerator; + SerializerProvider serializerProvider; + + /** + * Set up some base data. + */ + @BeforeEach + void setup() throws IOException { + // Initialise the object mapper + this.objectMapper = new ObjectMapper(); + + // Initialise the serializer + this.instantSerializer = new InstantSerializer(); + + // Create a json generator + this.stringWriter = new StringWriter(); + this.jsonGenerator = (WriterBasedJsonGenerator) new JsonFactory().createGenerator(this.stringWriter); + + // And add a serialisation provider + this.serializerProvider = new ObjectMapper().getSerializerProvider(); + } + + /** + * Test that we can successfully serialise a temporal instant according to + * the SECOM standard. + */ + @Test + void testSerialize() throws IOException { + // Get a test time instance + Instant instant = Instant.now(); + + // Begin the JSON Generation + this.jsonGenerator.writeStartObject(); + + // Serialize the input + jsonGenerator.writeFieldName("date"); + instantSerializer.serialize(instant, this.jsonGenerator, this.serializerProvider); + + // Finish the JSON Generation + this.jsonGenerator.writeEndObject(); + this.jsonGenerator.close(); + + // And get the final result + final Map result = this.objectMapper.readValue( + this.stringWriter.toString(), + new TypeReference<>() {} + ); + + // Make sure it seems fine + assertNotNull(result); + assertEquals(1, result.size()); + assertTrue(result.get("date").matches("(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})(Z|\\+(\\d{4}))")); + } + +} \ No newline at end of file diff --git a/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java index 81356540..eaf3ec55 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java @@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test; import java.time.Instant; +import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import static org.junit.jupiter.api.Assertions.*; From 9e650548de9ca09002b91a3562be6f34b8c5cbf7 Mon Sep 17 00:00:00 2001 From: Nikolaos Vastardis Date: Fri, 15 Nov 2024 16:37:25 +0000 Subject: [PATCH 4/9] Renaming the providers --- .../org/grad/secom/springboot2/config/JaxrsApplication.java | 4 ++-- .../org/grad/secom/springboot3/config/JaxrsApplication.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/secom-springboot2/src/main/java/org/grad/secom/springboot2/config/JaxrsApplication.java b/secom-springboot2/src/main/java/org/grad/secom/springboot2/config/JaxrsApplication.java index fd184a51..ce361217 100644 --- a/secom-springboot2/src/main/java/org/grad/secom/springboot2/config/JaxrsApplication.java +++ b/secom-springboot2/src/main/java/org/grad/secom/springboot2/config/JaxrsApplication.java @@ -121,12 +121,12 @@ DigitalSignatureAlgorithmConverterProvider digitalSignatureAlgorithmConverterPro } /** - * Initialise the LocalDateTime Converter Provider bean. + * Initialise the Instant Converter Provider bean. * * @return the LocalDateTime Converter Provider bean */ @Bean - InstantConverterProvider localDateTimeConverterProvider() { + InstantConverterProvider instantConverterProvider() { return new InstantConverterProvider(); } diff --git a/secom-springboot3/src/main/java/org/grad/secom/springboot3/config/JaxrsApplication.java b/secom-springboot3/src/main/java/org/grad/secom/springboot3/config/JaxrsApplication.java index 05cc3108..e6e29530 100644 --- a/secom-springboot3/src/main/java/org/grad/secom/springboot3/config/JaxrsApplication.java +++ b/secom-springboot3/src/main/java/org/grad/secom/springboot3/config/JaxrsApplication.java @@ -122,12 +122,12 @@ DigitalSignatureAlgorithmConverterProvider digitalSignatureAlgorithmConverterPro } /** - * Initialise the LocalDateTime Converter Provider bean. + * Initialise the Instant Converter Provider bean. * - * @return the LocalDateTime Converter Provider bean + * @return the Instant Converter Provider bean */ @Bean - InstantConverterProvider localDateTimeConverterProvider() { + InstantConverterProvider instantConverterProvider() { return new InstantConverterProvider(); } From 6d2e4a5c136f2b217445ca67ee430c88e634df24 Mon Sep 17 00:00:00 2001 From: Nikolaos Vastardis Date: Fri, 15 Nov 2024 16:42:23 +0000 Subject: [PATCH 5/9] Fixing the instant converter providers --- .../grad/secom/core/components/InstantConverterProvider.java | 2 +- .../grad/secom/core/components/InstantConverterProvider.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java index fe8a1269..f74e3146 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java @@ -69,7 +69,7 @@ public static class InstantConverter implements ParamConverter { public Instant fromString(String value) { if (value == null || value.isEmpty()) return null; try { - return LocalDateTime.parse(value, SECOM_DATE_TIME_FORMATTER).toInstant(ZoneOffset.UTC); + return Instant.from(SECOM_DATE_TIME_FORMATTER.parse(value)); } catch (Exception ex) { // Direct to BAD_REQUEST throw new SecomValidationException(ex.getMessage()); } diff --git a/secom-core/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java b/secom-core/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java index fa929361..c10c758b 100644 --- a/secom-core/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java +++ b/secom-core/src/main/java/org/grad/secom/core/components/InstantConverterProvider.java @@ -69,7 +69,7 @@ public static class InstantConverter implements ParamConverter { public Instant fromString(String value) { if (value == null || value.isEmpty()) return null; try { - return LocalDateTime.parse(value, SECOM_DATE_TIME_FORMATTER).toInstant(ZoneOffset.UTC); + return Instant.from(SECOM_DATE_TIME_FORMATTER.parse(value)); } catch (Exception ex) { // Direct to BAD_REQUEST throw new SecomValidationException(ex.getMessage()); } From 28ac70df31f0e4d50c452670bfe74fb77b4e3f23 Mon Sep 17 00:00:00 2001 From: Nikolaos Vastardis Date: Mon, 18 Nov 2024 15:09:35 +0000 Subject: [PATCH 6/9] Adding support for local datetime specification --- .../grad/secom/core/base/SecomConstants.java | 9 +- .../core/base/InstantDeserializerTest.java | 84 ++++++++++++++++++- .../grad/secom/core/base/SecomConstants.java | 9 +- .../core/base/InstantDeserializerTest.java | 84 ++++++++++++++++++- 4 files changed, 178 insertions(+), 8 deletions(-) diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/SecomConstants.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/SecomConstants.java index 529fc114..b0e719bb 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/SecomConstants.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/SecomConstants.java @@ -16,6 +16,7 @@ package org.grad.secom.core.base; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; @@ -66,7 +67,9 @@ public class SecomConstants { .parseLenient() .appendOffset("+HHMM", "Z") .parseStrict() - .toFormatter(); + .optionalEnd() + .toFormatter() + .withZone(ZoneId.systemDefault()); } public static final String SECOM_DATE_TIME_FORMAT = SECOM_DATE_FORMAT + "'T'" + SECOM_TIME_FORMAT; @@ -79,7 +82,9 @@ public class SecomConstants { .parseLenient() .appendOffset("+HHMM", "Z") .parseStrict() - .toFormatter(); + .optionalEnd() + .toFormatter() + .withZone(ZoneId.systemDefault()); } } diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java index 62454756..d3ea3cfa 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java @@ -46,10 +46,50 @@ void setup() { /** * make sure we can correctly deserialize the incoming SECOM-compliant - * formatted dates. + * formatted local dates. */ @Test - void testDeserializeDate() throws IOException { + void testDeserializeLocalDate() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20010101T121314").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2001-01-01T12:13:14.00Z"), result); + } + + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted local daylight-saving dates. + */ + @Test + void testDeserializeLocalDateDLS() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20080808T121314").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2008-08-08T12:13:14.00+01:00"), result); + } + + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted UTC dates. + */ + @Test + void testDeserializeUTCDate() throws IOException { // Make some mocks to test easily ObjectCodec objectCodecMock = mock(ObjectCodec.class); doReturn("20010101T121314Z").when(objectCodecMock).readValue(any(), eq(String.class)); @@ -64,6 +104,26 @@ void testDeserializeDate() throws IOException { assertEquals(Instant.parse("2001-01-01T12:13:14.00Z"), result); } + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted UTC daylight-saving dates. + */ + @Test + void testDeserializeUTCDateDLS() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20080808T121314Z").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2008-08-08T12:13:14.00Z"), result); + } + /** * make sure we can correctly deserialize the incoming SECOM-compliant * formatted dates with offsets. @@ -84,4 +144,24 @@ void testDeserializeDateWithOffset() throws IOException { assertEquals(Instant.parse("2001-01-01T12:13:14.00+01:00"), result); } + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted daylight-saving dates with offsets. + */ + @Test + void testDeserializeDateWithOffsetDLS() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20080808T121314+0100").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2008-08-08T12:13:14.00+01:00"), result); + } + } \ No newline at end of file diff --git a/secom-core/src/main/java/org/grad/secom/core/base/SecomConstants.java b/secom-core/src/main/java/org/grad/secom/core/base/SecomConstants.java index b2dafc50..6d068795 100644 --- a/secom-core/src/main/java/org/grad/secom/core/base/SecomConstants.java +++ b/secom-core/src/main/java/org/grad/secom/core/base/SecomConstants.java @@ -16,6 +16,7 @@ package org.grad.secom.core.base; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; @@ -66,7 +67,9 @@ public class SecomConstants { .parseLenient() .appendOffset("+HHMM", "Z") .parseStrict() - .toFormatter(); + .optionalEnd() + .toFormatter() + .withZone(ZoneId.systemDefault()); } public static final String SECOM_DATE_TIME_FORMAT = SECOM_DATE_FORMAT + "'T'" + SECOM_TIME_FORMAT; @@ -79,7 +82,9 @@ public class SecomConstants { .parseLenient() .appendOffset("+HHMM", "Z") .parseStrict() - .toFormatter(); + .optionalEnd() + .toFormatter() + .withZone(ZoneId.systemDefault()); } } diff --git a/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java b/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java index 62454756..d3ea3cfa 100644 --- a/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java @@ -46,10 +46,50 @@ void setup() { /** * make sure we can correctly deserialize the incoming SECOM-compliant - * formatted dates. + * formatted local dates. */ @Test - void testDeserializeDate() throws IOException { + void testDeserializeLocalDate() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20010101T121314").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2001-01-01T12:13:14.00Z"), result); + } + + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted local daylight-saving dates. + */ + @Test + void testDeserializeLocalDateDLS() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20080808T121314").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2008-08-08T12:13:14.00+01:00"), result); + } + + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted UTC dates. + */ + @Test + void testDeserializeUTCDate() throws IOException { // Make some mocks to test easily ObjectCodec objectCodecMock = mock(ObjectCodec.class); doReturn("20010101T121314Z").when(objectCodecMock).readValue(any(), eq(String.class)); @@ -64,6 +104,26 @@ void testDeserializeDate() throws IOException { assertEquals(Instant.parse("2001-01-01T12:13:14.00Z"), result); } + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted UTC daylight-saving dates. + */ + @Test + void testDeserializeUTCDateDLS() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20080808T121314Z").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2008-08-08T12:13:14.00Z"), result); + } + /** * make sure we can correctly deserialize the incoming SECOM-compliant * formatted dates with offsets. @@ -84,4 +144,24 @@ void testDeserializeDateWithOffset() throws IOException { assertEquals(Instant.parse("2001-01-01T12:13:14.00+01:00"), result); } + /** + * make sure we can correctly deserialize the incoming SECOM-compliant + * formatted daylight-saving dates with offsets. + */ + @Test + void testDeserializeDateWithOffsetDLS() throws IOException { + // Make some mocks to test easily + ObjectCodec objectCodecMock = mock(ObjectCodec.class); + doReturn("20080808T121314+0100").when(objectCodecMock).readValue(any(), eq(String.class)); + JsonParser jsonParserMock = mock(JsonParser.class); + doReturn(objectCodecMock).when(jsonParserMock).getCodec(); + DeserializationContext deserializationContextMock = mock(DeserializationContext.class); + + // And deserialize + Instant result = this.instantDeserializer.deserialize(jsonParserMock, deserializationContextMock); + + // Make sure the result seems correct + assertEquals(Instant.parse("2008-08-08T12:13:14.00+01:00"), result); + } + } \ No newline at end of file From d86514c9b7057a9e34ac6bbe5fb46a7a6ba3cef9 Mon Sep 17 00:00:00 2001 From: Nikolaos Vastardis Date: Mon, 18 Nov 2024 16:00:15 +0000 Subject: [PATCH 7/9] Adding SECOM DateTime pattern validation --- .../org/grad/secom/core/interfaces/GetSecomInterface.java | 7 ++++--- .../secom/core/interfaces/GetSummarySecomInterface.java | 6 ++++-- .../java/org/grad/secom/core/models/AbstractEnvelope.java | 2 +- .../java/org/grad/secom/core/models/EnvelopeAckObject.java | 2 +- .../secom/core/models/EnvelopeKeyNotificationObject.java | 2 +- .../org/grad/secom/core/models/EnvelopeLinkObject.java | 2 +- .../org/grad/secom/core/models/PingResponseObject.java | 2 +- .../org/grad/secom/core/models/SearchObjectResult.java | 4 ++-- .../grad/secom/core/models/SubscriptionRequestObject.java | 4 ++-- .../java/org/grad/secom/core/models/SummaryObject.java | 2 +- .../org/grad/secom/core/interfaces/GetSecomInterface.java | 6 ++++-- .../secom/core/interfaces/GetSummarySecomInterface.java | 6 ++++-- .../java/org/grad/secom/core/models/AbstractEnvelope.java | 2 +- .../java/org/grad/secom/core/models/EnvelopeAckObject.java | 2 +- .../secom/core/models/EnvelopeKeyNotificationObject.java | 2 +- .../org/grad/secom/core/models/EnvelopeLinkObject.java | 2 +- .../org/grad/secom/core/models/PingResponseObject.java | 2 +- .../org/grad/secom/core/models/SearchObjectResult.java | 4 ++-- .../grad/secom/core/models/SubscriptionRequestObject.java | 4 ++-- .../java/org/grad/secom/core/models/SummaryObject.java | 2 +- 20 files changed, 36 insertions(+), 29 deletions(-) diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java index 53d2eee4..9361fdb2 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java @@ -17,7 +17,8 @@ package org.grad.secom.core.interfaces; import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.exc.InvalidFormatException; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.ws.rs.*; import org.grad.secom.core.exceptions.SecomNotAuthorisedException; import org.grad.secom.core.exceptions.SecomNotFoundException; @@ -78,8 +79,8 @@ GetResponseObject get(@QueryParam("dataReference") UUID dataReference, @QueryParam("productVersion") String productVersion, @QueryParam("geometry") String geometry, @QueryParam("unlocode") @Pattern(regexp = "[A-Z]{5}") String unlocode, - @QueryParam("validFrom") Instant validFrom, - @QueryParam("validTo") Instant validTo, + @QueryParam("validFrom") @Parameter(example = "20200101T123000", schema = @Schema(implementation = String.class, pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?")) Instant validFrom, + @QueryParam("validTo") @Parameter(example = "20200101T123000", schema = @Schema(implementation = String.class, pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?")) Instant validTo, @QueryParam("page") @Min(0) Integer page, @QueryParam("pageSize") @Min(0) Integer pageSize); diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java index d701aecf..9142d343 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java @@ -18,6 +18,8 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.exc.InvalidFormatException; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.ws.rs.*; import org.grad.secom.core.exceptions.SecomNotAuthorisedException; import org.grad.secom.core.exceptions.SecomNotFoundException; @@ -76,8 +78,8 @@ GetSummaryResponseObject getSummary(@QueryParam("containerType") ContainerTypeEn @QueryParam("productVersion") String productVersion, @QueryParam("geometry") String geometry, @QueryParam("unlocode") @Pattern(regexp = "[A-Z]{5}") String unlocode, - @QueryParam("validFrom") Instant validFrom, - @QueryParam("validTo") Instant validTo, + @QueryParam("validFrom") @Parameter(example = "20200101T123000", schema = @Schema(implementation = String.class, pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?")) Instant validFrom, + @QueryParam("validTo") @Parameter(example = "20200101T123000", schema = @Schema(implementation = String.class, pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?")) Instant validTo, @QueryParam("page") @Min(0) Integer page, @QueryParam("pageSize") @Min(0) Integer pageSize); diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java index 98f6c54e..501cf028 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java @@ -35,7 +35,7 @@ public abstract class AbstractEnvelope implements CsvStringGenerator { @NotNull protected String envelopeRootCertificateThumbprint; @NotNull - @Schema(description = "The envelope signature date-time", type = "string",example = "19850412T101530") + @Schema(description = "The envelope signature date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) protected Instant envelopeSignatureTime; diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java index 00fdf7f9..46f79118 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java @@ -38,7 +38,7 @@ public class EnvelopeAckObject extends AbstractEnvelope { // Class Variables @NotNull - @Schema(description = "The creation date-time", type = "string",example = "19850412T101530") + @Schema(description = "The creation date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant createdAt; diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java index 99c1b5c1..cac13bba 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java @@ -41,7 +41,7 @@ public class EnvelopeKeyNotificationObject { @NotNull private String envelopeSignatureCertificate; @NotNull - @Schema(description = "The envelope signature date-time", type = "string",example = "19850412T101530") + @Schema(description = "The envelope signature date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant envelopeSignatureTime; diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java index 61f99548..1e8282cf 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java @@ -55,7 +55,7 @@ public class EnvelopeLinkObject extends AbstractEnvelope implements GenericExcha @NotNull private Integer size; @NotNull - @Schema(description = "The time to live date-time", type = "string",example = "19850412T101530") + @Schema(description = "The time to live date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant timeToLive; diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java index 5c0234b6..c505cfd4 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java @@ -32,7 +32,7 @@ public class PingResponseObject { // Class Variables - @Schema(description = "The last private interaction date-time", type = "string",example = "19850412T101530") + @Schema(description = "The last private interaction date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant lastPrivateInteractionTime; diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java index 68adddea..ac7b2e71 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java @@ -59,11 +59,11 @@ public class SearchObjectResult { private String instanceAsXml; // Non-standard fields (mentioned but not standardised) - @Schema(description = "The publication date-time", type = "string",example = "19850412T101530") + @Schema(description = "The publication date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant publishedAt; - @Schema(description = "The last updated date-time", type = "string",example = "19850412T101530") + @Schema(description = "The last updated date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant lastUpdatedAt; diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java index 181636d9..bf50a168 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java @@ -46,11 +46,11 @@ public class SubscriptionRequestObject { @Schema(description = "The subscription area as UNLOCODE", type = "string", example = "GBHRW") @Pattern(regexp = "[A-Z]{5}") private String unlocode; - @Schema(description = "The subscription period start", type = "string", example = "19850412T101530") + @Schema(description = "The subscription period start", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant subscriptionPeriodStart; - @Schema(description = "The subscription period end", type = "string",example = "19850412T101530") + @Schema(description = "The subscription period end", type = "string",example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant subscriptionPeriodEnd; diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java index 1108d06a..fbd4867b 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java @@ -50,7 +50,7 @@ public class SummaryObject { private String info_name; private String info_status; private String info_description; - @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530") + @Schema(description = "The last modified date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant info_lastModifiedDate; diff --git a/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java b/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java index 8010f873..eb208ef9 100644 --- a/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java +++ b/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSecomInterface.java @@ -18,6 +18,8 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.exc.InvalidFormatException; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Schema; import org.grad.secom.core.exceptions.SecomNotAuthorisedException; import org.grad.secom.core.exceptions.SecomNotFoundException; import org.grad.secom.core.exceptions.SecomValidationException; @@ -78,8 +80,8 @@ GetResponseObject get(@QueryParam("dataReference") UUID dataReference, @QueryParam("productVersion") String productVersion, @QueryParam("geometry") String geometry, @QueryParam("unlocode") @Pattern(regexp = "[A-Z]{5}") String unlocode, - @QueryParam("validFrom") Instant validFrom, - @QueryParam("validTo") Instant validTo, + @QueryParam("validFrom") @Parameter(example = "20200101T123000", schema = @Schema(implementation = String.class, pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?")) Instant validFrom, + @QueryParam("validTo") @Parameter(example = "20200101T123000", schema = @Schema(implementation = String.class, pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?")) Instant validTo, @QueryParam("page") @Min(0) Integer page, @QueryParam("pageSize") @Min(0) Integer pageSize); diff --git a/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java b/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java index c6e2679a..3de36d8f 100644 --- a/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java +++ b/secom-core/src/main/java/org/grad/secom/core/interfaces/GetSummarySecomInterface.java @@ -18,6 +18,8 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.exc.InvalidFormatException; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Schema; import org.grad.secom.core.exceptions.SecomNotAuthorisedException; import org.grad.secom.core.exceptions.SecomNotFoundException; import org.grad.secom.core.exceptions.SecomValidationException; @@ -76,8 +78,8 @@ GetSummaryResponseObject getSummary(@QueryParam("containerType") ContainerTypeEn @QueryParam("productVersion") String productVersion, @QueryParam("geometry") String geometry, @QueryParam("unlocode") @Pattern(regexp = "[A-Z]{5}") String unlocode, - @QueryParam("validFrom") Instant validFrom, - @QueryParam("validTo") Instant validTo, + @QueryParam("validFrom") @Parameter(example = "20200101T123000", schema = @Schema(implementation = String.class, pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?")) Instant validFrom, + @QueryParam("validTo") @Parameter(example = "20200101T123000", schema = @Schema(implementation = String.class, pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?")) Instant validTo, @QueryParam("page") @Min(0) Integer page, @QueryParam("pageSize") @Min(0) Integer pageSize); diff --git a/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java b/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java index da3abd97..ca44d1e8 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java @@ -34,7 +34,7 @@ public abstract class AbstractEnvelope implements CsvStringGenerator { @NotNull protected String envelopeRootCertificateThumbprint; @NotNull - @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530") + @Schema(description = "The last modified date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) protected Instant envelopeSignatureTime; diff --git a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java index 5624ec31..5e22d95f 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java @@ -38,7 +38,7 @@ public class EnvelopeAckObject extends AbstractEnvelope { // Class Variables @NotNull - @Schema(description = "The creation date-time", type = "string",example = "19850412T101530") + @Schema(description = "The creation date-time", type = "string",example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant createdAt; diff --git a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java index b45a76c9..2db359dc 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java @@ -41,7 +41,7 @@ public class EnvelopeKeyNotificationObject { @NotNull private String envelopeSignatureCertificate; @NotNull - @Schema(description = "The envelope signature date-time", type = "string",example = "19850412T101530") + @Schema(description = "The envelope signature date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant envelopeSignatureTime; diff --git a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java index a0d86b61..8117f471 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java @@ -55,7 +55,7 @@ public class EnvelopeLinkObject extends AbstractEnvelope implements GenericExcha @NotNull private Integer size; @NotNull - @Schema(description = "The time to live date-time", type = "string",example = "19850412T101530") + @Schema(description = "The time to live date-time", type = "string", example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant timeToLive; diff --git a/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java b/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java index 39d5d1c6..f894f503 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/PingResponseObject.java @@ -32,7 +32,7 @@ public class PingResponseObject { // Class Variables - @Schema(description = "The last private interaction date-time", type = "string",example = "19850412T101530") + @Schema(description = "The last private interaction date-time", type = "string",example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant lastPrivateInteractionTime; diff --git a/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java b/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java index f0452462..b55c4f9a 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/SearchObjectResult.java @@ -59,11 +59,11 @@ public class SearchObjectResult { private String instanceAsXml; // Non-standard fields (mentioned but not standardised) - @Schema(description = "The publication date-time", type = "string",example = "19850412T101530") + @Schema(description = "The publication date-time", type = "string",example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant publishedAt; - @Schema(description = "The last updated date-time", type = "string",example = "19850412T101530") + @Schema(description = "The last updated date-time", type = "string",example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant lastUpdatedAt; diff --git a/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java b/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java index db64e88e..aca60a17 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java @@ -46,11 +46,11 @@ public class SubscriptionRequestObject { @Schema(description = "The subscription area as UNLOCODE", type = "string", example = "GBHRW") @Pattern(regexp = "[A-Z]{5}") private String unlocode; - @Schema(description = "The subscription period start", type = "string",example = "19850412T101530") + @Schema(description = "The subscription period start", type = "string",example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant subscriptionPeriodStart; - @Schema(description = "The subscription period end", type = "string",example = "19850412T101530") + @Schema(description = "The subscription period end", type = "string",example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant subscriptionPeriodEnd; diff --git a/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java b/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java index 7df24a27..9c8c20af 100644 --- a/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java +++ b/secom-core/src/main/java/org/grad/secom/core/models/SummaryObject.java @@ -50,7 +50,7 @@ public class SummaryObject { private String info_name; private String info_status; private String info_description; - @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530") + @Schema(description = "The last modified date-time", type = "string",example = "19850412T101530", pattern = "(\\d{8})T(\\d{6})(Z|\\+\\d{4})?") @JsonSerialize(using = InstantSerializer.class) @JsonDeserialize(using = InstantDeserializer.class) private Instant info_lastModifiedDate; From fc11bc97053bda4ee513de5802c440055a84f5d5 Mon Sep 17 00:00:00 2001 From: Lawrence Hughes Date: Tue, 22 Apr 2025 14:50:59 +0100 Subject: [PATCH 8/9] Updated Swagger and SpringBoot3 libraries --- secom-core-jakarta/pom.xml | 2 +- secom-core/pom.xml | 2 +- secom-springboot2/pom.xml | 2 +- secom-springboot3/pom.xml | 12 +++++++++--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/secom-core-jakarta/pom.xml b/secom-core-jakarta/pom.xml index f955af28..50bf00ad 100644 --- a/secom-core-jakarta/pom.xml +++ b/secom-core-jakarta/pom.xml @@ -82,7 +82,7 @@ io.swagger.core.v3 swagger-annotations-jakarta - 2.2.8 + 2.2.30 provided diff --git a/secom-core/pom.xml b/secom-core/pom.xml index a712f950..46d79a75 100644 --- a/secom-core/pom.xml +++ b/secom-core/pom.xml @@ -82,7 +82,7 @@ io.swagger.core.v3 swagger-annotations - 2.1.10 + 2.2.30 provided diff --git a/secom-springboot2/pom.xml b/secom-springboot2/pom.xml index b688029e..1188279c 100644 --- a/secom-springboot2/pom.xml +++ b/secom-springboot2/pom.xml @@ -32,7 +32,7 @@ 5.3.29 5.1.0.Final - 2.2.8 + 2.2.30 diff --git a/secom-springboot3/pom.xml b/secom-springboot3/pom.xml index fa405dc3..b1350512 100644 --- a/secom-springboot3/pom.xml +++ b/secom-springboot3/pom.xml @@ -30,9 +30,9 @@ 0.0.51-SNAPSHOT - 6.1.6 - 6.1.1.Final - 2.2.21 + 6.2.5 + 6.3.0.Final + 2.2.30 @@ -74,6 +74,12 @@ swagger-jaxrs2-jakarta ${swagger.version} + + jakarta.servlet + jakarta.servlet-api + 6.0.0 + compile + From 3d07b37bc62d9039893572f9186d2cf958a2a76a Mon Sep 17 00:00:00 2001 From: Nikolaos Vastardis Date: Thu, 5 Jun 2025 10:05:30 +0100 Subject: [PATCH 9/9] Minor clean up --- .../main/java/org/grad/secom/core/base/InstantSerializer.java | 2 +- .../java/org/grad/secom/core/models/AbstractEnvelope.java | 2 +- .../java/org/grad/secom/core/models/EnvelopeAckObject.java | 2 +- .../grad/secom/core/models/EnvelopeKeyNotificationObject.java | 2 +- .../java/org/grad/secom/core/models/EnvelopeLinkObject.java | 2 +- .../java/org/grad/secom/core/models/PingResponseObject.java | 2 +- .../java/org/grad/secom/core/models/SearchObjectResult.java | 4 ++-- .../org/grad/secom/core/models/SubscriptionRequestObject.java | 4 ++-- .../main/java/org/grad/secom/core/models/SummaryObject.java | 2 +- .../org/grad/secom/core/base/InstantDeserializerTest.java | 4 ++-- .../org/grad/secom/core/base/InstantDeserializerTest.java | 4 ++-- .../org/grad/secom/core/models/PingResponseObjectTest.java | 1 - 12 files changed, 15 insertions(+), 16 deletions(-) diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantSerializer.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantSerializer.java index d957e6ad..99cf1545 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantSerializer.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/base/InstantSerializer.java @@ -65,7 +65,7 @@ protected InstantSerializer(Class t) { * @throws IOException for any IO exceptions */ @Override - public void serialize( Instant instant, JsonGenerator jg, SerializerProvider serializerProvider) throws IOException { + public void serialize(Instant instant, JsonGenerator jg, SerializerProvider serializerProvider) throws IOException { jg.writeString(Optional.ofNullable(instant) .map(dt -> dt.atZone(ZoneId.systemDefault())) .map(SECOM_DATE_TIME_FORMATTER::format) diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java index 501cf028..8071ab11 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/AbstractEnvelope.java @@ -90,7 +90,7 @@ public Instant getEnvelopeSignatureTime() { * * @param envelopeSignatureTime the envelope signature time */ - public void setEnvelopeSignatureTime( Instant envelopeSignatureTime) { + public void setEnvelopeSignatureTime(Instant envelopeSignatureTime) { this.envelopeSignatureTime = envelopeSignatureTime; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java index 46f79118..526babe4 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeAckObject.java @@ -62,7 +62,7 @@ public Instant getCreatedAt() { * * @param createdAt the created at */ - public void setCreatedAt( Instant createdAt) { + public void setCreatedAt(Instant createdAt) { this.createdAt = createdAt; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java index cac13bba..c2000475 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeKeyNotificationObject.java @@ -114,7 +114,7 @@ public Instant getEnvelopeSignatureTime() { * * @param envelopeSignatureTime the envelope signature time */ - public void setEnvelopeSignatureTime( Instant envelopeSignatureTime) { + public void setEnvelopeSignatureTime(Instant envelopeSignatureTime) { this.envelopeSignatureTime = envelopeSignatureTime; } } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java index 1e8282cf..66257de4 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/EnvelopeLinkObject.java @@ -207,7 +207,7 @@ public Instant getTimeToLive() { * * @param timeToLive the time to live */ - public void setTimeToLive( Instant timeToLive) { + public void setTimeToLive(Instant timeToLive) { this.timeToLive = timeToLive; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java index c505cfd4..bbc998c7 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/PingResponseObject.java @@ -51,7 +51,7 @@ public Instant getLastPrivateInteractionTime() { * * @param lastPrivateInteractionTime the last private interaction time */ - public void setLastPrivateInteractionTime( Instant lastPrivateInteractionTime) { + public void setLastPrivateInteractionTime(Instant lastPrivateInteractionTime) { this.lastPrivateInteractionTime = lastPrivateInteractionTime; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java index ac7b2e71..8485707e 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SearchObjectResult.java @@ -302,7 +302,7 @@ public Instant getPublishedAt() { * * @param publishedAt the published at */ - public void setPublishedAt( Instant publishedAt) { + public void setPublishedAt(Instant publishedAt) { this.publishedAt = publishedAt; } @@ -320,7 +320,7 @@ public Instant getLastUpdatedAt() { * * @param lastUpdatedAt the last updated at */ - public void setLastUpdatedAt( Instant lastUpdatedAt) { + public void setLastUpdatedAt(Instant lastUpdatedAt) { this.lastUpdatedAt = lastUpdatedAt; } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java index bf50a168..d7a5717b 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SubscriptionRequestObject.java @@ -177,7 +177,7 @@ public Instant getSubscriptionPeriodStart() { * * @param subscriptionPeriodStart the subscription period start */ - public void setSubscriptionPeriodStart( Instant subscriptionPeriodStart) { + public void setSubscriptionPeriodStart(Instant subscriptionPeriodStart) { this.subscriptionPeriodStart = subscriptionPeriodStart; } @@ -195,7 +195,7 @@ public Instant getSubscriptionPeriodEnd() { * * @param subscriptionPeriodEnd the subscription period end */ - public void setSubscriptionPeriodEnd( Instant subscriptionPeriodEnd) { + public void setSubscriptionPeriodEnd(Instant subscriptionPeriodEnd) { this.subscriptionPeriodEnd = subscriptionPeriodEnd; } } diff --git a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java index fbd4867b..86ad1025 100644 --- a/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java +++ b/secom-core-jakarta/src/main/java/org/grad/secom/core/models/SummaryObject.java @@ -233,7 +233,7 @@ public Instant getInfo_lastModifiedDate() { * * @param info_lastModifiedDate the info last modified date */ - public void setInfo_lastModifiedDate( Instant info_lastModifiedDate) { + public void setInfo_lastModifiedDate(Instant info_lastModifiedDate) { this.info_lastModifiedDate = info_lastModifiedDate; } diff --git a/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java b/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java index d3ea3cfa..33290047 100644 --- a/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java +++ b/secom-core-jakarta/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java @@ -49,7 +49,7 @@ void setup() { * formatted local dates. */ @Test - void testDeserializeLocalDate() throws IOException { + void testDeserializeInstant() throws IOException { // Make some mocks to test easily ObjectCodec objectCodecMock = mock(ObjectCodec.class); doReturn("20010101T121314").when(objectCodecMock).readValue(any(), eq(String.class)); @@ -69,7 +69,7 @@ void testDeserializeLocalDate() throws IOException { * formatted local daylight-saving dates. */ @Test - void testDeserializeLocalDateDLS() throws IOException { + void testDeserializeInstantDLS() throws IOException { // Make some mocks to test easily ObjectCodec objectCodecMock = mock(ObjectCodec.class); doReturn("20080808T121314").when(objectCodecMock).readValue(any(), eq(String.class)); diff --git a/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java b/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java index d3ea3cfa..33290047 100644 --- a/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/base/InstantDeserializerTest.java @@ -49,7 +49,7 @@ void setup() { * formatted local dates. */ @Test - void testDeserializeLocalDate() throws IOException { + void testDeserializeInstant() throws IOException { // Make some mocks to test easily ObjectCodec objectCodecMock = mock(ObjectCodec.class); doReturn("20010101T121314").when(objectCodecMock).readValue(any(), eq(String.class)); @@ -69,7 +69,7 @@ void testDeserializeLocalDate() throws IOException { * formatted local daylight-saving dates. */ @Test - void testDeserializeLocalDateDLS() throws IOException { + void testDeserializeInstantDLS() throws IOException { // Make some mocks to test easily ObjectCodec objectCodecMock = mock(ObjectCodec.class); doReturn("20080808T121314").when(objectCodecMock).readValue(any(), eq(String.class)); diff --git a/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java b/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java index eaf3ec55..81356540 100644 --- a/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java +++ b/secom-core/src/test/java/org/grad/secom/core/models/PingResponseObjectTest.java @@ -23,7 +23,6 @@ import org.junit.jupiter.api.Test; import java.time.Instant; -import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import static org.junit.jupiter.api.Assertions.*;