From f96aa629b86189cdecb16294bca53daad5358e20 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Mon, 9 Oct 2023 10:46:01 +0200 Subject: [PATCH] OZG-4428 map to formdata --- .../enterprise/entry/EntryFormDataField.java | 18 +++++++++++ .../enterprise/entry/FormDataMapper.java | 23 ++++++++++++++ .../entry/EntryFormDataTestFactory.java | 31 +++++++++++++------ .../enterprise/entry/FormDataMapperTest.java | 26 ++++++++++++++++ .../src/test/resources/request/simple.json | 14 +++------ 5 files changed, 94 insertions(+), 18 deletions(-) create mode 100644 enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapperTest.java diff --git a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryFormDataField.java b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryFormDataField.java index 0a748a409..7a7623d46 100644 --- a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryFormDataField.java +++ b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryFormDataField.java @@ -1,6 +1,9 @@ package de.ozgcloud.eingang.enterprise.entry; import java.time.LocalDate; +import java.util.Objects; + +import org.apache.commons.lang3.StringUtils; import lombok.Builder; import lombok.Getter; @@ -27,4 +30,19 @@ public class EntryFormDataField implements EntryFormDataItem { return true; } + public Object getValue() { + if (StringUtils.isNotBlank(stringValue)) { + return stringValue; + } + if (Objects.nonNull(booleanValue)) { + return booleanValue; + } + if (Objects.nonNull(numberValue)) { + return numberValue; + } + if (Objects.nonNull(dateValue)) { + return dateValue; + } + return null; + } } diff --git a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java index 6bf2030f3..816f12e08 100644 --- a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java +++ b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java @@ -1,5 +1,9 @@ package de.ozgcloud.eingang.enterprise.entry; +import java.util.Map; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.tuple.Pair; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -10,6 +14,9 @@ import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; @Mapper public interface FormDataMapper { + public static final String VALUE_KEY = "value"; + public static final String LABEL_KEY = "label"; + @Mapping(target = "antragsteller", ignore = true) @Mapping(target = "attachment", ignore = true) @Mapping(target = "attachments", ignore = true) @@ -35,4 +42,20 @@ public interface FormDataMapper { return ZustaendigeStelle.builder().organisationseinheitenId(organisationsEinheitenId).build(); } + default Map<String, Object> mapFormItems(Map<String, EntryFormDataItem> map) { + return map.entrySet().stream() + .map(entry -> Pair.of(entry.getKey(), + entry.getValue().isFormField() ? mapFormField((EntryFormDataField) entry.getValue()) + : mapSubForm((EntryFormDataSubForm) entry.getValue()))) + .collect(Collectors.toMap(Pair::getKey, Pair::getValue)); + } + + default Map<String, Object> mapFormField(EntryFormDataField field) { + return Map.of(LABEL_KEY, field.getLabel(), VALUE_KEY, field.getValue()); + } + + default Map<String, Object> mapSubForm(EntryFormDataSubForm subForm) { + return Map.of(LABEL_KEY, subForm.getLabel(), VALUE_KEY, mapFormItems(subForm.getFormItems())); + } + } diff --git a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryFormDataTestFactory.java b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryFormDataTestFactory.java index 8c0fe75eb..634171716 100644 --- a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryFormDataTestFactory.java +++ b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryFormDataTestFactory.java @@ -1,22 +1,35 @@ package de.ozgcloud.eingang.enterprise.entry; +import static de.ozgcloud.eingang.enterprise.entry.FormDataMapper.*; + import java.util.Map; public class EntryFormDataTestFactory { + public static final String FORM_FIELD_NAME = "field_name"; + public static final String FORM_FIELD_VALUE = "field_string_value"; + public static final String FORM_FIELD_LABEL = "field_label"; + + public static final String SUB_FORM_NAME = "antragsteller"; + public static final String SUB_FORM_LABEL = "Antragstellende Person"; + + public static final String SUB_FORM_FIELD_NAME = "lastname"; + public static final String SUB_FORM_FIELD_LABEL = "Nachname"; + public static final String SUB_FORM_FIELD_VALUE = "Täst"; + public static Map<String, EntryFormDataItem> create() { return Map.of( - "antragsteller", EntryFormDataSubForm.builder().label("Antragstellende Person") - .formItem("person_oder_firma", EntryFormDataField.builder().label("Anrede").stringValue("Herr").build()) - .formItem("vorname", EntryFormDataField.builder().label("Vorname").stringValue("Theo").build()) - .formItem("nachname", EntryFormDataField.builder().label("Nachname").stringValue("Täst").build()) + FORM_FIELD_NAME, EntryFormDataField.builder().label(FORM_FIELD_LABEL).stringValue(FORM_FIELD_VALUE).build(), + SUB_FORM_NAME, EntryFormDataSubForm.builder().label(SUB_FORM_LABEL) + .formItem(SUB_FORM_FIELD_NAME, + EntryFormDataField.builder().label(SUB_FORM_FIELD_LABEL).stringValue(SUB_FORM_FIELD_VALUE).build()) .build()); } - public static EntryFormDataSubForm.EntryFormDataSubFormBuilder createBuilder() { - return EntryFormDataSubForm.builder() - .name("antragsteller") - .formItem("person_oder_firma", EntryFormDataField.builder().label("Anrede").stringValue("Herr").build()); + public static Map<String, Object> createAsFormDataMap() { + return Map.of( + FORM_FIELD_NAME, Map.of(LABEL_KEY, FORM_FIELD_LABEL, VALUE_KEY, FORM_FIELD_VALUE), + SUB_FORM_NAME, Map.of(LABEL_KEY, SUB_FORM_LABEL, VALUE_KEY, Map.of( + SUB_FORM_FIELD_NAME, Map.of(LABEL_KEY, SUB_FORM_FIELD_LABEL, VALUE_KEY, SUB_FORM_FIELD_VALUE)))); } - } diff --git a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapperTest.java b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapperTest.java new file mode 100644 index 000000000..f72588539 --- /dev/null +++ b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapperTest.java @@ -0,0 +1,26 @@ +package de.ozgcloud.eingang.enterprise.entry; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; +import org.mockito.InjectMocks; + +class FormDataMapperTest { + + @InjectMocks + private FormDataMapper mapper = Mappers.getMapper(FormDataMapper.class); + + @Nested + class TestMapFormItems { + + @Test + void shouldMapFormItems() { + var mapped = mapper.mapFormItems(EntryFormDataTestFactory.create()); + + assertThat(mapped).usingRecursiveComparison().isEqualTo(EntryFormDataTestFactory.createAsFormDataMap()); + } + } + +} diff --git a/enterprise-adapter/src/test/resources/request/simple.json b/enterprise-adapter/src/test/resources/request/simple.json index f364c5827..391ec3420 100644 --- a/enterprise-adapter/src/test/resources/request/simple.json +++ b/enterprise-adapter/src/test/resources/request/simple.json @@ -13,18 +13,14 @@ "name": "Anmeldung zur Einrichtung einer zeitlich befristeten Haltverbotszone gem. § 45 Abs. 1 Straßenverkehrsordnung (StVO)" }, "formData": { + "field_name": { + "label": "field_label", + "stringValue": "field_string_value" + }, "antragsteller": { "label": "Antragstellende Person", "formItems": { - "person_oder_firma": { - "label": "Anrede", - "stringValue": "Herr" - }, - "vorname": { - "label": "Vorname", - "stringValue": "Theo" - }, - "nachname": { + "lastname": { "label": "Nachname", "stringValue": "Täst" } -- GitLab