diff --git a/common/src/main/java/de/itvsh/kop/eingangsadapter/common/formdata/FormDataUtils.java b/common/src/main/java/de/itvsh/kop/eingangsadapter/common/formdata/FormDataUtils.java index 5e3cf488ad24d23e002ba4ff58ccb8de5d8189e3..1cf0a8adfe6f7f57c247ce61664f10849b48359e 100644 --- a/common/src/main/java/de/itvsh/kop/eingangsadapter/common/formdata/FormDataUtils.java +++ b/common/src/main/java/de/itvsh/kop/eingangsadapter/common/formdata/FormDataUtils.java @@ -24,7 +24,7 @@ package de.itvsh.kop.eingangsadapter.common.formdata; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import lombok.NonNull; @@ -36,7 +36,7 @@ public class FormDataUtils { private FormDataUtils(FormData formData) { baseFormData = formData; - modifieableData = new HashMap<>(formData.getFormData()); + modifieableData = new LinkedHashMap<>(formData.getFormData()); } public static FormDataUtils from(FormData formData) { diff --git a/intelliform-adapter/src/main/java/de/itvsh/kop/eingangsadapter/intelliform/XmlToJavaMapsMapper.java b/intelliform-adapter/src/main/java/de/itvsh/kop/eingangsadapter/intelliform/XmlToJavaMapsMapper.java index 660117443c7e8b5052218890bc13731491a1df7e..c85a66112148dc50dab0125ca1d375c093e7e3b5 100644 --- a/intelliform-adapter/src/main/java/de/itvsh/kop/eingangsadapter/intelliform/XmlToJavaMapsMapper.java +++ b/intelliform-adapter/src/main/java/de/itvsh/kop/eingangsadapter/intelliform/XmlToJavaMapsMapper.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -72,7 +73,7 @@ class XmlToJavaMapsMapper { private Map<String, Object> mapChildNodes(Node node) { - Map<String, Object> childs = new HashMap<>(); + Map<String, Object> childs = new LinkedHashMap<>(); NodeList nodeList = node.getChildNodes(); diff --git a/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/FormDataEndpointITCase.java b/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/FormDataEndpointITCase.java index 9a7976efd524cf5cac369339bf7fab1aade7b80d..a3230d377765ed59877119b989a8cc162c71cd4a 100644 --- a/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/FormDataEndpointITCase.java +++ b/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/FormDataEndpointITCase.java @@ -23,17 +23,15 @@ */ package de.itvsh.kop.eingangsadapter.intelliform; +import static de.itvsh.kop.eingangsadapter.intelliform.XmlDaten1Container.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.io.IOException; import java.util.Optional; -import javax.xml.bind.JAXBException; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.soap.SOAPException; - +import de.itvsh.ozg.pluto.vorgang.GrpcFormData; +import lombok.SneakyThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -48,7 +46,6 @@ import org.springframework.ws.test.server.MockWebServiceClient; import org.springframework.ws.test.server.RequestCreators; import org.springframework.ws.test.server.ResponseActions; import org.springframework.ws.test.server.ResponseMatchers; -import org.xml.sax.SAXException; import de.itvsh.kop.eingangsadapter.router.VorgangRemoteService; import de.itvsh.ozg.pluto.vorgang.GrpcEingang; @@ -82,7 +79,7 @@ class FormDataEndpointITCase { class TestAntragWithAttachments { @BeforeEach - void init() throws SAXException, IOException, ParserConfigurationException, JAXBException, SOAPException { + void init() { sendWebserviceRequest(REQUEST); verify(vorgangRemoteService).createVorgang(grpcEingangCaptor.capture(), organisationsEinheitIdCaptor.capture()); @@ -106,7 +103,7 @@ class FormDataEndpointITCase { } @Test - void checkAttachmentsCount() throws IOException { + void checkAttachmentsCount() { assertThat(grpcEingangCaptor.getValue().getNumberOfAttachments()).isEqualTo(2); } @@ -177,13 +174,13 @@ class FormDataEndpointITCase { class TestOtherNameForFormData { @Test - void shouldSucceed() throws IOException { // NOSONAR contains andExpect of mockClient + void shouldSucceed() { // NOSONAR contains andExpect of mockClient sendWebserviceRequest("soaprequest_other-name.xml") .andExpect(ResponseMatchers.noFault()); } @Test - void shouldHaveOrgaId() throws IOException { + void shouldHaveOrgaId() { sendWebserviceRequest("soaprequest_other-name.xml"); verify(vorgangRemoteService).createVorgang(grpcEingangCaptor.capture(), any()); @@ -193,7 +190,81 @@ class FormDataEndpointITCase { } - private ResponseActions sendWebserviceRequest(String requestFileName) throws IOException { + @Nested + class TestKeepFormDataOrder { + + @Test + void shouldKeepEingangFieldsOrder() { + var grpcFormData = requestFormData(); + + assertThat(grpcFormData.getFieldList()).isEqualTo(XmlDaten1Container.EINGANG_FIELDS); + } + + @Test + void shouldKeepZustaendigestelleFieldsOrder() { + var formFields = requestFormData().getForm(0).getFieldList(); + + assertThat(formFields).isEqualTo(XmlDaten1Container.ZUSTAENDIGESTELLE_FIELDS); + } + + @Test + void shouldKeepEmpfangendestelleFieldsOrder() { + var formFields = requestFormData().getForm(1).getFieldList(); + + assertThat(formFields).isEqualTo(XmlDaten1Container.EMPFANGENDESTELLE_FIELDS); + } + + @Test + void shouldKeepErklaerungenFieldsOrder() { + var formFields = requestFormData().getForm(2).getFieldList(); + + assertThat(formFields).isEqualTo(XmlDaten1Container.ERKLAERUNGEN_FIELDS); + } + + @Test + void shouldKeepAnsprechpartnerFieldsOrder() { + var formFields = requestFormData().getForm(3).getSubForm(0).getFieldList(); + + assertThat(formFields).isEqualTo(XmlDaten1Container.ANSPRECHPARTNER_FIELDS); + } + + @Test + void shouldKeepAnschriftFieldsOrder() { + var formFields = requestFormData().getForm(3).getSubForm(0).getSubForm(0).getFieldList(); + + assertThat(formFields).isEqualTo(XmlDaten1Container.ANSCHRIFT_FIELDS); + } + + @Test + void shouldKeepKontaktFieldsOrder() { + var formFields = requestFormData().getForm(3).getSubForm(0).getSubForm(1).getFieldList(); + + assertThat(formFields).isEqualTo(XmlDaten1Container.KONTAKT_FIELDS); + } + + @Test + void shouldKeepVerwaltungsleistungFieldsOrder() { + var formFields = requestFormData().getForm(3).getSubForm(1).getSubForm(0).getFieldList(); + + assertThat(formFields).isEqualTo(XmlDaten1Container.VERWALTUNGSLEISTUNG_FIELDS); + } + + @Test + void shouldKeepAusgewaehlteZustaendigestelleFieldsOrder() { + var formFields = requestFormData().getForm(3).getSubForm(1).getSubForm(0).getSubForm(0).getFieldList(); + + assertThat(formFields).isEqualTo(XmlDaten1Container.AUSGEWAEHLTE_ZUSTAENDIGESTELLE_FIELDS); + } + + private GrpcFormData requestFormData() { + sendWebserviceRequest(REQUEST_XML_NAME); + verify(vorgangRemoteService).createVorgang(grpcEingangCaptor.capture(), any()); + return grpcEingangCaptor.getValue().getFormData(); + } + } + + @SneakyThrows + private ResponseActions sendWebserviceRequest(String requestFileName) { return mockClient.sendRequest(RequestCreators.withSoapEnvelope(getResource(requestFileName))) .andExpect(ResponseMatchers.noFault()) .andExpect(ResponseMatchers.payload(getResource(RESPONSE))); diff --git a/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/GrpcFormFieldTestFactory.java b/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/GrpcFormFieldTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..aaffde00e5b446ac79606effb357be3456dc65fd --- /dev/null +++ b/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/GrpcFormFieldTestFactory.java @@ -0,0 +1,10 @@ +package de.itvsh.kop.eingangsadapter.intelliform; + +import de.itvsh.ozg.pluto.vorgang.GrpcFormField; + +public class GrpcFormFieldTestFactory { + + public static GrpcFormField create(String fieldName, String fieldValue) { + return GrpcFormField.newBuilder().setName(fieldName).setValue(fieldValue).build(); + } +} diff --git a/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/XmlDaten1Container.java b/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/XmlDaten1Container.java new file mode 100644 index 0000000000000000000000000000000000000000..b627be2c942c33dce259b9b1697253ada9e94f13 --- /dev/null +++ b/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/XmlDaten1Container.java @@ -0,0 +1,138 @@ +package de.itvsh.kop.eingangsadapter.intelliform; + +import de.itvsh.ozg.pluto.vorgang.GrpcFormField; + +import java.util.List; + +import static de.itvsh.kop.eingangsadapter.intelliform.GrpcFormFieldTestFactory.*; + +public class XmlDaten1Container { + + public final static String REQUEST_XML_NAME = "XML-Daten-1-SoapRequest.xml"; + + public static final List<GrpcFormField> EINGANG_FIELDS = List.of( + create("kontaktsystemtypid", "233034600"), + create("kontaktsystemtypidln", "233034601"), + create("AnliegenID", "8966671"), + create("mailboxguid", "f977368b-6991-46b9-af18-8a2a03d9ad1b"), + create("GebietID", "9007314"), + create("logourl", "http://wafmxpa002.dpaor.de/sh/logos/kopf_9068873.doc") + ); + + public static final List<GrpcFormField> EMPFANGENDESTELLE_FIELDS = List.of( + create("OrganisationseinheitenAuswahl", "9068873"), + create("OrganisationseinheitenID", "9068873"), + create("OrganisationseinheitenBEZEICHNUNG", "Einheitlicher Ansprechpartner\n\t\t\tSchleswig-Holstein"), + create("strasse", "Reventlouallee"), + create("hausnummer", "6"), + create("postleitzahl", "24105"), + create("ortID", "9006402"), + create("ort", "Kiel"), + create("telefonnummer", "+49 431 988-8650"), + create("telefaxnummer", "+49 431 988-6161111"), + create("emailadresse", "info@ea-sh.de"), + create("demailadresse", "ea-poststelle@ea-sh.de-mail.de"), + create("kontaktsystem_kennung", "afmsh:9068873_AusnahmeLKWFahrverbot"), + create("kontaktsystem_kennungzusatz", "alle") + ); + + public static final List<GrpcFormField> ERKLAERUNGEN_FIELDS = List.of( + create("check_gebuehren", "true"), + create("check_richtigkeit", "true"), + create("check_datenschutz", "true"), + create("check_missbrauch", "true"), + create("b_gebuehren_beschriftung", """ + * Mir ist bekannt, dass durch das Einreichen + des elektronischen Antrages von der zuständigen Stelle Gebühren + erhoben werden können."""), + create("b_gebuehren_intro", """ + Gebühr bei Ausstellung des kleinen Waffenscheins: + 60,00 Euro. Bearbeitungsgebühr bei Versagung: 45,00 Euro. + Sie sind gemäß § 39 WaffG verpflichtet, der zuständigen Behörde die zur + Durchführung des Gesetzes erforderlichen Auskünfte zu erteilen. Zur + Prüfung Ihrer waffenrechtlichen Zuverlässigkeit und Eignung holt die + Behörde eine unbeschränkte Auskunft aus dem Bundeszentralregister, + eine Auskunft aus dem zentralen staatsanwaltschaftlichen + Verfahrensregister, eine Stellungnahme der örtlichen + Polizeidienststelle und Ihrer Wohnsitzgemeinde ein."""), + create("b_richtigkeit", "* Ich bestätige die Richtigkeit meiner Angaben."), + create("b_datenschutz", """ + * Ich erkläre mich damit einverstanden, dass der + Einheitlicher Ansprechpartner Schleswig-Holstein zur Erfüllung seiner + Aufgaben meine Daten unter Einhaltung der Bestimmungen der + Datenschutz-Grundverordnung (DS-GVO) und des + Landesdatenschutzgesetzes Schleswig-Holstein (LDSG-SH) speichert, + verarbeitet und diese im Rahmen der gesetzlichen Bestimmungen an die + für die Entscheidung zuständige Stelle weiterleitet. Ebenso bin ich + mit der rechtskonformen Datenverarbeitung und Speicherung durch die + zuständige Stelle einverstanden. Mir ist bekannt, dass ich die + Einwilligung in die Verarbeitung und Übermittlung jederzeit gegenüber + dem Einheitlicher Ansprechpartner Schleswig-Holstein, Reventlouallee + 6, 24105 Kiel widerrufen kann. Ein Widerruf ist aber nur wirksam für + die Zukunft. Verarbeitungen, die vor dem Widerruf erfolgt sind, sind + davon nicht betroffen. Über die Verarbeitung meiner personenbezogenen + Daten und die mir nach den datenschutzrechtlichen Regelungen + zustehenden Ansprüche und Rechte habe ich unter Datenschutzerklärung + Kenntnis erlangt."""), + create("b_missbrauch", """ + * Mir ist bekannt, dass zur Verfolgung widerrechtlicher + Nutzung die Daten meines zur Dateneingabe genutzten Endgerätes + aufgezeichnet und verwendet werden können."""), + create("policyurl", "http://wafmxpa002.dpaor.de/sh/datenschutz/datenschutzerklaerungEA_de.doc") + ); + + public static final List<GrpcFormField> ANSPRECHPARTNER_FIELDS = List.of( + create("anrede", "Herr"), + create("vorname", "Max"), + create("familienname", "Testermann") + ); + + public static final List<GrpcFormField> ANSCHRIFT_FIELDS = List.of( + create("strasse", "Königsweg"), + create("hausnummer", "74"), + create("postleitzahl", "24837"), + create("ort", "Schleswig"), + create("staat", "Deutschland") + ); + + public static final List<GrpcFormField> KONTAKT_FIELDS = List.of( + create("telefonnummer", "+ 49 4621 9654"), + create("mobilnummer", "+49 123"), + create("telefaxnummer", "+ 49 4621 9654"), + create("emailadresse", "max.testermann@gmx.de"), + create("demailadresse", "max.testermann@gmx.de-mail.de") + ); + + public static final List<GrpcFormField> AUSGEWAEHLTE_ZUSTAENDIGESTELLE_FIELDS = List.of( + create("OrganisationseinheitenID", "9535669"), + create("OrganisationseinheitenBEZEICHNUNG", "Kreis\n\t\t\t\t\t\tSchleswig-Flensburg/Kreisverwaltung - Allgemeine\n\t\t\t\t\t\tOrdnungsangelegenheiten") + ); + + public static final List<GrpcFormField> VERWALTUNGSLEISTUNG_FIELDS = List.of( + create("GebietID", "9007314"), + create("GebietBEZEICHNUNG", "Schleswig"), + create("AnliegenID", "8966671"), + create("AnliegenBEZEICHNUNG", "Waffenschein / Kleiner Waffenschein"), + create("leikaKEYLIST", "99089008000000;99089008001000") + ); + + public static final List<GrpcFormField> ZUSTAENDIGESTELLE_FIELDS = List.of( + create("OrganisationseinheitenAuswahl", "9535669"), + create("OrganisationseinheitenID", "9535669"), + create("OrganisationseinheitenBEZEICHNUNG", "Kreis\n\t\t\tSchleswig-Flensburg/Kreisverwaltung - Allgemeine\n\t\t\tOrdnungsangelegenheiten"), + create("strasse", "Flensburger Straße"), + create("hausnummer", "7"), + create("postleitzahl", "24837"), + create("ortID", "9007314"), + create("ort", "Schleswig"), + create("telefonnummer", "04621 87-0"), + create("telefaxnummer", "04621 87-366"), + create("emailadresse", "Gefahrenabwehr@Kiel.de"), + create("kontaktsystem_kennung", "afmsh:9535669_kleinerWaffenschein"), + create("AnliegenBEZEICHNUNG", "Waffenschein / Kleiner Waffenschein"), + create("leikaKEYLIST", "99089008000000;99089008001000"), + create("auswahl_zustellung", "abholen"), + create("b_zustellung", "Ich hole den Kleinen Waffenschein selbst ab.") + ); + +} diff --git a/intelliform-adapter/src/test/resources/intelliform/XML-Daten-1-SoapRequest.xml b/intelliform-adapter/src/test/resources/intelliform/XML-Daten-1-SoapRequest.xml new file mode 100644 index 0000000000000000000000000000000000000000..ea9ad422542f33511886964cfb34d68c375a1c19 --- /dev/null +++ b/intelliform-adapter/src/test/resources/intelliform/XML-Daten-1-SoapRequest.xml @@ -0,0 +1,30 @@ +<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> + <soap:Body> + <ns2:deposit xmlns:ns2="http://xmlns.cit.de/intelliform/2009/webservices/backend"> + <data> + <attachments> + <attributes> + <key>X-IntelliForm-Signed</key> + <value>false</value> + </attributes> + <content>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG15Rm9ybSB4bWxuczpwZGY9Imh0dHA6Ly94bWxucy5jaXQuZGUvYXNzaXN0YW50cy9wZGYiCgl4bWxuczp0PSJodHRwOi8veG1sbnMuY2l0LmRlL2ludGVsbGlmb3JtL3RyYW5zYWN0aW9uIgoJdDppZD0iMjAyMDExMTgzNjU2NzA4NjYxMDEiIHQ6dGltZXN0YW1wPSIyMDIwLTExLTE4VDA5OjA5OjI3LjYyN1oiCgl0OnNlbmRlcj0iYWZtLnNjaGxlc3dpZy1ob2xzdGVpbi5kZSIKCXQ6Zm9ybT0iS2xlaW5lciBXYWZmZW5zY2hlaW4gZ2VtLiDCpyAxMCBBYnMuIDQgU2F0eiA0IFdhZmZlbmdlc2V0eiAoV2FmZkcpIgoJdDpmb3JtLWlkPSJ3YWZmZW4va2xlaW5lcldhZmZlbnNjaGVpbiIKCXQ6Y3VzdG9tZXI9IkVpbmhlaXRsaWNoZXIgQW5zcHJlY2hwYXJ0bmVyIiB0OmN1c3RvbWVyLWlkPSJlYS1zaCIKCXQ6Y2xpZW50PSJTY2hsZXN3aWctSG9sc3RlaW4iIHQ6Y2xpZW50LWlkPSJsYW5kIj4KCTxrb250YWt0c3lzdGVtdHlwaWQ+MjMzMDM0NjAwPC9rb250YWt0c3lzdGVtdHlwaWQ+Cgk8a29udGFrdHN5c3RlbXR5cGlkbG4+MjMzMDM0NjAxPC9rb250YWt0c3lzdGVtdHlwaWRsbj4KCTxBbmxpZWdlbklEPjg5NjY2NzE8L0FubGllZ2VuSUQ+Cgk8bWFpbGJveGd1aWQ+Zjk3NzM2OGItNjk5MS00NmI5LWFmMTgtOGEyYTAzZDlhZDFiPC9tYWlsYm94Z3VpZD4KCTxuYW1laWQ+Y2JhY2IwMWEtMjgxMC0xMWVjLWJiNmYtYzMxOTM5Zjg4NzRlPC9uYW1laWQ+Cgk8YW50cmFnc3RlbGxlcj4KCQk8cGVyc19hbnJlZGU+SGVyciQwMzwvcGVyc19hbnJlZGU+CgkJPHBlcnNfbmFjaG5hbWU+VGVzdGVybWFubjwvcGVyc19uYWNobmFtZT4KCQk8cGVyc192b3JuYW1lPk1heDwvcGVyc192b3JuYW1lPgoJCTxwZXJzX2dlYnVydHNuYW1lPk1heCBUZXN0ZXJtYW5uPC9wZXJzX2dlYnVydHNuYW1lPgoJCTxwZXJzX2dlYnVydHNkYXR1bT4xOTk1LTAzLTIxPC9wZXJzX2dlYnVydHNkYXR1bT4KCQk8cGVyc19nZWJ1cnRzb3J0PkZsZW5zYnVyZzwvcGVyc19nZWJ1cnRzb3J0PgoJCTxwZXJzX2dlYnVydHNsYW5kPmRldXRzY2gkRGV1dHNjaGxhbmQkMDAwPC9wZXJzX2dlYnVydHNsYW5kPgoJCTxwZXJzX3N0YWF0c2FuZ2Vob2VyaWdrZWl0PmRldXRzY2gkRGV1dHNjaGxhbmQkMDAwPC9wZXJzX3N0YWF0c2FuZ2Vob2VyaWdrZWl0PgoJCTxiX2FucmVkZT5IZXJyPC9iX2FucmVkZT4KCQk8Yl9hbnJlZGVfc2NobHVlc3NlbG5yPjAzPC9iX2FucmVkZV9zY2hsdWVzc2VsbnI+CgkJPGJfZ2VidXJ0c2xhbmQ+RGV1dHNjaGxhbmQ8L2JfZ2VidXJ0c2xhbmQ+CgkJPGJfZ2VidXJ0c2xhbmRfc2lnbmF0dXI+MDAwPC9iX2dlYnVydHNsYW5kX3NpZ25hdHVyPgoJCTxiX3N0YWF0c2FuZ2Vob2VyaWdrZWl0PmRldXRzY2g8L2Jfc3RhYXRzYW5nZWhvZXJpZ2tlaXQ+CgkJPGJfc3RhYXRzYW5nZWhvZXJpZ2tlaXRfc2lnbmF0dXI+MDAwPC9iX3N0YWF0c2FuZ2Vob2VyaWdrZWl0X3NpZ25hdHVyPgoJCTxzaF9zdHJhc3NlPkvDtm5pZ3N3ZWc8L3NoX3N0cmFzc2U+CgkJPHNoX2hhdXNudW1tZXI+NzQ8L3NoX2hhdXNudW1tZXI+CgkJPHNoX3Bsej4yNDgzNzwvc2hfcGx6PgoJCTxvcnRfYXVzd2FobD45MDA3MzE0JDAxMDU5MDc1PC9vcnRfYXVzd2FobD4KCQk8b3J0PlNjaGxlc3dpZzwvb3J0PgoJCTxHZWJpZXRJRD45MDA3MzE0PC9HZWJpZXRJRD4KCQk8R2ViaWV0QkVaRUlDSE5VTkc+U2NobGVzd2lnPC9HZWJpZXRCRVpFSUNITlVORz4KCQk8R2ViaWV0R05SOTRfR05SPjAxMDU5MDc1PC9HZWJpZXRHTlI5NF9HTlI+CgkJPHN0YWF0PjAwMDwvc3RhYXQ+CgkJPGlzbzMxNjZudW1lcmlzY2g+Mjc2PC9pc28zMTY2bnVtZXJpc2NoPgoJCTxrb250X3RlbGVmb25udW1tZXI+KyA0OSA0NjIxIDk2NTQ8L2tvbnRfdGVsZWZvbm51bW1lcj4KCQk8a29udF9tb2JpbG51bW1lcj4rNDkgMTIzPC9rb250X21vYmlsbnVtbWVyPgoJCTxrb250X3RlbGVmYXhudW1tZXI+KyA0OSA0NjIxIDk2NTQ8L2tvbnRfdGVsZWZheG51bW1lcj4KCQk8a29udF9lbWFpbD5tYXgudGVzdGVybWFubkBnbXguZGU8L2tvbnRfZW1haWw+CgkJPGtvbnRfZGVtYWlsPm1heC50ZXN0ZXJtYW5uQGdteC5kZS1tYWlsLmRlPC9rb250X2RlbWFpbD4KCQk8cGVyc29lbmxpY2hlRWlnbnVuZz4KCQkJPG1hZW5nZWx2b3JoYW5kZW4+ZmFsc2U8L21hZW5nZWx2b3JoYW5kZW4+CgkJCTxlcm1pdHRsdW5nc3ZlcmZhaHJlbj5mYWxzZTwvZXJtaXR0bHVuZ3N2ZXJmYWhyZW4+CgkJCTxNaXRnbGllZHNjaGFmdEluVmVyYm90ZXJuZXJWZXJlaW5pZ3VuZz5mYWxzZTwvTWl0Z2xpZWRzY2hhZnRJblZlcmJvdGVybmVyVmVyZWluaWd1bmc+CgkJPC9wZXJzb2VubGljaGVFaWdudW5nPgoJPC9hbnRyYWdzdGVsbGVyPgoJPEdlYmlldElEPjkwMDczMTQ8L0dlYmlldElEPgoJPHp1c3RhZW5kaWdlc3RlbGxlPgoJCTxPcmdhbmlzYXRpb25zZWluaGVpdGVuQXVzd2FobD45NTM1NjY5PC9PcmdhbmlzYXRpb25zZWluaGVpdGVuQXVzd2FobD4KCQk8T3JnYW5pc2F0aW9uc2VpbmhlaXRlbklEPjk1MzU2Njk8L09yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5JRD4KCQk8T3JnYW5pc2F0aW9uc2VpbmhlaXRlbkJFWkVJQ0hOVU5HPktyZWlzCgkJCVNjaGxlc3dpZy1GbGVuc2J1cmcvS3JlaXN2ZXJ3YWx0dW5nIC0gQWxsZ2VtZWluZQoJCQlPcmRudW5nc2FuZ2VsZWdlbmhlaXRlbjwvT3JnYW5pc2F0aW9uc2VpbmhlaXRlbkJFWkVJQ0hOVU5HPgoJCTxzdHJhc3NlPkZsZW5zYnVyZ2VyIFN0cmHDn2U8L3N0cmFzc2U+CgkJPGhhdXNudW1tZXI+NzwvaGF1c251bW1lcj4KCQk8cG9zdGxlaXR6YWhsPjI0ODM3PC9wb3N0bGVpdHphaGw+CgkJPG9ydElEPjkwMDczMTQ8L29ydElEPgoJCTxvcnQ+U2NobGVzd2lnPC9vcnQ+CgkJPHRlbGVmb25udW1tZXI+MDQ2MjEgODctMDwvdGVsZWZvbm51bW1lcj4KCQk8dGVsZWZheG51bW1lcj4wNDYyMSA4Ny0zNjY8L3RlbGVmYXhudW1tZXI+CgkJPGVtYWlsYWRyZXNzZT5HZWZhaHJlbmFid2VockBLaWVsLmRlPC9lbWFpbGFkcmVzc2U+CgkJPGRlbWFpbGFkcmVzc2UgLz4KCQk8a29udGFrdHN5c3RlbV9rZW5udW5nPmFmbXNoOjk1MzU2Njlfa2xlaW5lcldhZmZlbnNjaGVpbjwva29udGFrdHN5c3RlbV9rZW5udW5nPgoJCTxrb250YWt0c3lzdGVtX2tlbm51bmd6dXNhdHogLz4KCQk8QW5saWVnZW5CRVpFSUNITlVORz5XYWZmZW5zY2hlaW4gLyBLbGVpbmVyIFdhZmZlbnNjaGVpbjwvQW5saWVnZW5CRVpFSUNITlVORz4KCQk8bGVpa2FLRVlMSVNUPjk5MDg5MDA4MDAwMDAwOzk5MDg5MDA4MDAxMDAwPC9sZWlrYUtFWUxJU1Q+CgkJPGF1c3dhaGxfenVzdGVsbHVuZz5hYmhvbGVuPC9hdXN3YWhsX3p1c3RlbGx1bmc+CgkJPGJfenVzdGVsbHVuZz5JY2ggaG9sZSBkZW4gS2xlaW5lbiBXYWZmZW5zY2hlaW4gc2VsYnN0IGFiLjwvYl96dXN0ZWxsdW5nPgoJPC96dXN0YWVuZGlnZXN0ZWxsZT4KCTxlbXBmYW5nZW5kZXN0ZWxsZT4KCQk8T3JnYW5pc2F0aW9uc2VpbmhlaXRlbkF1c3dhaGw+OTA2ODg3MzwvT3JnYW5pc2F0aW9uc2VpbmhlaXRlbkF1c3dhaGw+CgkJPE9yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5JRD45MDY4ODczPC9PcmdhbmlzYXRpb25zZWluaGVpdGVuSUQ+CgkJPE9yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5CRVpFSUNITlVORz5FaW5oZWl0bGljaGVyIEFuc3ByZWNocGFydG5lcgoJCQlTY2hsZXN3aWctSG9sc3RlaW48L09yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5CRVpFSUNITlVORz4KCQk8c3RyYXNzZT5SZXZlbnRsb3VhbGxlZTwvc3RyYXNzZT4KCQk8aGF1c251bW1lcj42PC9oYXVzbnVtbWVyPgoJCTxwb3N0bGVpdHphaGw+MjQxMDU8L3Bvc3RsZWl0emFobD4KCQk8b3J0SUQ+OTAwNjQwMjwvb3J0SUQ+CgkJPG9ydD5LaWVsPC9vcnQ+CgkJPHRlbGVmb25udW1tZXI+KzQ5IDQzMSA5ODgtODY1MDwvdGVsZWZvbm51bW1lcj4KCQk8dGVsZWZheG51bW1lcj4rNDkgNDMxIDk4OC02MTYxMTExPC90ZWxlZmF4bnVtbWVyPgoJCTxlbWFpbGFkcmVzc2U+aW5mb0BlYS1zaC5kZTwvZW1haWxhZHJlc3NlPgoJCTxkZW1haWxhZHJlc3NlPmVhLXBvc3RzdGVsbGVAZWEtc2guZGUtbWFpbC5kZTwvZGVtYWlsYWRyZXNzZT4KCQk8a29udGFrdHN5c3RlbV9rZW5udW5nPmFmbXNoOjkwNjg4NzNfQXVzbmFobWVMS1dGYWhydmVyYm90PC9rb250YWt0c3lzdGVtX2tlbm51bmc+CgkJPGtvbnRha3RzeXN0ZW1fa2VubnVuZ3p1c2F0ej5hbGxlPC9rb250YWt0c3lzdGVtX2tlbm51bmd6dXNhdHo+Cgk8L2VtcGZhbmdlbmRlc3RlbGxlPgoJPGVya2xhZXJ1bmdlbj4KCQk8Y2hlY2tfZ2VidWVocmVuPnRydWU8L2NoZWNrX2dlYnVlaHJlbj4KCQk8Y2hlY2tfcmljaHRpZ2tlaXQ+dHJ1ZTwvY2hlY2tfcmljaHRpZ2tlaXQ+CgkJPGNoZWNrX2RhdGVuc2NodXR6PnRydWU8L2NoZWNrX2RhdGVuc2NodXR6PgoJCTxjaGVja19taXNzYnJhdWNoPnRydWU8L2NoZWNrX21pc3NicmF1Y2g+CgkJPGJfZ2VidWVocmVuX2Jlc2NocmlmdHVuZz4qIE1pciBpc3QgYmVrYW5udCwgZGFzcyBkdXJjaCBkYXMgRWlucmVpY2hlbgoJCQlkZXMgZWxla3Ryb25pc2NoZW4gQW50cmFnZXMgdm9uIGRlciB6dXN0w6RuZGlnZW4gU3RlbGxlIEdlYsO8aHJlbgoJCQllcmhvYmVuIHdlcmRlbiBrw7ZubmVuLjwvYl9nZWJ1ZWhyZW5fYmVzY2hyaWZ0dW5nPgoJCTxiX2dlYnVlaHJlbl9pbnRybz5HZWLDvGhyIGJlaSBBdXNzdGVsbHVuZyBkZXMga2xlaW5lbiBXYWZmZW5zY2hlaW5zOgoJCQk2MCwwMCBFdXJvLiBCZWFyYmVpdHVuZ3NnZWLDvGhyIGJlaSBWZXJzYWd1bmc6IDQ1LDAwIEV1cm8uCgkJCVNpZSBzaW5kIGdlbcOkw58gwqcgMzkgV2FmZkcgdmVycGZsaWNodGV0LCBkZXIgenVzdMOkbmRpZ2VuIEJlaMO2cmRlIGRpZSB6dXIKCQkJRHVyY2hmw7xocnVuZyBkZXMgR2VzZXR6ZXMgZXJmb3JkZXJsaWNoZW4gQXVza8O8bmZ0ZSB6dSBlcnRlaWxlbi4gWnVyCgkJCVByw7xmdW5nIElocmVyIHdhZmZlbnJlY2h0bGljaGVuIFp1dmVybMOkc3NpZ2tlaXQgdW5kIEVpZ251bmcgaG9sdCBkaWUKCQkJQmVow7ZyZGUgZWluZSB1bmJlc2NocsOkbmt0ZSBBdXNrdW5mdCBhdXMgZGVtIEJ1bmRlc3plbnRyYWxyZWdpc3RlciwKCQkJZWluZSBBdXNrdW5mdCBhdXMgZGVtIHplbnRyYWxlbiBzdGFhdHNhbndhbHRzY2hhZnRsaWNoZW4KCQkJVmVyZmFocmVuc3JlZ2lzdGVyLCBlaW5lIFN0ZWxsdW5nbmFobWUgZGVyIMO2cnRsaWNoZW4KCQkJUG9saXplaWRpZW5zdHN0ZWxsZSB1bmQgSWhyZXIgV29obnNpdHpnZW1laW5kZSBlaW4uPC9iX2dlYnVlaHJlbl9pbnRybz4KCQk8Yl9yaWNodGlna2VpdD4qIEljaCBiZXN0w6R0aWdlIGRpZSBSaWNodGlna2VpdCBtZWluZXIgQW5nYWJlbi48L2JfcmljaHRpZ2tlaXQ+CgkJPGJfZGF0ZW5zY2h1dHo+KiBJY2ggZXJrbMOkcmUgbWljaCBkYW1pdCBlaW52ZXJzdGFuZGVuLCBkYXNzIGRlcgoJCQlFaW5oZWl0bGljaGVyIEFuc3ByZWNocGFydG5lciBTY2hsZXN3aWctSG9sc3RlaW4genVyIEVyZsO8bGx1bmcgc2VpbmVyCgkJCUF1ZmdhYmVuIG1laW5lIERhdGVuIHVudGVyIEVpbmhhbHR1bmcgZGVyIEJlc3RpbW11bmdlbiBkZXIKCQkJRGF0ZW5zY2h1dHotR3J1bmR2ZXJvcmRudW5nIChEUy1HVk8pIHVuZCBkZXMKCQkJTGFuZGVzZGF0ZW5zY2h1dHpnZXNldHplcyBTY2hsZXN3aWctSG9sc3RlaW4gKExEU0ctU0gpIHNwZWljaGVydCwKCQkJdmVyYXJiZWl0ZXQgdW5kIGRpZXNlIGltIFJhaG1lbiBkZXIgZ2VzZXR6bGljaGVuIEJlc3RpbW11bmdlbiBhbiBkaWUKCQkJZsO8ciBkaWUgRW50c2NoZWlkdW5nIHp1c3TDpG5kaWdlIFN0ZWxsZSB3ZWl0ZXJsZWl0ZXQuIEViZW5zbyBiaW4gaWNoCgkJCW1pdCBkZXIgcmVjaHRza29uZm9ybWVuIERhdGVudmVyYXJiZWl0dW5nIHVuZCBTcGVpY2hlcnVuZyBkdXJjaCBkaWUKCQkJenVzdMOkbmRpZ2UgU3RlbGxlIGVpbnZlcnN0YW5kZW4uIE1pciBpc3QgYmVrYW5udCwgZGFzcyBpY2ggZGllCgkJCUVpbndpbGxpZ3VuZyBpbiBkaWUgVmVyYXJiZWl0dW5nIHVuZCDDnGJlcm1pdHRsdW5nIGplZGVyemVpdCBnZWdlbsO8YmVyCgkJCWRlbSBFaW5oZWl0bGljaGVyIEFuc3ByZWNocGFydG5lciBTY2hsZXN3aWctSG9sc3RlaW4sIFJldmVudGxvdWFsbGVlCgkJCTYsIDI0MTA1IEtpZWwgd2lkZXJydWZlbiBrYW5uLiBFaW4gV2lkZXJydWYgaXN0IGFiZXIgbnVyIHdpcmtzYW0gZsO8cgoJCQlkaWUgWnVrdW5mdC4gVmVyYXJiZWl0dW5nZW4sIGRpZSB2b3IgZGVtIFdpZGVycnVmIGVyZm9sZ3Qgc2luZCwgc2luZAoJCQlkYXZvbiBuaWNodCBiZXRyb2ZmZW4uIMOcYmVyIGRpZSBWZXJhcmJlaXR1bmcgbWVpbmVyIHBlcnNvbmVuYmV6b2dlbmVuCgkJCURhdGVuIHVuZCBkaWUgbWlyIG5hY2ggZGVuIGRhdGVuc2NodXR6cmVjaHRsaWNoZW4gUmVnZWx1bmdlbgoJCQl6dXN0ZWhlbmRlbiBBbnNwcsO8Y2hlIHVuZCBSZWNodGUgaGFiZSBpY2ggdW50ZXIgRGF0ZW5zY2h1dHplcmtsw6RydW5nCgkJCUtlbm50bmlzIGVybGFuZ3QuPC9iX2RhdGVuc2NodXR6PgoJCTxiX21pc3NicmF1Y2g+KiBNaXIgaXN0IGJla2FubnQsIGRhc3MgenVyIFZlcmZvbGd1bmcgd2lkZXJyZWNodGxpY2hlcgoJCQlOdXR6dW5nIGRpZSBEYXRlbiBtZWluZXMgenVyIERhdGVuZWluZ2FiZSBnZW51dHp0ZW4gRW5kZ2Vyw6R0ZXMKCQkJYXVmZ2V6ZWljaG5ldCB1bmQgdmVyd2VuZGV0IHdlcmRlbiBrw7ZubmVuLjwvYl9taXNzYnJhdWNoPgoJCTxwb2xpY3l1cmw+aHR0cDovL3dhZm14cGEwMDIuZHBhb3IuZGUvc2gvZGF0ZW5zY2h1dHovZGF0ZW5zY2h1dHplcmtsYWVydW5nRUFfZGUuZG9jPC9wb2xpY3l1cmw+Cgk8L2Vya2xhZXJ1bmdlbj4KCTxsb2dvdXJsPmh0dHA6Ly93YWZteHBhMDAyLmRwYW9yLmRlL3NoL2xvZ29zL2tvcGZfOTA2ODg3My5kb2M8L2xvZ291cmw+Cgk8Zm0+CgkJPGFuc3ByZWNocGFydG5lcj4KCQkJPGZpcm1lbm5hbWUgLz4KCQkJPGFucmVkZT5IZXJyPC9hbnJlZGU+CgkJCTx2b3JuYW1lPk1heDwvdm9ybmFtZT4KCQkJPGZhbWlsaWVubmFtZT5UZXN0ZXJtYW5uPC9mYW1pbGllbm5hbWU+CgkJCTxhbnNjaHJpZnQ+CgkJCQk8c3RyYXNzZT5Lw7ZuaWdzd2VnPC9zdHJhc3NlPgoJCQkJPGhhdXNudW1tZXI+NzQ8L2hhdXNudW1tZXI+CgkJCQk8cG9zdGZhY2ggLz4KCQkJCTxwb3N0bGVpdHphaGw+MjQ4Mzc8L3Bvc3RsZWl0emFobD4KCQkJCTxvcnQ+U2NobGVzd2lnPC9vcnQ+CgkJCQk8b3J0c3RlaWwgLz4KCQkJCTx6dXNhdHogLz4KCQkJCTxzdGFhdD5EZXV0c2NobGFuZDwvc3RhYXQ+CgkJCTwvYW5zY2hyaWZ0PgoJCQk8a29udGFrdD4KCQkJCTx0ZWxlZm9ubnVtbWVyPisgNDkgNDYyMSA5NjU0PC90ZWxlZm9ubnVtbWVyPgoJCQkJPG1vYmlsbnVtbWVyPis0OSAxMjM8L21vYmlsbnVtbWVyPgoJCQkJPHRlbGVmYXhudW1tZXI+KyA0OSA0NjIxIDk2NTQ8L3RlbGVmYXhudW1tZXI+CgkJCQk8ZW1haWxhZHJlc3NlPm1heC50ZXN0ZXJtYW5uQGdteC5kZTwvZW1haWxhZHJlc3NlPgoJCQkJPGRlbWFpbGFkcmVzc2U+bWF4LnRlc3Rlcm1hbm5AZ214LmRlLW1haWwuZGU8L2RlbWFpbGFkcmVzc2U+CgkJCTwva29udGFrdD4KCQk8L2Fuc3ByZWNocGFydG5lcj4KCQk8dmVyd2FsdHVuZ3NsZWlzdHVuZ2VuPgoJCQk8dmVyd2FsdHVuZ3NsZWlzdHVuZz4KCQkJCTxhdXNnZXdhZWhsdGVfenVzdGFlbmRpZ2VzdGVsbGU+CgkJCQkJPE9yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5JRD45NTM1NjY5PC9PcmdhbmlzYXRpb25zZWluaGVpdGVuSUQ+CgkJCQkJPE9yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5CRVpFSUNITlVORz5LcmVpcwoJCQkJCQlTY2hsZXN3aWctRmxlbnNidXJnL0tyZWlzdmVyd2FsdHVuZyAtIEFsbGdlbWVpbmUKCQkJCQkJT3JkbnVuZ3NhbmdlbGVnZW5oZWl0ZW48L09yZ2FuaXNhdGlvbnNlaW5oZWl0ZW5CRVpFSUNITlVORz4KCQkJCTwvYXVzZ2V3YWVobHRlX3p1c3RhZW5kaWdlc3RlbGxlPgoJCQkJPEdlYmlldElEPjkwMDczMTQ8L0dlYmlldElEPgoJCQkJPEdlYmlldEJFWkVJQ0hOVU5HPlNjaGxlc3dpZzwvR2ViaWV0QkVaRUlDSE5VTkc+CgkJCQk8QW5saWVnZW5JRD44OTY2NjcxPC9BbmxpZWdlbklEPgoJCQkJPEFubGllZ2VuQkVaRUlDSE5VTkc+V2FmZmVuc2NoZWluIC8gS2xlaW5lciBXYWZmZW5zY2hlaW48L0FubGllZ2VuQkVaRUlDSE5VTkc+CgkJCQk8bGVpa2FLRVlMSVNUPjk5MDg5MDA4MDAwMDAwOzk5MDg5MDA4MDAxMDAwPC9sZWlrYUtFWUxJU1Q+CgkJCQk8bGVpa2FCRVpFSUNITlVORyAvPgoJCQk8L3ZlcndhbHR1bmdzbGVpc3R1bmc+CgkJPC92ZXJ3YWx0dW5nc2xlaXN0dW5nZW4+Cgk8L2ZtPgo8L215Rm9ybT4=</content> + <contentType>text/xml</contentType> + <id>myForm-xml</id> + <name>XML-Daten.xml</name> + </attachments> + <caller /> + <client>sh-dev</client> + <clientId>sh-dev</clientId> + <customer>Kiel</customer> + <customerId>Kiel</customerId> + <form>SimpleFormSendetAnTestServer</form> + <formId>SimpleFormSendetAnTestServer</formId> + <id>20221212092912345678</id> + <primaryDataAttachmentId>myForm-xml</primaryDataAttachmentId> + <sender>intelliform.ozg-sh.de</sender> + <timestamp>2022-12-12T09:30:29.443Z</timestamp> + <username /> + </data> + </ns2:deposit> + </soap:Body> +</soap:Envelope> diff --git a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmAntragstellerMapper.java b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmAntragstellerMapper.java index 03a65a1671c90117d7b3a0d31ab1bc89b7b0ea74..36d520bcfceed77609853390fc48df1b7e59325d 100644 --- a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmAntragstellerMapper.java +++ b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmAntragstellerMapper.java @@ -24,7 +24,7 @@ package de.itvsh.kop.eingangsadapter.semantik.enginebased; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -74,7 +74,7 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { @SuppressWarnings("unchecked") private Optional<Map<String, Object>> getAntragstellerMap(Map<String, Object> formDataMap) { - return Optional.ofNullable(formDataMap.get(ANTRAGSTELLER)).map(Map.class::cast).map(HashMap::new); + return Optional.ofNullable(formDataMap.get(ANTRAGSTELLER)).map(Map.class::cast).map(LinkedHashMap::new); } private Antragsteller.AntragstellerBuilder addAntragstellerData(Antragsteller.AntragstellerBuilder builder, @@ -96,7 +96,7 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { } private Map<String, Object> getNotMappedData(Map<String, Object> antragstellerMap) { - var map = new HashMap<>(antragstellerMap); + var map = new LinkedHashMap<>(antragstellerMap); getFields().forEach(map::remove); return map; } @@ -106,7 +106,7 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { } private Map<String, Object> removeMappedData(Map<String, Object> formDataMap) { - var editableMap = new HashMap<>(formDataMap); + var editableMap = new LinkedHashMap<>(formDataMap); editableMap.remove(ANTRAGSTELLER); editableMap.remove(POSTFACH_ID); return Collections.unmodifiableMap(editableMap); diff --git a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmEngineBasedMapper.java b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmEngineBasedMapper.java index 0abe93109e8a751d3e16e755561113f780134095..a35d0a4654210552c206d901d84436db60e6cd5e 100644 --- a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmEngineBasedMapper.java +++ b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmEngineBasedMapper.java @@ -24,7 +24,7 @@ package de.itvsh.kop.eingangsadapter.semantik.enginebased; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; @@ -36,10 +36,10 @@ interface AfmEngineBasedMapper extends EngineBasedMapper { static final String CONTROLDATA_METADATA_PROPERTYNAME = "metaData"; default FormData addControlNode(FormData formData, String nodeName) { - var editableFormMap = new HashMap<>(formData.getFormData()); + var editableFormMap = new LinkedHashMap<>(formData.getFormData()); return Optional.ofNullable(getFormNode(formData, nodeName)) - .map(HashMap::new) + .map(LinkedHashMap::new) .map(empfStelleMap -> { empfStelleMap.put(KOP_CONTROLDATA_NODENAME, this.buildControlDataMap()); editableFormMap.put(nodeName, empfStelleMap); @@ -56,7 +56,7 @@ interface AfmEngineBasedMapper extends EngineBasedMapper { } default Map<String, Object> buildControlDataMap() { - var controlMap = new HashMap<String, Object>(); + Map<String, Object> controlMap = new LinkedHashMap<>(); controlMap.put(CONTROLDATA_METADATA_PROPERTYNAME, "true"); return controlMap; } diff --git a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmHeaderMapper.java b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmHeaderMapper.java index b3b2ca8063a167058f29bd1be4000019f1f9d531..4d1450b47d8000de5650b9d6241dd2ae85ed419b 100644 --- a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmHeaderMapper.java +++ b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmHeaderMapper.java @@ -25,7 +25,7 @@ package de.itvsh.kop.eingangsadapter.semantik.enginebased; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import org.springframework.stereotype.Component; @@ -68,7 +68,7 @@ class AfmHeaderMapper implements AfmEngineBasedMapper { } FormData removeMappedData(FormData formData) { - var data = new HashMap<>(formData.getFormData()); + var data = new LinkedHashMap<>(formData.getFormData()); data.remove(HEADER_FIELD); return formData.toBuilder().formData(data).build(); } diff --git a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmZustaendigeStelleMapper.java b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmZustaendigeStelleMapper.java index 5fb4e396408e50e04d175750a29e07192239547f..9914b306295b0b0d0d11139c930052f2f3a634a1 100644 --- a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmZustaendigeStelleMapper.java +++ b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmZustaendigeStelleMapper.java @@ -24,7 +24,7 @@ package de.itvsh.kop.eingangsadapter.semantik.enginebased; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -69,10 +69,10 @@ class AfmZustaendigeStelleMapper implements AfmEngineBasedMapper { } Map<String, Object> addMetaDataFlag(FormData formData) { - var editableFormData = new HashMap<>(formData.getFormData()); + var editableFormData = new LinkedHashMap<>(formData.getFormData()); Optional.ofNullable(getZustaendigeStelle(formData)) - .map(HashMap::new) + .map(LinkedHashMap::new) .ifPresent(zustaendigeStelle -> { zustaendigeStelle.put(KOP_CONTROLDATA_NODENAME, buildControlDataMap()); editableFormData.put(ZUSTAENDIGESTELLE, zustaendigeStelle);