From fb95edd1c8a1c0fbd22e7035a1971e2f8914843c Mon Sep 17 00:00:00 2001 From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de> Date: Tue, 25 Feb 2025 14:58:24 +0100 Subject: [PATCH] KOP-2694 KOP-3045 add origin and delivery timestamps to XtaMessageMetadata deliveryAttributes.origin and deliveryAttributes.delivery from MessageMetaData --- .../xta/client/mapper/ResponseMapper.java | 4 +++- .../xta/client/model/XtaMessageMetaData.java | 12 +++++----- .../client/xdomea/mapper/MetadataMapper.java | 2 ++ .../factory/MessageMetaDataTestFactory.java | 22 +++++++++++++++++++ .../xta/client/mapper/ResponseMapperTest.java | 18 ++++++++++++++- 5 files changed, 51 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/ozgcloud/xta/client/mapper/ResponseMapper.java b/src/main/java/de/ozgcloud/xta/client/mapper/ResponseMapper.java index 215fdbf..8f31705 100644 --- a/src/main/java/de/ozgcloud/xta/client/mapper/ResponseMapper.java +++ b/src/main/java/de/ozgcloud/xta/client/mapper/ResponseMapper.java @@ -51,6 +51,8 @@ public interface ResponseMapper { @Mapping(target = "authorIdentifier", source = "originators.author.identifier") @Mapping(target = "readerIdentifier", source = "destinations.reader.identifier") @Mapping(target = "messageSize", source = "msgSize") + @Mapping(target = "deliveryAttributesOrigin", source = "deliveryAttributes.origin") + @Mapping(target = "deliveryAttributesDelivery", source = "deliveryAttributes.delivery") XtaMessageMetaData mapXtaMessageMetaData(MessageMetaData messageMetaData); @Named("mapBusinessScenarioCode") @@ -83,7 +85,7 @@ public interface ResponseMapper { XtaTransportReport mapXtaTransportReport(TransportReport transportReport); default ZonedDateTime mapZonedDateTime(XMLGregorianCalendar xmlGregorianCalendar) { - return xmlGregorianCalendar.toGregorianCalendar().toZonedDateTime(); + return xmlGregorianCalendar == null ? null : xmlGregorianCalendar.toGregorianCalendar().toZonedDateTime(); } default XtaMessageStatus mapXtaMessageStatus(MessageStatusType statusType) { diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java index 9e065b0..6b38b6c 100644 --- a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java +++ b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java @@ -1,6 +1,7 @@ package de.ozgcloud.xta.client.model; import java.math.BigInteger; +import java.time.ZonedDateTime; import jakarta.annotation.Nullable; import jakarta.validation.Valid; @@ -26,7 +27,9 @@ import lombok.Builder; * @param messageId Unique identifier of the message. <p>The ID is generated by the server and thus not required when sending.</p> * @param authorIdentifier Identifier of the author of the message. <p>This field is required.</p> * @param readerIdentifier Identifier of the reader of the message. <p>This field is required.</p> - * @param messageSize Size of the message in bytes. <p>The size is determined by the server an thus not required when sending.</p> + * @param messageSize Size of the message in bytes. <p>The size is determined by the server and thus not required when sending.</p> + * @param deliveryAttributesOrigin Timestamp when the message was sent. <p>This field is only set for received messages and not required when sending.</p> + * @param deliveryAttributesDelivery Timestamp when the message was delivered. <p>This field is only set for received messages and not required when sending.</p> */ @Builder(toBuilder = true) public record XtaMessageMetaData( @@ -39,9 +42,8 @@ public record XtaMessageMetaData( @Nullable String messageId, @NotNull @Valid XtaIdentifier authorIdentifier, @NotNull @Valid XtaIdentifier readerIdentifier, - @Nullable @PositiveOrZero BigInteger messageSize - // TODO - // DeliveryAttributes.origin - // @Nullable ZonedDateTime deliveryAttributesOrigin; + @Nullable @PositiveOrZero BigInteger messageSize, + @Nullable ZonedDateTime deliveryAttributesOrigin, + @Nullable ZonedDateTime deliveryAttributesDelivery ) { } diff --git a/src/main/java/de/ozgcloud/xta/client/xdomea/mapper/MetadataMapper.java b/src/main/java/de/ozgcloud/xta/client/xdomea/mapper/MetadataMapper.java index 5d02ec8..fcd2547 100644 --- a/src/main/java/de/ozgcloud/xta/client/xdomea/mapper/MetadataMapper.java +++ b/src/main/java/de/ozgcloud/xta/client/xdomea/mapper/MetadataMapper.java @@ -45,6 +45,8 @@ public interface MetadataMapper { @Mapping(target = "readerIdentifier", source = "readerIdSuffix", qualifiedByName = "mapReaderIdentifier") @Mapping(target = "messageId", ignore = true) @Mapping(target = "messageSize", ignore = true) + @Mapping(target = "deliveryAttributesOrigin", ignore = true) + @Mapping(target = "deliveryAttributesDelivery", ignore = true) XtaMessageMetaData mapXtaMessageMetadata(XdomeaXmlValues xdomeaXmlValues); @Named("getServiceByMessageTypeCode") diff --git a/src/test/java/de/ozgcloud/xta/client/factory/MessageMetaDataTestFactory.java b/src/test/java/de/ozgcloud/xta/client/factory/MessageMetaDataTestFactory.java index b3c069d..71a9057 100644 --- a/src/test/java/de/ozgcloud/xta/client/factory/MessageMetaDataTestFactory.java +++ b/src/test/java/de/ozgcloud/xta/client/factory/MessageMetaDataTestFactory.java @@ -2,7 +2,14 @@ package de.ozgcloud.xta.client.factory; import static de.ozgcloud.xta.client.mapper.RequestMapper.*; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; import java.math.BigInteger; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.GregorianCalendar; + +import lombok.SneakyThrows; import de.ozgcloud.xta.client.gen.v3.eu.osci.ws.x2014.x10.transport.MessageMetaData; import de.ozgcloud.xta.client.gen.v3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType; @@ -39,6 +46,9 @@ public class MessageMetaDataTestFactory { public static final BigInteger MESSAGE_SIZE = BigInteger.valueOf(1234); + public static final ZonedDateTime DELIVERY_ATTRIBUTES_ORIGIN_TIME = ZonedDateTime.of(2021, 1, 1, 12, 0, 0, 0, ZoneId.of("UTC")); + public static final ZonedDateTime DELIVERY_ATTRIBUTES_DELIVERY_TIME = ZonedDateTime.of(2021, 1, 1, 12, 5, 0, 0, ZoneId.of("UTC")); + public static MessageMetaData create() { return createWithDefined(true); } @@ -48,6 +58,18 @@ public class MessageMetaDataTestFactory { } + @SneakyThrows + public static MessageMetaData createWithDeliveryAttributes() { + final XMLGregorianCalendar deliveryAttributesOrigin = DatatypeFactory.newInstance() + .newXMLGregorianCalendar(GregorianCalendar.from(DELIVERY_ATTRIBUTES_ORIGIN_TIME)); + final XMLGregorianCalendar deliveryAttributesDelivery = DatatypeFactory.newInstance() + .newXMLGregorianCalendar(GregorianCalendar.from(DELIVERY_ATTRIBUTES_DELIVERY_TIME)); + var messageMetaData = createWithDefined(true); + messageMetaData.getDeliveryAttributes().setOrigin(deliveryAttributesOrigin); + messageMetaData.getDeliveryAttributes().setDelivery(deliveryAttributesDelivery); + return messageMetaData; + } + public static MessageMetaData create(String messageId, String messageType, BigInteger messageSize, boolean businessScenarioDefined) { var messageMetaData = new MessageMetaData(); diff --git a/src/test/java/de/ozgcloud/xta/client/mapper/ResponseMapperTest.java b/src/test/java/de/ozgcloud/xta/client/mapper/ResponseMapperTest.java index 9659845..2f04007 100644 --- a/src/test/java/de/ozgcloud/xta/client/mapper/ResponseMapperTest.java +++ b/src/test/java/de/ozgcloud/xta/client/mapper/ResponseMapperTest.java @@ -99,7 +99,7 @@ class ResponseMapperTest { @Nested class TestMapXtaMessageMeta { - private final MessageMetaData messageMetaData = MessageMetaDataTestFactory.create(); + private final MessageMetaData messageMetaData = MessageMetaDataTestFactory.createWithDeliveryAttributes(); @DisplayName("should map message id") @Test @@ -189,6 +189,22 @@ class ResponseMapperTest { assertThat(result.messageSize()).isEqualTo(MESSAGE_SIZE); } + @DisplayName("should map delivery attributes origin") + @Test + void shouldMapDeliveryAttributesOrigin() { + var result = doMapping(); + + assertThat(result.deliveryAttributesOrigin()).isEqualTo(DELIVERY_ATTRIBUTES_ORIGIN_TIME); + } + + @DisplayName("should map delivery attributes delivery") + @Test + void shouldMapDeliveryAttributesDelivery() { + var result = doMapping(); + + assertThat(result.deliveryAttributesDelivery()).isEqualTo(DELIVERY_ATTRIBUTES_DELIVERY_TIME); + } + private XtaMessageMetaData doMapping() { return mapper.mapXtaMessageMetaData(messageMetaData); } -- GitLab