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

Merge branch 'OZG-6735-fim-metadata' into 'main'

OZG-6735 fim metadata

See merge request !1
parents a76c5290 71da062f
No related branches found
No related tags found
1 merge request!1OZG-6735 fim metadata
Pipeline #1533 passed
......@@ -30,7 +30,7 @@
<parent>
<groupId>de.ozgcloud.common</groupId>
<artifactId>ozgcloud-common-parent</artifactId>
<version>4.6.0</version>
<version>4.9.0</version>
</parent>
<groupId>de.ozgcloud.eingang</groupId>
......@@ -41,7 +41,7 @@
<description>Semantik-Adapter für AFM/IntelliForm</description>
<properties>
<eingang-manager.version>2.15.0</eingang-manager.version>
<eingang-manager.version>2.16.0</eingang-manager.version>
</properties>
<dependencies>
......@@ -62,7 +62,7 @@
<version>${eingang-manager.version}</version>
</dependency>
<!-- Test -->
<!-- Test -->
<dependency>
<groupId>de.ozgcloud.eingang</groupId>
<artifactId>common</artifactId>
......
/*
* 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));
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment