diff --git a/common/src/main/java/de/ozgcloud/eingang/common/formdata/BayernHeader.java b/common/src/main/java/de/ozgcloud/eingang/common/formdata/BayernHeader.java new file mode 100644 index 0000000000000000000000000000000000000000..2076e220a923cf2a2cd584bd7b8a07afb62831bd --- /dev/null +++ b/common/src/main/java/de/ozgcloud/eingang/common/formdata/BayernHeader.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2022 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.common.formdata; + +import static lombok.AccessLevel.*; + +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = PRIVATE) +public class BayernHeader { + + public static final String HEADER_POSTFACH_ID = "u:saml_legacypostkorbhandle"; + public static final String HEADER_VORNAME = "u:saml_givenname"; + public static final String HEADER_NACHNAME = "u:saml_surename"; + public static final String HEADER_GEBURTSORT = "u:saml_placeofbirth"; + // TODO: public static final String HEADER_GEBURTSNAME = "u:saml_??"; + public static final String HEADER_EMAIL = "u:saml_mail"; + public static final String HEADER_TELEFON = "u:saml_telephonenumber"; + public static final String HEADER_STRASSE = "u:saml_postaladdress"; + public static final String HEADER_PLZ = "u:saml_postalcode"; + public static final String HEADER_ORT = "u:saml_localityname"; + +} diff --git a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/SemantikFormDataMapper.java b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/SemantikFormDataMapper.java index 5d9faa593aa0a61b19dee676ab2a233106e010f3..133f0e8a243d9fb6b479a9c6f8b5c11f4e980afd 100644 --- a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/SemantikFormDataMapper.java +++ b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/SemantikFormDataMapper.java @@ -39,6 +39,7 @@ import org.w3c.dom.Document; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; +import de.ozgcloud.eingang.intelliform.bayern.BayernHeaderReader; import de.ozgcloud.eingang.semantik.enginebased.FilesMapperHelper; import lombok.RequiredArgsConstructor; @@ -86,6 +87,9 @@ class SemantikFormDataMapper { @Autowired private final AttachmentsContentAdder attachmentsContentAdder; + @Autowired + private final BayernHeaderReader bayernHeaderReader; + public FormData mapToFormData(Deposit depositData) { var xmlFormDataStream = getXmlFormData(depositData.getData()); @@ -156,6 +160,7 @@ class SemantikFormDataMapper { map.put(HEADER_CUSTOMER_ID, document.getDocumentElement().getAttribute(HEADER_CUSTOMER_ID)); map.put(HEADER_CLIENT, document.getDocumentElement().getAttribute(HEADER_CLIENT)); map.put(HEADER_CLIENT_ID, document.getDocumentElement().getAttribute(HEADER_CLIENT_ID)); + map.putAll(bayernHeaderReader.getHeader(document)); return map; } } \ No newline at end of file diff --git a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/bayern/BayernHeaderReader.java b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/bayern/BayernHeaderReader.java new file mode 100644 index 0000000000000000000000000000000000000000..323863278365c59e32be604e4f3e5f902a6c9be8 --- /dev/null +++ b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/bayern/BayernHeaderReader.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2022 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.intelliform.bayern; + +import static de.ozgcloud.eingang.common.formdata.BayernHeader.*; + +import java.util.HashMap; +import java.util.Map; + + +import org.springframework.stereotype.Component; +import org.w3c.dom.Document; + +@Component +public class BayernHeaderReader { + + public Map<String, Object> getHeader(Document document) { + var map = new HashMap<String, Object>(); + map.put(HEADER_POSTFACH_ID, document.getDocumentElement().getAttribute(HEADER_POSTFACH_ID)); + map.put(HEADER_VORNAME, document.getDocumentElement().getAttribute(HEADER_VORNAME)); + map.put(HEADER_NACHNAME, document.getDocumentElement().getAttribute(HEADER_NACHNAME)); + map.put(HEADER_GEBURTSORT, document.getDocumentElement().getAttribute(HEADER_GEBURTSORT)); + map.put(HEADER_EMAIL, document.getDocumentElement().getAttribute(HEADER_EMAIL)); + map.put(HEADER_TELEFON, document.getDocumentElement().getAttribute(HEADER_TELEFON)); + map.put(HEADER_STRASSE, document.getDocumentElement().getAttribute(HEADER_STRASSE)); + map.put(HEADER_PLZ, document.getDocumentElement().getAttribute(HEADER_PLZ)); + map.put(HEADER_ORT, document.getDocumentElement().getAttribute(HEADER_ORT)); + return map; + } +} \ No newline at end of file diff --git a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/SemantikFormDataMapperTest.java b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/SemantikFormDataMapperTest.java index 36f64310aaf25183df3acdb36f93567032e43576..5f6a00e5ae857a7dcaff5e796fcfc0fbced9f91b 100644 --- a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/SemantikFormDataMapperTest.java +++ b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/SemantikFormDataMapperTest.java @@ -25,6 +25,8 @@ package de.ozgcloud.eingang.intelliform; import static de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory.*; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; import java.io.IOException; import java.util.HashMap; @@ -33,18 +35,31 @@ import java.util.Map; import javax.xml.parsers.ParserConfigurationException; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.mockito.Mock; import org.xml.sax.SAXException; +import de.ozgcloud.eingang.common.formdata.BayernHeader; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFile; +import de.ozgcloud.eingang.intelliform.bayern.BayernHeaderReader; +import de.ozgcloud.eingang.intelliform.bayern.BayernHeaderTestFactory; import de.ozgcloud.eingang.semantik.enginebased.FilesMapperHelper; class SemantikFormDataMapperTest { - private SemantikFormDataMapper mapper = new SemantikFormDataMapper(new XmlToJavaMapsMapper(), new FormDataIncomingFileMapper(), - new RepresentationsCalculator(), new DepositRequestIncomingFileMapper(), new AttachmentsContentAdder()); + private SemantikFormDataMapper mapper; + + @Mock + private BayernHeaderReader bayernHeaderReader; + + @BeforeEach + void setup() { + mapper = new SemantikFormDataMapper(new XmlToJavaMapsMapper(), new FormDataIncomingFileMapper(), + new RepresentationsCalculator(), new DepositRequestIncomingFileMapper(), new AttachmentsContentAdder(), bayernHeaderReader); + } @Nested class TestMapFormData { @@ -136,6 +151,17 @@ class SemantikFormDataMapperTest { .containsEntry(SemantikFormDataMapper.HEADER_CLIENT_ID, "land"); } + @Test + void shouldAddBayernHeader() { + Map<String, Object> bayernHeader = Map.of(BayernHeader.HEADER_POSTFACH_ID, BayernHeaderTestFactory.POSTFACH_ID); + when(bayernHeaderReader.getHeader(any())).thenReturn(bayernHeader); + + var formData = mapToFormData(deposit); + + verify(bayernHeaderReader).getHeader(any()); + assertThat(getHeader(formData)).containsEntry(BayernHeader.HEADER_POSTFACH_ID,BayernHeaderTestFactory.POSTFACH_ID); + } + @SuppressWarnings("unchecked") private Map<String, Object> getHeader(FormData formData) { return (Map<String, Object>) formData.getFormData().get(SemantikFormDataMapper.HEADER_FIELD); diff --git a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/bayern/BayernHeaderReaderTest.java b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/bayern/BayernHeaderReaderTest.java new file mode 100644 index 0000000000000000000000000000000000000000..09c60a8b353ea0e04f1550221767f842f6a5cf0d --- /dev/null +++ b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/bayern/BayernHeaderReaderTest.java @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2022 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.intelliform.bayern; + +import static de.ozgcloud.eingang.common.formdata.BayernHeader.*; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +class BayernHeaderReaderTest { + + @InjectMocks + private BayernHeaderReader reader; + + @Mock + private Document document; + @Mock + private Element element; + + @BeforeEach + void setup() { + when(document.getDocumentElement()).thenReturn(element); + } + + @Test + void shouldAddPostfachId() { + when(element.getAttribute(any())).thenReturn(BayernHeaderTestFactory.POSTFACH_ID); + + var formData = reader.getHeader(document); + + assertThat(formData).containsEntry(HEADER_POSTFACH_ID, BayernHeaderTestFactory.POSTFACH_ID); + } + + @Test + void shouldAddVorname() { + when(element.getAttribute(any())).thenReturn(BayernHeaderTestFactory.VORNAME); + + var formData = reader.getHeader(document); + + assertThat(formData).containsEntry(HEADER_VORNAME, BayernHeaderTestFactory.VORNAME); + } + + @Test + void shouldAddNachname() { + when(element.getAttribute(any())).thenReturn(BayernHeaderTestFactory.NACHNAME); + + var formData = reader.getHeader(document); + + assertThat(formData).containsEntry(HEADER_NACHNAME, BayernHeaderTestFactory.NACHNAME); + } + + @Test + void shouldAddGeburtsort() { + when(element.getAttribute(any())).thenReturn(BayernHeaderTestFactory.GEBURTSORT); + + var formData = reader.getHeader(document); + + assertThat(formData).containsEntry(HEADER_GEBURTSORT, BayernHeaderTestFactory.GEBURTSORT); + } + + @Test + void shouldAddEmail() { + when(element.getAttribute(any())).thenReturn(BayernHeaderTestFactory.EMAIL); + + var formData = reader.getHeader(document); + + assertThat(formData).containsEntry(HEADER_EMAIL, BayernHeaderTestFactory.EMAIL); + } + + @Test + void shouldAddTelefon() { + when(element.getAttribute(any())).thenReturn(BayernHeaderTestFactory.TELEFON); + + var formData = reader.getHeader(document); + + assertThat(formData).containsEntry(HEADER_TELEFON, BayernHeaderTestFactory.TELEFON); + } + + @Test + void shouldAddStrasse() { + when(element.getAttribute(any())).thenReturn(BayernHeaderTestFactory.STRASSE); + + var formData = reader.getHeader(document); + + assertThat(formData).containsEntry(HEADER_STRASSE, BayernHeaderTestFactory.STRASSE); + } + + @Test + void shouldAddPlz() { + when(element.getAttribute(any())).thenReturn(BayernHeaderTestFactory.PLZ); + + var formData = reader.getHeader(document); + + assertThat(formData).containsEntry(HEADER_PLZ, BayernHeaderTestFactory.PLZ); + } + + @Test + void shouldAddOrt() { + when(element.getAttribute(any())).thenReturn(BayernHeaderTestFactory.ORT); + + var formData = reader.getHeader(document); + + assertThat(formData).containsEntry(HEADER_ORT, BayernHeaderTestFactory.ORT); + } +} \ No newline at end of file diff --git a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/bayern/BayernHeaderTestFactory.java b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/bayern/BayernHeaderTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..a9449beab87935344282aed8fb7586fc7b700640 --- /dev/null +++ b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/bayern/BayernHeaderTestFactory.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2022 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.intelliform.bayern; + +import static de.ozgcloud.eingang.common.formdata.BayernHeader.*; + +import java.util.HashMap; +import java.util.Map; + +public class BayernHeaderTestFactory { + + public static final String POSTFACH_ID = "postfach_id"; + public static final String VORNAME = "vorname"; + public static final String NACHNAME = "nachname"; + public static final String GEBURTSORT = "geburtsort"; + public static final String EMAIL = "email"; + public static final String TELEFON = "telefon"; + public static final String STRASSE = "strasse"; + public static final String PLZ = "plz"; + public static final String ORT = "ort"; + + public static Map<String, Object> create() { + var map = new HashMap<String, Object>(); + map.put(HEADER_POSTFACH_ID, POSTFACH_ID); + map.put(HEADER_VORNAME, VORNAME); + map.put(HEADER_NACHNAME, NACHNAME); + map.put(HEADER_GEBURTSORT, GEBURTSORT); + map.put(HEADER_EMAIL, EMAIL); + map.put(HEADER_TELEFON, TELEFON); + map.put(HEADER_STRASSE, STRASSE); + map.put(HEADER_PLZ, PLZ); + map.put(HEADER_ORT, ORT); + return map; + } + +}