From 7c16fed9e13a58df863d3c39e789d7a1d96c79a0 Mon Sep 17 00:00:00 2001
From: OZG-Cloud Team <noreply@ozg-sh.de>
Date: Thu, 11 Jul 2024 11:35:29 +0200
Subject: [PATCH] OZG-5808 Xdomea: Simplify xpath expression for xmlcode

---
 .../eingang/xdomea/XdomeaXMLValueReader.java  | 37 +++----------------
 1 file changed, 6 insertions(+), 31 deletions(-)

diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReader.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReader.java
index 6c816be7..c45f6823 100644
--- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReader.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaXMLValueReader.java
@@ -22,28 +22,15 @@ import de.ozgcloud.eingang.common.formdata.IncomingFile;
 public class XdomeaXMLValueReader {
 
 	private static final String DATEINAME_NODE_QUERY_STRING = "//Hauptobjekt//Dateiname";
-	private static final XPathExpression DATEINAME_NODE_QUERY = compileXPathExpression(DATEINAME_NODE_QUERY_STRING);
-
-	// Query für XML-Dateien in Anlagen
-	// Siehe auch https://www.xrepository.de/details/urn:xoev-de:xdomea:kosit:standard:xdomea
-	// und https://www.xrepository.de/details/urn:xoev-de:xdomea:codeliste:dateiformat
-	public static final String ANLAGE_NODE_QUERY_DFOERDER = "//Anlage//Format/Name[@listURI='urn:xoev-de:xdomea:codeliste:dateiformat']/code[.='030']/../..//Dateiname";
-	public static final String ANLAGE_NODE_QUERY_AFM = "//Anlage//Format/Name[substring(., 1, 3)='030']/..//Dateiname";
-	public static final String ANLAGE_NODE_QUERY_STRING = ANLAGE_NODE_QUERY_DFOERDER + " | " + ANLAGE_NODE_QUERY_AFM;
-	private static final XPathExpression ANLAGE_NODE_QUERY = compileXPathExpression(ANLAGE_NODE_QUERY_STRING);
+	// Interpret XML-Attachments as representations
+	// XML filetype code: 030 (see https://www.xrepository.de/details/urn:xoev-de:xdomea:codeliste:dateiformat)
+	private static final String DATEINAME_NODE_FOR_XML_ANHANG_QUERY_STRING = "//Anlage//Format/Name[contains(., '030')]/..//Dateiname";
+	private static final XPathExpression DATEINAME_NODE_QUERY = compileXPathExpression(
+			DATEINAME_NODE_QUERY_STRING + "|" + DATEINAME_NODE_FOR_XML_ANHANG_QUERY_STRING);
 
 	public List<String> readRepresentationFileNames(IncomingFile xdomeaXMLFile) {
 		var parsedXML = XMLHelper.parseDocument(xdomeaXMLFile).getDocumentElement();
-		return Stream.concat(
-				getTextsFromNodes(
-					queryDateinameNodeList(
-							parsedXML
-				)),
-				getTextsFromNodes(
-					queryAnlageNodeList(
-							parsedXML
-				))
-		).toList();
+		return getTextsFromNodes(queryDateinameNodeList(parsedXML)).toList();
 	}
 
 	private NodeList queryDateinameNodeList(Element contextElement) {
@@ -58,18 +45,6 @@ public class XdomeaXMLValueReader {
 		}
 	}
 
-	private NodeList queryAnlageNodeList(Element contextElement) {
-		try {
-			return (NodeList) ANLAGE_NODE_QUERY
-					.evaluate(
-							contextElement,
-							XPathConstants.NODESET
-					);
-		} catch (XPathExpressionException e) {
-			throw new TechnicalException("Failed to execute xpath search!", e);
-		}
-	}
-
 	private Stream<String> getTextsFromNodes(NodeList nodeList) {
 		return streamNodeList(nodeList)
 				.map(Node::getTextContent)
-- 
GitLab