Skip to content
Snippets Groups Projects
Commit 71da062f authored by Lukas Malte Monnerjahn's avatar Lukas Malte Monnerjahn
Browse files

OZG-6735 fim metadata

Übernommen aus eingang-manager Repo
parent 7034df38
No related branches found
No related tags found
1 merge request!1OZG-6735 fim metadata
Pipeline #1527 passed
/*
* 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; package de.ozgcloud.eingang.semantik.enginebased.afm.intelliform;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
...@@ -5,6 +28,7 @@ import java.util.List; ...@@ -5,6 +28,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collector; import java.util.stream.Collector;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
...@@ -26,6 +50,8 @@ import lombok.extern.log4j.Log4j2; ...@@ -26,6 +50,8 @@ import lombok.extern.log4j.Log4j2;
@Log4j2 @Log4j2
public class IntelliFormRepresentationAdapter { 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 INTELLIFORM_TYPENAME = "http://xmlns.cit.de/intelliform/transaction";
static final String FILE = "file"; static final String FILE = "file";
...@@ -41,8 +67,7 @@ public class IntelliFormRepresentationAdapter { ...@@ -41,8 +67,7 @@ public class IntelliFormRepresentationAdapter {
"t:customer", "t:customer",
"t:customer-id", "t:customer-id",
"t:client", "t:client",
"t:client-id" "t:client-id");
);
public static final List<String> CUSTOM_HEADER_ATTRIBUTE_NAMES = List.of( public static final List<String> CUSTOM_HEADER_ATTRIBUTE_NAMES = List.of(
"u:saml_legacypostkorbhandle", "u:saml_legacypostkorbhandle",
"u:saml_givenname", "u:saml_givenname",
...@@ -54,15 +79,13 @@ public class IntelliFormRepresentationAdapter { ...@@ -54,15 +79,13 @@ public class IntelliFormRepresentationAdapter {
"u:saml_postaladdress", "u:saml_postaladdress",
"u:saml_postalcode", "u:saml_postalcode",
"u:saml_localityname", "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( private static final Collector<Map.Entry<String, ?>, ?, Map<String, Object>> ORDERED_MAP_ENTRY_COLLECTOR = Collectors.toMap(
Map.Entry::getKey, Map.Entry::getKey,
Map.Entry::getValue, Map.Entry::getValue,
(u, v) -> v, (u, v) -> v,
LinkedHashMap::new LinkedHashMap::new);
);
private final XmlToJavaMapsMapper xmlToJavaMapsMapper; private final XmlToJavaMapsMapper xmlToJavaMapsMapper;
...@@ -72,25 +95,23 @@ public class IntelliFormRepresentationAdapter { ...@@ -72,25 +95,23 @@ public class IntelliFormRepresentationAdapter {
} }
Optional<Document> findIntelliFormXMLRepresentation(FormData formData) { Optional<Document> findIntelliFormXMLRepresentation(FormData formData) {
return streamXMLDocumentsFromRepresentations(formData) return streamXMLDocumentsFromRepresentations(formData).filter(this::isIntelliFormDocument).findFirst();
.filter(document -> { }
var element = document.getDocumentElement();
var attribute = element.getAttribute("xmlns:t"); private boolean isIntelliFormDocument(Document document) {
return attribute.equals(INTELLIFORM_TYPENAME); return document.getDocumentElement().getAttribute("xmlns:t").equals(INTELLIFORM_TYPENAME);
})
.findFirst();
} }
Stream<Document> streamXMLDocumentsFromRepresentations(FormData formData) { Stream<Document> streamXMLDocumentsFromRepresentations(FormData formData) {
return formData.getRepresentations().stream() return formData.getRepresentations().stream().filter(HAS_XML_CONTENT_TYPE).flatMap(this::parseDocument);
.filter(representation -> representation.getContentType().contains("xml")) }
.flatMap(xmlRepresentation -> {
private Stream<Document> parseDocument(IncomingFile xmlRepresentation) {
try { try {
return Stream.of(xmlToJavaMapsMapper.parseAsW3cDocument(xmlRepresentation.getContentStream())); return Stream.of(xmlToJavaMapsMapper.parseAsW3cDocument(xmlRepresentation.getContentStream()));
} catch (TechnicalException exception) { } catch (TechnicalException exception) {
return Stream.empty(); return Stream.empty();
} }
});
} }
public FormData adaptByRepresentations(FormData formData) { public FormData adaptByRepresentations(FormData formData) {
...@@ -102,10 +123,8 @@ public class IntelliFormRepresentationAdapter { ...@@ -102,10 +123,8 @@ public class IntelliFormRepresentationAdapter {
.attachments(formData.getAttachments()) .attachments(formData.getAttachments())
.formData(Stream.concat( .formData(Stream.concat(
getFormDataEntriesFromDocument(document, formData.getAttachments()), getFormDataEntriesFromDocument(document, formData.getAttachments()),
Map.of( Map.of(HEADER_FIELD, createHeaderMap(document)).entrySet().stream())
HEADER_FIELD, createHeaderMap(document) .collect(ORDERED_MAP_ENTRY_COLLECTOR))
).entrySet().stream()
).collect(ORDERED_MAP_ENTRY_COLLECTOR))
.build(); .build();
} }
...@@ -115,8 +134,7 @@ public class IntelliFormRepresentationAdapter { ...@@ -115,8 +134,7 @@ public class IntelliFormRepresentationAdapter {
.map(IncomingFile::getVendorId) .map(IncomingFile::getVendorId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
return xmlToJavaMapsMapper.mapXmlToJavaMaps(document).entrySet() return xmlToJavaMapsMapper.mapXmlToJavaMaps(document).entrySet().stream()
.stream()
.filter(entry -> !isUploadElementWhichRefersToAttachment(entry.getValue(), attachmentVendorIds)); .filter(entry -> !isUploadElementWhichRefersToAttachment(entry.getValue(), attachmentVendorIds));
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment