From 28482731e696e01a3833046fa54506b137c93672 Mon Sep 17 00:00:00 2001
From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
Date: Tue, 11 Mar 2025 16:40:40 +0100
Subject: [PATCH] clean up

---
 .../eingang/xta/XtaIncomingFilesMapper.java   | 15 ++-----
 .../ozgcloud/eingang/xta/XtaMapperHelper.java | 17 --------
 .../eingang/xta/XtaMessageMapper.java         |  7 ----
 .../de/ozgcloud/eingang/xta/XtaService.java   | 39 +++++++++++--------
 .../eingang/xta/XtaServiceConfiguration.java  |  9 ++---
 .../de/ozgcloud/eingang/xta/XtaITCase.java    |  2 +-
 .../ozgcloud/eingang/xta/XtaServiceTest.java  |  8 ++++
 7 files changed, 40 insertions(+), 57 deletions(-)

diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapper.java b/src/main/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapper.java
index 01fb3175..029bff7c 100644
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapper.java
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapper.java
@@ -23,15 +23,14 @@
 package de.ozgcloud.eingang.xta;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Stream;
 
+import de.ozgcloud.common.binaryfile.TempFileUtils;
 import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
 import jakarta.activation.DataHandler;
-import lombok.SneakyThrows;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
@@ -58,7 +57,6 @@ class XtaIncomingFilesMapper {
 		return List.of();
 	}
 
-	@SneakyThrows
 	IncomingFile toIncomingFile(XtaFile messageFile) {
 		File tmpFile = persistToFile(messageFile.content());
 		return IncomingFile.builder()
@@ -70,17 +68,12 @@ class XtaIncomingFilesMapper {
 	}
 
 	private File persistToFile(DataHandler data) {
-		try {
-			var file = File.createTempFile("xta", ".data");
-			file.deleteOnExit();
-			var out = new FileOutputStream(file);
-			data.writeTo(out);
-			out.flush();
-			out.close();
-			return file;
+		try (var inputStream = data.getInputStream()) {
+			return TempFileUtils.writeTmpFile(inputStream);
 		} catch (IOException e) {
 			throw new TechnicalException("Error writing Attachment to temp file", e);
 		}
+
 	}
 
 	Stream<IncomingFile> tryToExtractZip(IncomingFile incomingFile) {
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaMapperHelper.java b/src/main/java/de/ozgcloud/eingang/xta/XtaMapperHelper.java
index 1cbfe659..8f1c5d6d 100644
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaMapperHelper.java
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaMapperHelper.java
@@ -45,17 +45,6 @@ public class XtaMapperHelper {
         return null;
     }
 
-    public static String getFormEngineName(XtaFormMetaData metaData) {
-        if (StringUtils.equals(metaData.getMessageType(), XtaService.XDOMEA_0201_MESSAGE_TYPE)) {
-            return "XDOMEA";
-        }
-
-        if (StringUtils.startsWith(metaData.getMessageType(), XtaService.FIM_MESSAGE_TYPE_PREFIX)) {
-            return "FIM";
-        }
-        return null;
-    }
-
     public static ZonedDateTime getCreatedAt(de.ozgcloud.xta.client.model.XtaMessageMetaData metaData) {
         if (metaData.deliveryAttributesOrigin() != null) {
             return metaData.deliveryAttributesOrigin();
@@ -63,10 +52,4 @@ public class XtaMapperHelper {
         return ZonedDateTime.now();
     }
 
-    public static ZonedDateTime getCreatedAt(XtaFormMetaData metaData) {
-        if (metaData.getOrigin() != null) {
-            return metaData.getOrigin();
-        }
-        return ZonedDateTime.now();
-    }
 }
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java b/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java
index 30f1067d..e96525d6 100644
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java
@@ -79,15 +79,8 @@ interface XtaMessageMapper {
 		return XtaMessageId.from(id);
 	}
 
-	default String fromId(XtaMessageId id) {
-		return id.toString();
-	}
-
 	default Optional<FormMetaData> mapMetaData(XtaMessageMetaData value) {
 		return Optional.ofNullable(formMetaDataFromMetaData(value));
 	}
 
-	default Optional<FormMetaData> mapMetaData(XtaFormMetaData value) {
-		return Optional.ofNullable(value);
-	}
 }
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaService.java b/src/main/java/de/ozgcloud/eingang/xta/XtaService.java
index 4c21779c..b395e028 100644
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaService.java
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaService.java
@@ -46,7 +46,10 @@ import de.ozgcloud.eingang.semantik.SemantikAdapter;
 import de.ozgcloud.eingang.xdomea.XdomeaMessageDataMapper;
 import de.ozgcloud.xta.client.XtaClient;
 import de.ozgcloud.xta.client.model.XtaFile;
+import de.ozgcloud.xta.client.model.XtaMessage;
+import de.ozgcloud.xta.client.model.XtaMessageMetaData;
 import de.ozgcloud.xta.client.model.XtaMessageStatus;
+import de.ozgcloud.xta.client.model.XtaTransportReport;
 
 @Service
 @Log4j2
@@ -74,25 +77,15 @@ class XtaService {
 	@SneakyThrows
 	public void fetchMessages() {
 		var transportReports = xtaClient.fetchMessages(this::processMessage);
-		for (var transportReport : transportReports) {
-			if (transportReport.status() == XtaMessageStatus.GREEN) {
-				LOG.info("Fetched XTA message: {}", transportReport.metaData().messageId());
-			} else {
-				LOG.warn(
-						"Failed to fetch XTA message with XTA transport report status {}: {}",
-						transportReport.status(),
-						transportReport.metaData().messageId()
-				);
-			}
-		}
+		logTransportReports(transportReports);
 	}
 
-	void processMessage(de.ozgcloud.xta.client.model.XtaMessage xtaMessage) {
+	void processMessage(XtaMessage xtaMessage) {
 		Optional<FormData> formData = getFormDataIfNoRuntimeException(xtaMessage);
 		formData.ifPresent(this::processSemantik);
 	}
 
-	Optional<FormData> getFormDataIfNoRuntimeException(@NonNull de.ozgcloud.xta.client.model.XtaMessage xtaMessage) {
+	Optional<FormData> getFormDataIfNoRuntimeException(@NonNull XtaMessage xtaMessage) {
 		try {
 			return Optional.of(getFormData(xtaMessage));
 		} catch (RuntimeException exception) {
@@ -110,7 +103,7 @@ class XtaService {
 		}
 	}
 
-	FormData getFormData(de.ozgcloud.xta.client.model.XtaMessage xtaMessage) {
+	FormData getFormData(XtaMessage xtaMessage) {
 		var metaData = xtaMessage.metaData();
 		var incomingFiles = xtaIncomingFilesMapper.toIncomingFiles(xtaMessage.messageFile());
 		var representationsAttachmentsPair = getRepresentationsAttachmentsPair(metaData, incomingFiles);
@@ -121,7 +114,7 @@ class XtaService {
 		return addRepresentations(formData, xtaMessage.messageFile().name());
 	}
 
-	RepresentationsAttachmentsPair getRepresentationsAttachmentsPair(de.ozgcloud.xta.client.model.XtaMessageMetaData metaData, List<IncomingFile> incomingFiles) {
+	RepresentationsAttachmentsPair getRepresentationsAttachmentsPair(XtaMessageMetaData metaData, List<IncomingFile> incomingFiles) {
 		if (isXDomeaMessageType(metaData.messageTypeCode())) {
 			return xdomeaMessageDataMapper.mapIncomingFilesToRepresentationsAttachmentsPair(incomingFiles);
 		}
@@ -132,7 +125,7 @@ class XtaService {
 		throw new TechnicalException("Unexpected XTA message type: %s".formatted(metaData.messageTypeCode()));
 	}
 
-	FormData addAttachments(de.ozgcloud.xta.client.model.XtaMessage msg, FormData inFormData) {
+	FormData addAttachments(XtaMessage msg, FormData inFormData) {
 		var attachments = buildAttachmentsInFiles(msg.attachmentFiles());
 		if (CollectionUtils.isNotEmpty(attachments)) {
 			return inFormData.toBuilder()
@@ -175,4 +168,18 @@ class XtaService {
 				.attachments(Collections.emptyList())
 				.build();
 	}
+
+	void logTransportReports(List<XtaTransportReport> transportReports) {
+		for (var transportReport : transportReports) {
+			if (transportReport.status() == XtaMessageStatus.GREEN) {
+				LOG.info("Fetched XTA message: {}", transportReport.metaData().messageId());
+			} else {
+				LOG.warn(
+						"Failed to fetch XTA message with XTA transport report status {}: {}",
+						transportReport.status(),
+						transportReport.metaData().messageId()
+				);
+			}
+		}
+	}
 }
diff --git a/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java b/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java
index a3c67d6c..078d7c14 100644
--- a/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java
+++ b/src/main/java/de/ozgcloud/eingang/xta/XtaServiceConfiguration.java
@@ -23,10 +23,10 @@
  */
 package de.ozgcloud.eingang.xta;
 
+import java.io.IOException;
 import java.util.List;
 
 import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.annotation.Bean;
@@ -35,6 +35,7 @@ import org.springframework.context.annotation.Configuration;
 import de.ozgcloud.xta.client.XtaClient;
 import de.ozgcloud.xta.client.XtaClientFactory;
 import de.ozgcloud.xta.client.config.XtaClientConfig;
+import de.ozgcloud.xta.client.exception.XtaClientInitializationException;
 import de.ozgcloud.xta.client.model.XtaIdentifier;
 
 @Log4j2
@@ -51,15 +52,13 @@ public class XtaServiceConfiguration {
 	private final XtaProperties properties;
 
 	@Bean
-	@SneakyThrows
-	XtaClient xtaClient() {
+	XtaClient xtaClient() throws XtaClientInitializationException, IOException {
 		XtaClientConfig xtaClientConfig = createClientConfig();
 		XtaClientFactory clientFactory = XtaClientFactory.from(xtaClientConfig);
 		return clientFactory.create();
 	}
 
-	@SneakyThrows
-	XtaClientConfig createClientConfig() {
+	XtaClientConfig createClientConfig() throws IOException {
 
 		var clientCertKeyStore = XtaClientConfig.KeyStore.builder()
 				.content(properties.getKeyStore().getFile().getContentAsByteArray())
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java b/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
index be203512..446fa54f 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
@@ -258,7 +258,7 @@ class XtaITCase {
 		XtaMessage xtaMessage = XtaResponseTestFactory.createGetMessageResponse(zipFileName);
 		when(xtaClient.fetchMessages(any())).thenAnswer(invocation -> {
 			@SuppressWarnings("unchecked")
-			var processMessage = (Consumer<XtaMessage>) invocation.getArguments()[0];
+			var processMessage = (Consumer<XtaMessage>) invocation.getArgument(0);
 			processMessage.accept(xtaMessage);
 			return List.of(XtaTransportReportTestFactory.create());
 		});
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
index a6283344..7e9bbf9f 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
@@ -99,6 +99,13 @@ class XtaServiceTest {
 
 			verify(xtaClient).fetchMessages(any());
 		}
+
+		@Test
+		void shouldCallLogTransportReports() {
+			service.fetchMessages();
+
+			verify(service).logTransportReports(any());
+		}
 	}
 
 	@DisplayName("process message")
@@ -382,4 +389,5 @@ class XtaServiceTest {
 			verify(semantikAdapter).processFormData(any());
 		}
 	}
+
 }
-- 
GitLab