From a87c1f6adbe1e1c6811f0f7edbd21e5c1ff98ee2 Mon Sep 17 00:00:00 2001
From: Jan Zickermann <jan.zickermann@dataport.de>
Date: Tue, 22 Oct 2024 14:04:39 +0200
Subject: [PATCH] OZG-6891 KOP-2735 xdomea-message-creator: Add javadoc

---
 .../de/ozgcloud/xta/client/XtaClient.java     |  9 +++--
 .../xta/client/config/XtaClientConfig.java    |  3 ++
 .../xdomea/XdomeaXtaMessageCreator.java       | 39 +++++++++++++++++++
 .../extension/XtaMessageExampleLoader.java    |  3 +-
 .../xdomea/XdomeaXtaMessageCreatorITCase.java |  2 +-
 5 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClient.java b/src/main/java/de/ozgcloud/xta/client/XtaClient.java
index c5c7492..afe601d 100644
--- a/src/main/java/de/ozgcloud/xta/client/XtaClient.java
+++ b/src/main/java/de/ozgcloud/xta/client/XtaClient.java
@@ -84,9 +84,9 @@ public class XtaClient {
 	 * </p>
 	 *
 	 * @param processMessage The consumer to process each fetched message.
-	 * @return The transport reports for all fetched/processed messages. A message which has not been closed has an
-	 * {@link XtaMessageStatus#OPEN OPEN} status. If a message has been closed, the status is either {@link XtaMessageStatus#GREEN GREEN},
-	 * {@link XtaMessageStatus#YELLOW YELLOW} or {@link XtaMessageStatus#RED RED}.
+	 * @return The transport reports for all fetched/processed messages. A message which has not been closed has an {@link XtaMessageStatus#OPEN OPEN}
+	 * status. If a message has been closed, the status is either {@link XtaMessageStatus#GREEN GREEN}, {@link XtaMessageStatus#YELLOW YELLOW} or
+	 * {@link XtaMessageStatus#RED RED}.
 	 * @throws XtaClientException If a technical problem occurs while fetching messages.
 	 */
 	public List<XtaTransportReport> fetchMessages(@NotNull Consumer<XtaMessage> processMessage) throws XtaClientException {
@@ -200,7 +200,8 @@ public class XtaClient {
 	 * reader. If both checks pass, sends the message to the reader. Finally, returns the transport report for the sent message.
 	 * </p>
 	 * <p>
-	 * <b>Note:</b> message size and id are set by the server, and thus may initially be null.
+	 * <b>Note:</b> message size and id are set by the server, and thus may initially be null. This applies to the message metadata as well as
+	 * to the message and attachment files.
 	 * </p>
 	 *
 	 * @param messageWithoutMessageId The message to send without id and size.
diff --git a/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java b/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java
index a98b2ee..ffc3e92 100644
--- a/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java
+++ b/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java
@@ -32,6 +32,9 @@ public class XtaClientConfig {
 	 * <p>
 	 * Usually, in order to use the client identifiers, an according client certificate needs to be configured.
 	 * </p>
+	 * <p>
+	 *     <b>Note:</b> The identifier type is assumed to be {@code xoev}.
+	 * </p>
 	 */
 	@Builder.Default
 	private final List<@Valid XtaIdentifier> clientIdentifiers = emptyList();
diff --git a/src/main/java/de/ozgcloud/xta/client/xdomea/XdomeaXtaMessageCreator.java b/src/main/java/de/ozgcloud/xta/client/xdomea/XdomeaXtaMessageCreator.java
index 05c1949..17fc6b5 100644
--- a/src/main/java/de/ozgcloud/xta/client/xdomea/XdomeaXtaMessageCreator.java
+++ b/src/main/java/de/ozgcloud/xta/client/xdomea/XdomeaXtaMessageCreator.java
@@ -22,6 +22,30 @@ import de.ozgcloud.xta.client.xdomea.reader.ZipFileEntryReader;
 import lombok.Builder;
 import lombok.RequiredArgsConstructor;
 
+/**
+ * Creator of {@link XtaMessage}s for Xdomea.
+ *
+ * <p>
+ *     The XdomeaXtaMessageCreator is used to create an {@link XtaMessage} for an Xdomea zip file.
+ *     The resulting message may be send via the {@link de.ozgcloud.xta.client.XtaClient XtaClient}.
+ * </p>
+ *
+ *
+ * Example:
+ * <pre>
+ * var xtaMessageCreator = XdomeaXtaMessageCreator.createInstance();
+ * var zipFileName = "d5be7468-e620-4126-a40e-61a7f9b46345_Geschaeftsgang.Geschaeftsgang.0201.zip";
+ * var zipFileContentDataHandler = new DataHandler(new FileDataSource("/path/to/" + zipFileName));
+ * var xdomeaXtaFile = XtaFile.builder()
+ *   .name(zipFileName)
+ *   .content(zipFileContentDataHandler)
+ *   .contentType("application/zip")
+ *   .build();
+ * var xtaMessage = xtaMessageCreator.createMessage(xdomeaXtaFile);
+ *
+ * XtaClient.from(...).sendMessage(xtaMessage);
+ * </pre>
+ */
 @Builder
 @RequiredArgsConstructor
 public class XdomeaXtaMessageCreator {
@@ -36,6 +60,21 @@ public class XdomeaXtaMessageCreator {
 		return XdomeaXtaMessageCreatorFactory.createInstance().create();
 	}
 
+	/**
+	 * Creates an {@link XtaMessage} from the given xdomea zip file.
+	 *
+	 * <p>
+	 * The zip file has to follow the XTA/Xdomea generic transport specification.
+	 * According to the specification, only the Xdomea messages of type 0201, 0401 and 0402 are supported.
+	 * </p>
+	 *
+	 * <p>
+	 *     <small>The XTA/Xdomea generic transport specification is unofficially available as <i>"Transportfestlegungen Generischer Antragsdienst.pdf"</i>.</small>
+	 * </p>
+	 * @param xdomeaZipFile the xdomea zip file
+	 * @return the xta message with metadata derived from the xdomea zip file
+	 * @throws XtaClientException if no valid metadata could be derived from the xdomea zip file.
+	 */
 	public XtaMessage createMessage(XtaFile xdomeaZipFile) throws XtaClientException {
 		return XtaMessage.builder()
 				.metaData(deriveValidMetaData(xdomeaZipFile))
diff --git a/src/test/java/de/ozgcloud/xta/client/extension/XtaMessageExampleLoader.java b/src/test/java/de/ozgcloud/xta/client/extension/XtaMessageExampleLoader.java
index 8fa45ec..a4207e6 100644
--- a/src/test/java/de/ozgcloud/xta/client/extension/XtaMessageExampleLoader.java
+++ b/src/test/java/de/ozgcloud/xta/client/extension/XtaMessageExampleLoader.java
@@ -17,6 +17,7 @@ import java.util.function.Supplier;
 import java.util.regex.Pattern;
 
 import jakarta.activation.DataHandler;
+import jakarta.activation.FileDataSource;
 import jakarta.annotation.Nullable;
 import jakarta.mail.util.ByteArrayDataSource;
 import jakarta.validation.constraints.NotBlank;
@@ -179,7 +180,7 @@ public class XtaMessageExampleLoader {
 	}
 
 	private static DataHandler createContentDataHandler(byte[] data) {
-		return new DataHandler(new ByteArrayDataSource(data, "application/octet-stream"));
+		return new DataHandler(new FileDataSource("application/octet-stream"));
 	}
 
 	private static byte[] readBytesFromResource(String path) {
diff --git a/src/test/java/de/ozgcloud/xta/client/xdomea/XdomeaXtaMessageCreatorITCase.java b/src/test/java/de/ozgcloud/xta/client/xdomea/XdomeaXtaMessageCreatorITCase.java
index 7ff3ffd..84c3eea 100644
--- a/src/test/java/de/ozgcloud/xta/client/xdomea/XdomeaXtaMessageCreatorITCase.java
+++ b/src/test/java/de/ozgcloud/xta/client/xdomea/XdomeaXtaMessageCreatorITCase.java
@@ -22,7 +22,7 @@ class XdomeaXtaMessageCreatorITCase {
 
 	@BeforeEach
 	void setup() {
-		creator = XdomeaXtaMessageCreatorFactory.createInstance().create();
+		creator = XdomeaXtaMessageCreator.createInstance();
 	}
 
 	@DisplayName("create message")
-- 
GitLab