From c4325a714654f702461938b8d6bee3d25c3ba2bf Mon Sep 17 00:00:00 2001
From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
Date: Tue, 25 Feb 2025 17:14:43 +0100
Subject: [PATCH] KOP-2694 KOP-3010 use xta-client-lib 0.2.0

---
 pom.xml                                       |  2 +-
 .../eingang/xta/XtaMessageMapper.java         |  5 +-
 .../eingang/xta/XtaMessageMetaDataMapper.java | 59 ------------------
 .../ozgcloud/eingang/xta/XtaProperties.java   | 19 ------
 .../eingang/xta/XtaServiceConfiguration.java  |  5 +-
 src/main/resources/application.yml            |  4 --
 .../eingang/xta/XtaMessageMapperTest.java     | 24 +++++++
 .../xta/XtaMessageMetaDataFactory.java        |  4 +-
 .../xta/XtaMessageMetaDataMapperTest.java     | 62 -------------------
 ...aMessageMetaDatasAndHeaderTestFactory.java | 44 -------------
 .../eingang/xta/XtaPropertiesTestFactory.java |  9 +--
 .../xta/XtaServiceConfigurationTest.java      | 11 ++--
 .../ozgcloud/eingang/xta/XtaServiceTest.java  | 54 +++++-----------
 13 files changed, 51 insertions(+), 251 deletions(-)
 delete mode 100644 src/main/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapper.java
 delete mode 100644 src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapperTest.java
 delete mode 100644 src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDatasAndHeaderTestFactory.java

diff --git a/pom.xml b/pom.xml
index 74d7b28f..2b1b32b7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,7 +45,7 @@
 		<eingang-manager.version>2.17.0</eingang-manager.version>
 		<intelliform-semantik.version>2.17.0</intelliform-semantik.version>
 		<dfoerdermittel-semantik.version>2.17.0</dfoerdermittel-semantik.version>
-		<xta-client-lib.version>0.1.0</xta-client-lib.version>
+		<xta-client-lib.version>0.2.0</xta-client-lib.version>
 
 		<xmlschema.version>2.3.0</xmlschema.version>
 
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java b/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java
index 7b12d480..0f15765c 100644
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java
@@ -67,9 +67,8 @@ interface XtaMessageMapper {
 	@Mapping(target = "messageTypeListVersion", ignore = true)
 	@Mapping(target = "metaDataFile", ignore = true)
 	@Mapping(target = "service", source = "service")
-	// todo add origin and delivery in xta-client-lib
-	@Mapping(target = "origin", ignore = true)
-	@Mapping(target = "delivery", ignore = true)
+	@Mapping(target = "origin", source = "deliveryAttributesOrigin")
+	@Mapping(target = "delivery", source = "deliveryAttributesDelivery")
 	@Mapping(target = "messageId", source = "messageId")
 	@Mapping(target = "messageType", source = "messageTypeCode")
 	@Mapping(target = "xtaIdentifier", source = "readerIdentifier.value")
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapper.java b/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapper.java
deleted file mode 100644
index 7727fa85..00000000
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapper.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.eingang.xta;
-
-import java.util.stream.Stream;
-
-import jakarta.xml.bind.JAXBElement;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-
-import eu.osci.ws._2008._05.transport.MsgStatusListType;
-import eu.osci.ws._2014._10.transport.MessageMetaData;
-
-@Mapper
-interface XtaMessageMetaDataMapper {
-
-	@Mapping(target = "messageTypeListVersion", ignore = true)
-	@Mapping(target = "metaDataFile", ignore = true)
-	@Mapping(target = "service", ignore = true)
-	@Mapping(target = "origin", source = "deliveryAttributes.origin")
-	@Mapping(target = "delivery", source = "deliveryAttributes.delivery")
-	@Mapping(target = "messageId", source = "msgIdentification.messageID.value")
-	@Mapping(target = "messageType", source = "qualifier.messageType.code")
-	@Mapping(target = "xtaIdentifier", source = "destinations.reader.identifier.value")
-	XtaFormMetaData fromSoap(MessageMetaData metaData);
-
-	default XtaMessageId fromString(String id) {
-		return XtaMessageId.from(id);
-	}
-
-	@Mapping(target = "moreMessagesAvailable", constant = "false")
-	XtaMessageMetaDatasAndHeader msgStatusListFromSoap(MsgStatusListTypeAndHeaderResponse statusList);
-
-	default Stream<XtaFormMetaData> map(JAXBElement<MsgStatusListType> msgStatusListResponse) {
-		return msgStatusListResponse.getValue().getMessageMetaData().stream().map(this::fromSoap);
-	}
-}
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java b/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java
index b16fb0d0..cbceb433 100644
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java
@@ -24,7 +24,6 @@
 package de.ozgcloud.eingang.xta;
 
 import java.math.BigInteger;
-import java.net.URI;
 import java.util.List;
 
 import jakarta.validation.constraints.NotEmpty;
@@ -53,7 +52,6 @@ class XtaProperties {
 	private BigInteger maxListElements;
 
 	private KeyStore keyStore;
-	private Actions actions;
 	@NotEmpty
 	private List<String> identifiers;
 }
@@ -89,20 +87,3 @@ class KeyStore {
 	@NotEmpty
 	private char[] password;
 }
-
-@Validated
-@ToString
-@Setter
-@Getter
-@Configuration
-@ConfigurationProperties(prefix = Actions.PROPERTIES_PREFIX)
-class Actions {
-	static final String PROPERTIES_PREFIX = XtaProperties.PROPERTIES_PREFIX + ".actions";
-
-	@NotNull
-	private URI statusList;
-	@NotNull
-	private URI fetchRequest;
-	@NotNull
-	private URI closeRequest;
-}
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java b/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java
index 0719b32f..20b0e3ef 100644
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java
@@ -25,6 +25,7 @@ package de.ozgcloud.eingang.xta;
 
 import java.util.List;
 
+import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
@@ -39,6 +40,7 @@ import de.ozgcloud.xta.client.model.XtaIdentifier;
 
 @Log4j2
 @Configuration
+@RequiredArgsConstructor
 public class XtaServiceConfiguration {
 
 	static final String URI_TEMPLATE = "https://%s/MB_XTA-WS/XTA210";
@@ -47,8 +49,7 @@ public class XtaServiceConfiguration {
 
 	static final String FIM_MESSAGE_TYPE_PREFIX = "fim.";
 
-	@Autowired
-	private XtaProperties properties;
+	private final XtaProperties properties;
 
 	@Bean
 	@SneakyThrows
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 32946db6..e8fbff21 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -9,10 +9,6 @@ ozgcloud:
     max-list-elements: 100
     keystore:
       type: PKCS12
-    actions:
-      status-list: "http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxStatusListRequest"
-      fetch-request: "http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxFetchRequest"
-      close-request: "http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxCloseRequest"
   eingang:
     fim:
       schemeLocations:
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java
index 672b68c7..7dd985e3 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java
@@ -125,6 +125,30 @@ class XtaMessageMapperTest {
 		}
 	}
 
+	@Nested
+	class TestFormMetaDataFromMetaData {
+		private XtaMessageMetaData metaData;
+
+		@BeforeEach
+		void before() {
+			metaData = XtaMessageMetaDataTestFactory.create();
+		}
+
+		@Test
+		void shouldSetOrigin() {
+			var formMetaData = mapper.formMetaDataFromMetaData(metaData);
+
+			assertThat(formMetaData.getOrigin()).isEqualTo(metaData.deliveryAttributesOrigin());
+		}
+
+		@Test
+		void shouldSetDelivery() {
+			var formMetaData = mapper.formMetaDataFromMetaData(metaData);
+
+			assertThat(formMetaData.getDelivery()).isEqualTo(metaData.deliveryAttributesDelivery());
+		}
+	}
+
 	@Nested
 	class TestToFimFormData {
 
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataFactory.java b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataFactory.java
index 32383625..cbfbabf8 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataFactory.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataFactory.java
@@ -27,7 +27,6 @@ import static de.ozgcloud.eingang.xta.XtaMessageTestFactory.*;
 
 import java.time.ZonedDateTime;
 
-import de.ozgcloud.eingang.common.formdata.FormMetaDataTestFactory;
 import de.ozgcloud.xta.client.model.XtaIdentifier;
 import de.ozgcloud.xta.client.model.XtaMessageMetaData;
 
@@ -37,7 +36,6 @@ class XtaMessageMetaDataTestFactory {
 	static final String FIM_MESSAGE_TYPE = "fim.S17000652.17000652001004";
 	static final ZonedDateTime ORIGIN = ZonedDateTime.parse("2022-10-29T15:45:52.4942149+02:00");
 	static final String SERVICE = "urn:fim:Versammlungsanzeige:1.4";
-	static final String MESSAGE_TYPE_LIST_VERSION = "1.0";
 	static final XtaIdentifier READER_IDENTIFIER = XtaIdentifier.builder()
 			.value("vbe:010550120100").build();
 
@@ -49,7 +47,7 @@ class XtaMessageMetaDataTestFactory {
 		return XtaMessageMetaData.builder()
 				.messageId(MESSAGE_ID.toString())
 				.messageTypeCode(MESSAGE_TYPE)
-				// .origin(ORIGIN)  TODO add in xta-client-lib
+				.deliveryAttributesOrigin(ORIGIN)
 				.readerIdentifier(READER_IDENTIFIER)
 				.service(SERVICE);
 	}
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapperTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapperTest.java
deleted file mode 100644
index 3857a563..00000000
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDataMapperTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.eingang.xta;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-import org.mockito.Spy;
-
-class XtaMessageMetaDataMapperTest {
-
-	@Spy
-	private final XtaMessageMetaDataMapper mapper = Mappers.getMapper(XtaMessageMetaDataMapper.class);
-
-	@DisplayName("msg status list from soap")
-	@Nested
-	class TestMsgStatusListFromSoap {
-
-		@Test
-		void shouldMap() {
-			var response = MsgStatusListTypeAndHeaderResponseTestFactory.create();
-
-			var result = mapper.msgStatusListFromSoap(response);
-
-			assertThat(result).isNotNull();
-		}
-
-		@DisplayName("should set moreMessagesAvailable to false")
-		@Test
-		void shouldSetMoreMessagesAvailableToFalse() {
-			var response = MsgStatusListTypeAndHeaderResponseTestFactory.create();
-
-			var result = mapper.msgStatusListFromSoap(response);
-
-			assertThat(result.isMoreMessagesAvailable()).isFalse();
-		}
-	}
-}
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDatasAndHeaderTestFactory.java b/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDatasAndHeaderTestFactory.java
deleted file mode 100644
index 2e97f03b..00000000
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMetaDatasAndHeaderTestFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.eingang.xta;
-
-import java.util.UUID;
-import java.util.stream.Stream;
-
-class XtaMessageMetaDatasAndHeaderTestFactory {
-
-	public static final String MSG_BOX_REQUEST_ID = UUID.randomUUID().toString();
-
-	public static final XtaFormMetaData MESSAGE1 = XtaFormMetaDataTestFactory.create();
-
-	public static XtaMessageMetaDatasAndHeader create() {
-		return createBuilder().build();
-	}
-
-	public static XtaMessageMetaDatasAndHeader.XtaMessageMetaDatasAndHeaderBuilder createBuilder() {
-		return XtaMessageMetaDatasAndHeader.builder()
-				.msgBoxRequestID(MSG_BOX_REQUEST_ID)
-				.messages(Stream.of(MESSAGE1));
-	}
-}
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaPropertiesTestFactory.java b/src/test/java/de/ozgcloud/eingang/xta/XtaPropertiesTestFactory.java
index 4d4a3b7b..2aa7a01e 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaPropertiesTestFactory.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaPropertiesTestFactory.java
@@ -23,24 +23,17 @@
  */
 package de.ozgcloud.eingang.xta;
 
-import java.net.URI;
-
 import lombok.SneakyThrows;
 
 class XtaPropertiesTestFactory {
 
 	private static final String SERVER_PROTOCOL = "https";
-	private static final String SERVER_ADDRESS = "xta-adapter-port-forward-service.ssh-port-forward.svc.cluster.local";
+	static final String SERVER_ADDRESS = "xta-adapter-port-forward-service.ssh-port-forward.svc.cluster.local";
 
 	@SneakyThrows
 	static XtaProperties create() {
 		XtaProperties properties = new XtaProperties();
 
-		Actions actions = new Actions();
-		properties.setActions(actions);
-		actions.setFetchRequest(new URI("http://tempuri.local/fetch"));
-		actions.setStatusList(new URI("http://tempuri.lcoal/statusList"));
-
 		Server server = new Server();
 		properties.setServer(server);
 		server.setProtocol(SERVER_PROTOCOL);
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceConfigurationTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceConfigurationTest.java
index 012411dd..cf267960 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceConfigurationTest.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceConfigurationTest.java
@@ -28,21 +28,18 @@ import static org.assertj.core.api.Assertions.*;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
 import org.mockito.Spy;
 
 class XtaServiceConfigurationTest {
 
-	@Spy
-	@InjectMocks
-	XtaServiceConfiguration configuration;
-
-	@Mock
 	XtaProperties properties = XtaPropertiesTestFactory.create();
 
+	@Spy
+	XtaServiceConfiguration configuration = new XtaServiceConfiguration(properties);
+
 	@Test
 	void testBuildServerAddressUri() {
+		assertThat(properties.getServer().getAddress()).isEqualTo(XtaPropertiesTestFactory.SERVER_ADDRESS);
 
 		String serverBaseUrl = configuration.getBaseUrl();
 
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
index 77119be7..8e138936 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
@@ -31,7 +31,6 @@ import static org.mockito.Mockito.*;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Stream;
 
 import lombok.SneakyThrows;
 import org.junit.jupiter.api.BeforeEach;
@@ -87,46 +86,20 @@ class XtaServiceTest {
 
 		private final XtaTransportReport transportReport = XtaTransportReportFactory.create();
 
-		@DisplayName("with one message")
-		@Nested
-		class TestWithOneMessage {
-			@BeforeEach
-			@SneakyThrows
-			void setup() {
-				doReturn(Stream.of(transportReport)).when(xtaClient).fetchMessages(any());
-			}
-
-			@Test
-			@SneakyThrows
-			void shouldCallXtaClient() {
-				service.fetchMessages();
-
-				verify(xtaClient).fetchMessages(service::processMessage);
-			}
+		@BeforeEach
+		@SneakyThrows
+		void setup() {
+			doReturn(List.of(transportReport)).when(xtaClient).fetchMessages(any());
 		}
 
-		@DisplayName("with multiple messages")
-		@Nested
-		class TestWithMultipleMessages {
-			private final XtaTransportReport transportReport2 = XtaTransportReportFactory.create();
-			private final XtaTransportReport transportReport3 = XtaTransportReportFactory.create();
-
-			@BeforeEach
-			@SneakyThrows
-			void setup() {
-				doReturn(Stream.of(transportReport, transportReport2, transportReport3)).when(xtaClient).fetchMessages(any());
-			}
-
-			@DisplayName("should return stream of messages")
-			@Test
-			@SneakyThrows
-			void shouldReturnStreamOfMessages() {
-				service.fetchMessages();
+		@Test
+		@SneakyThrows
+		void shouldCallXtaClient() {
+			service.fetchMessages();
 
-				verify(xtaClient, calls(3)).fetchMessages(service::processMessage);
-			}
+			// Can't test for passing the correct method when service is wrapped in a spy
+			verify(xtaClient).fetchMessages(any());
 		}
-
 	}
 
 	@DisplayName("process message")
@@ -165,13 +138,16 @@ class XtaServiceTest {
 	@Nested
 	class TestGetFormDataIfNoRuntimeException {
 
-		// BeforeEach from factory instead of Mock
-		@Mock
 		XtaMessage message;
 
 		@Mock
 		FormData formData;
 
+		@BeforeEach
+		void before() {
+			message = XtaMessageTestFactory.create();
+		}
+
 		@DisplayName("should call get formdata")
 		@Test
 		void shouldCallGetFormdata() {
-- 
GitLab