diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataFlattener.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataFlattener.java deleted file mode 100644 index 1d49b8440a298bf31af7694db0bda7772525a171..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataFlattener.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import java.util.HashMap; -import java.util.Map; - -class FormDataFlattener { - - static final String VALUE_KEY = "value"; - - public static Map<String, Object> flatten(Map<String, Object> formData) { - return getDataWithoutValueKeys(formData); - } - - private static Map<String, Object> getDataWithoutValueKeys(Map<String, Object> data) { - Map<String, Object> result = new HashMap<>(); - for (var entry : data.entrySet()) { - result.put(entry.getKey(), getDataWithoutValueKey(entry.getValue())); - } - return result; - } - - @SuppressWarnings("unchecked") - private static Object getDataWithoutValueKey(Object data) { - if (!(data instanceof Map)) { - return data; - } - Map<String, Object> formData = (Map<String, Object>) data; - return containsValueKeyAsSingleEntry(formData) ? - getDataWithoutValueKey(formData.get(VALUE_KEY)) : - getDataWithoutValueKeys(formData); - } - - private static boolean containsValueKeyAsSingleEntry(Map<String, Object> formData) { - return formData.containsKey(VALUE_KEY) && formData.size() == 1; - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java index 7c1af10f8ea2f721b5b3efe9f354265c670f328d..0c34564a6ddcfb3f617f2c93fd4895ea275f07db 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java @@ -32,7 +32,7 @@ class FormDataMapper { public Antragsdaten toAntragsdaten(@NotNull VorgangWithEingang vorgang) { return Optional.ofNullable(vorgang.getEingang()) .map(Eingang::getFormData) - .map(FormDataFlattener::flatten) + .map(ValueKeysRemover::removeValueKeys) .map(this::buildAntragsdaten) .orElseGet(Antragsdaten::new); } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ValueKeysRemover.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ValueKeysRemover.java new file mode 100644 index 0000000000000000000000000000000000000000..76c1b7d0eb64e88eecfcaa93c5f1b094c2228c63 --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ValueKeysRemover.java @@ -0,0 +1,32 @@ +package de.ozgcloud.alfa.vorgang; + +import java.util.HashMap; +import java.util.Map; + +class ValueKeysRemover { + + static final String VALUE_KEY = "value"; + + public static Map<String, Object> removeValueKeys(Map<String, Object> formData) { + Map<String, Object> result = new HashMap<>(); + for (var entry : formData.entrySet()) { + result.put(entry.getKey(), removeValueKeysFromValue(entry.getValue())); + } + return result; + } + + @SuppressWarnings("unchecked") + private static Object removeValueKeysFromValue(Object value) { + if (!(value instanceof Map)) { + return value; + } + Map<String, Object> formData = (Map<String, Object>) value; + return containsValueKeyAsSingleEntry(formData) ? + removeValueKeysFromValue(formData.get(VALUE_KEY)) : + removeValueKeys(formData); + } + + private static boolean containsValueKeyAsSingleEntry(Map<String, Object> formData) { + return formData.containsKey(VALUE_KEY) && formData.size() == 1; + } +} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java index cb17aaabc7d3b24f6b58f74804cf2e3d3bfeab05..3c0c2519b83fd379091d789a8cc9044c8c407b5d 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java @@ -45,15 +45,15 @@ class FormDataMapperTest { @Test void shouldCallBuildAntragsdaten() { - try (MockedStatic<FormDataFlattener> formDataFlattener = mockStatic(FormDataFlattener.class)) { + try (MockedStatic<ValueKeysRemover> valueKeysRemover = mockStatic(ValueKeysRemover.class)) { var vorgang = VorgangWithEingangTestFactory.create(); - Map<String, Object> flattenedFormData = Map.of(UUID.randomUUID().toString(), "value1"); - formDataFlattener.when(() -> FormDataFlattener.flatten(any())).thenReturn(flattenedFormData); + Map<String, Object> formDataWithoutValueKeys = Map.of(UUID.randomUUID().toString(), "value1"); + valueKeysRemover.when(() -> ValueKeysRemover.removeValueKeys(any())).thenReturn(formDataWithoutValueKeys); doReturn(new Object()).when(formDataMapper).formatValue(any(), any()); formDataMapper.toAntragsdaten(vorgang); - verify(formDataMapper).buildAntragsdaten(flattenedFormData); + verify(formDataMapper).buildAntragsdaten(formDataWithoutValueKeys); } } diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataFlattenerTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ValueKeysRemoverTest.java similarity index 64% rename from alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataFlattenerTest.java rename to alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ValueKeysRemoverTest.java index a9f067504d684c773d3baa8f9002bc413b9bedb1..f9b5105db6ef211f7dd7c3ca287567fe64ee5465 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataFlattenerTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/ValueKeysRemoverTest.java @@ -7,18 +7,18 @@ import java.util.Map; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -public class FormDataFlattenerTest { +public class ValueKeysRemoverTest { @Nested - class TestFlatten { + class TestRemoveValueKeys { @Test void shouldPreserveValueKeyWithoutParent() { Map<String, Object> formData = Map.of("value", "Kiel"); - var flattened = FormDataFlattener.flatten(formData); + var formDataWithoutValueKeys = ValueKeysRemover.removeValueKeys(formData); - assertThat(flattened).isEqualTo(formData); + assertThat(formDataWithoutValueKeys).isEqualTo(formData); } @Test @@ -26,18 +26,18 @@ public class FormDataFlattenerTest { Map<String, Object> formData = Map.of("ort", Map.of("value", "Kiel")); Map<String, Object> expected = Map.of("ort", "Kiel"); - var flattened = FormDataFlattener.flatten(formData); + var formDataWithoutValueKeys = ValueKeysRemover.removeValueKeys(formData); - assertThat(flattened).isEqualTo(expected); + assertThat(formDataWithoutValueKeys).isEqualTo(expected); } @Test void shouldPreserveValueKeyIfHasSiblings() { Map<String, Object> formData = Map.of("ort", Map.of("value", "Kiel", "value2", "Kiel")); - var flattened = FormDataFlattener.flatten(formData); + var formDataWithoutValueKeys = ValueKeysRemover.removeValueKeys(formData); - assertThat(flattened).isEqualTo(formData); + assertThat(formDataWithoutValueKeys).isEqualTo(formData); } @Test @@ -63,9 +63,9 @@ public class FormDataFlattenerTest { ) ); - var flattened = FormDataFlattener.flatten(formData); + var formDataWithoutValueKeys = ValueKeysRemover.removeValueKeys(formData); - assertThat(flattened).isEqualTo(expected); + assertThat(formDataWithoutValueKeys).isEqualTo(expected); } } }