diff --git a/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/intelliform/IntelliFormRepresentationAdapter.java b/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/intelliform/IntelliFormRepresentationAdapter.java index d96052447475590512a9ac5cd2280ebe22d0715f..8e35cb8484021177331d43eb659ebc8a81096aa5 100644 --- a/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/intelliform/IntelliFormRepresentationAdapter.java +++ b/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/intelliform/IntelliFormRepresentationAdapter.java @@ -1,3 +1,26 @@ +/* + * 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.semantik.enginebased.afm.intelliform; import java.util.LinkedHashMap; @@ -5,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Collector; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -26,6 +50,8 @@ import lombok.extern.log4j.Log4j2; @Log4j2 public class IntelliFormRepresentationAdapter { + private static final Predicate<IncomingFile> HAS_XML_CONTENT_TYPE = file -> file.getContentType().contains("xml"); + static final String INTELLIFORM_TYPENAME = "http://xmlns.cit.de/intelliform/transaction"; static final String FILE = "file"; @@ -41,8 +67,7 @@ public class IntelliFormRepresentationAdapter { "t:customer", "t:customer-id", "t:client", - "t:client-id" - ); + "t:client-id"); public static final List<String> CUSTOM_HEADER_ATTRIBUTE_NAMES = List.of( "u:saml_legacypostkorbhandle", "u:saml_givenname", @@ -54,15 +79,13 @@ public class IntelliFormRepresentationAdapter { "u:saml_postaladdress", "u:saml_postalcode", "u:saml_localityname", - ServiceKontoFactory.KEY_BAYERN_ID_TRUST_LEVEL - ); + ServiceKontoFactory.KEY_BAYERN_ID_TRUST_LEVEL); private static final Collector<Map.Entry<String, ?>, ?, Map<String, Object>> ORDERED_MAP_ENTRY_COLLECTOR = Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (u, v) -> v, - LinkedHashMap::new - ); + LinkedHashMap::new); private final XmlToJavaMapsMapper xmlToJavaMapsMapper; @@ -72,25 +95,23 @@ public class IntelliFormRepresentationAdapter { } Optional<Document> findIntelliFormXMLRepresentation(FormData formData) { - return streamXMLDocumentsFromRepresentations(formData) - .filter(document -> { - var element = document.getDocumentElement(); - var attribute = element.getAttribute("xmlns:t"); - return attribute.equals(INTELLIFORM_TYPENAME); - }) - .findFirst(); + return streamXMLDocumentsFromRepresentations(formData).filter(this::isIntelliFormDocument).findFirst(); + } + + private boolean isIntelliFormDocument(Document document) { + return document.getDocumentElement().getAttribute("xmlns:t").equals(INTELLIFORM_TYPENAME); } Stream<Document> streamXMLDocumentsFromRepresentations(FormData formData) { - return formData.getRepresentations().stream() - .filter(representation -> representation.getContentType().contains("xml")) - .flatMap(xmlRepresentation -> { - try { - return Stream.of(xmlToJavaMapsMapper.parseAsW3cDocument(xmlRepresentation.getContentStream())); - } catch (TechnicalException exception) { - return Stream.empty(); - } - }); + return formData.getRepresentations().stream().filter(HAS_XML_CONTENT_TYPE).flatMap(this::parseDocument); + } + + private Stream<Document> parseDocument(IncomingFile xmlRepresentation) { + try { + return Stream.of(xmlToJavaMapsMapper.parseAsW3cDocument(xmlRepresentation.getContentStream())); + } catch (TechnicalException exception) { + return Stream.empty(); + } } public FormData adaptByRepresentations(FormData formData) { @@ -101,11 +122,9 @@ public class IntelliFormRepresentationAdapter { .representations(formData.getRepresentations()) .attachments(formData.getAttachments()) .formData(Stream.concat( - getFormDataEntriesFromDocument(document, formData.getAttachments()), - Map.of( - HEADER_FIELD, createHeaderMap(document) - ).entrySet().stream() - ).collect(ORDERED_MAP_ENTRY_COLLECTOR)) + getFormDataEntriesFromDocument(document, formData.getAttachments()), + Map.of(HEADER_FIELD, createHeaderMap(document)).entrySet().stream()) + .collect(ORDERED_MAP_ENTRY_COLLECTOR)) .build(); } @@ -115,8 +134,7 @@ public class IntelliFormRepresentationAdapter { .map(IncomingFile::getVendorId) .collect(Collectors.toSet()); - return xmlToJavaMapsMapper.mapXmlToJavaMaps(document).entrySet() - .stream() + return xmlToJavaMapsMapper.mapXmlToJavaMaps(document).entrySet().stream() .filter(entry -> !isUploadElementWhichRefersToAttachment(entry.getValue(), attachmentVendorIds)); }