diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java index cdba687ee3c7f2dc369d8b2342afc66972cdaf75..592fea25bbffbe37a4ac7bc4896ddd8086ad0816 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java @@ -8,8 +8,6 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.function.Predicate; -import java.util.function.UnaryOperator; -import java.util.stream.Stream; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -19,12 +17,11 @@ import org.springframework.stereotype.Component; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import de.ozgcloud.eingang.common.formdata.FormData; -import de.ozgcloud.eingang.common.formdata.FormHeader; import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.ServiceKonto; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; -import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory; import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter; +import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory; import lombok.NonNull; import lombok.extern.log4j.Log4j2; @@ -39,9 +36,8 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema private static final String KEY_POSTFACH_ID = "InboxReference"; private static final String KEY_ORGANISATIONS_EINHEIT_ID = "MetaText1"; private static final String KEY_FORM_NAME = "Title"; - private static final String KEY_FORM_ID = "ProjectTitle"; - static final String DEFAULT_FORM_NAME = "dFördermittelantrag"; + static final String DEFAULT_FORM_NAME = "dFördermittelantrag: Ohne Titel"; @Autowired private ServiceKontoFactory serviceKontoFactory; @@ -55,49 +51,26 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema } FormData processFachnachricht(FormData formData) { - return pipe( - Stream.of( - this::addFormName, - this::addFormEngineName, - this::addServiceKonto, - this::addOrganisationsEinheitId, - this::addFormId - ) - ).apply(formData); - } + Map<String, Object> fachnachricht = getFachnachricht(formData); - private UnaryOperator<FormData> pipe(Stream<UnaryOperator<FormData>> functions) { - return (formData) -> functions - .reduce(formData, (acc, f) -> f.apply(acc), (a, b) -> a); + var extendedFormData = addFormName(formData); + extendedFormData = addFormEngineName(extendedFormData); + extendedFormData = addServiceKonto(extendedFormData, fachnachricht); + return addOrganisationsEinheitId(extendedFormData, fachnachricht); } - FormData addFormId(FormData formData) { - return getNonEmptyFachnachrichtValueByKey(formData, KEY_FORM_ID) - .map(formId -> mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formId(formId))) - .orElse(formData); - } - private Optional<String> getNonEmptyFachnachrichtValueByKey(FormData formData, String key) { - return Optional.ofNullable((String) getFachnachricht(formData).get(key)) - .filter(StringUtils::isNotBlank); - } - - private FormData mapWithModifiedHeader(FormData formData, UnaryOperator<FormHeader.FormHeaderBuilder> headerBuilderOperator) { - return formData.toBuilder() - .header(headerBuilderOperator.apply(formData.getHeader().toBuilder()).build()) - .build(); - } - - FormData addServiceKonto(FormData formData) { - return Optional.ofNullable((String) getFachnachricht(formData).get(KEY_POSTFACH_ID)) + FormData addServiceKonto(FormData formData, Map<String, Object> fachnachricht) { + return Optional.ofNullable((String) fachnachricht.get(KEY_POSTFACH_ID)) .map(this::extractPrefix) .map(this::createServiceKonto) - .map(serviceKonto -> mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.serviceKonto(serviceKonto))) + .map(serviceKonto -> formData.getHeader().toBuilder().serviceKonto(serviceKonto).build()) + .map(header -> formData.toBuilder().header(header).build()) .orElse(formData); } - FormData addOrganisationsEinheitId(FormData formData) { - return Optional.ofNullable((String) getFachnachricht(formData).get(KEY_ORGANISATIONS_EINHEIT_ID)) + FormData addOrganisationsEinheitId(FormData formData, Map<String, Object> fachnachricht) { + return Optional.ofNullable((String) fachnachricht.get(KEY_ORGANISATIONS_EINHEIT_ID)) .map(orgaId -> addOrganisationsEinheitId(orgaId, formData.getZustaendigeStelle())) .map(zustStelle -> formData.toBuilder().zustaendigeStelle(zustStelle).build()) .orElse(formData); @@ -115,10 +88,16 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema } FormData addFormName(FormData formData) { - return mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formName( - getNonEmptyFachnachrichtValueByKey(formData, KEY_FORM_NAME) - .orElse(DEFAULT_FORM_NAME) - )); + return formData.toBuilder() + .header(formData.getHeader().toBuilder() + .formName(getFormName(formData).orElse(DEFAULT_FORM_NAME)) + .build() + ) + .build(); + } + private Optional<String> getFormName(FormData formData) { + return Optional.ofNullable((String) getFachnachricht(formData).get(KEY_FORM_NAME)) + .filter(StringUtils::isNotBlank); } @SuppressWarnings("unchecked") @@ -127,7 +106,12 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema } FormData addFormEngineName(FormData formData) { - return mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formEngineName("dFördermittelantrag")); + return formData.toBuilder() + .header(formData.getHeader().toBuilder() + .formEngineName("dFördermittelantrag") + .build() + ) + .build(); } String extractPrefix(@NonNull String postfachId) { diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java index 110e80b7d0a2f055a9624458e3ae15594ef87d86..8f3bcec4c6ac8eb48984b6f40c38fca0473d5fe5 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java @@ -22,7 +22,6 @@ import de.ozgcloud.common.binaryfile.TempFileUtils; import de.ozgcloud.common.test.TestUtils; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; -import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory; import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory; import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; @@ -154,23 +153,22 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { @Mock FormData formData4; - @Mock - FormData formData5; - @BeforeEach void mock() { + var formData = DFoerdermittelFormDataTestFactory.create(); + var fachnachrichtMap = DFoerdermittelFormDataTestFactory.createFachnachrichtMap(); + when(formData0.getFormData()).thenReturn(formData.getFormData()); doReturn(formData1).when(adapter).addFormName(formData0); doReturn(formData2).when(adapter).addFormEngineName(formData1); - doReturn(formData3).when(adapter).addServiceKonto(formData2); - doReturn(formData4).when(adapter).addOrganisationsEinheitId(formData3); - doReturn(formData5).when(adapter).addFormId(formData4); + doReturn(formData3).when(adapter).addServiceKonto(formData2, fachnachrichtMap); + doReturn(formData4).when(adapter).addOrganisationsEinheitId(formData3, fachnachrichtMap); } @Test void shouldReturn() { var processedFormData = adapter.processFachnachricht(formData0); - assertThat(processedFormData).isEqualTo(formData5); + assertThat(processedFormData).isEqualTo(formData4); } } @@ -184,7 +182,8 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { @Test void shouldHaveServiceKonto() { - var formData = adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create()); + var formData = adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create(), + DFoerdermittelFormDataTestFactory.createFachnachrichtMap()); assertThat(formData.getHeader().getServiceKonto().getPostfachAddresses().get(0).getIdentifier()) .asInstanceOf(type(StringBasedIdentifier.class)).extracting(StringBasedIdentifier::getPostfachId) @@ -193,7 +192,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { @Test void shouldRemovePrefix() { - adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create()); + adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create(), DFoerdermittelFormDataTestFactory.createFachnachrichtMap()); verify(serviceKontoFactory).buildOsiServiceKonto(DFoerdermittelFormDataTestFactory.POSTFACH_ID); } @@ -220,7 +219,8 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { class TestAddOrganisationsEinheitId { @Test void shouldHaveOrganisationsEinheitId() { - var formData = adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create()); + var formData = adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create(), + DFoerdermittelFormDataTestFactory.createFachnachrichtMap()); assertThat(formData.getZustaendigeStelle()).isNotNull().extracting(ZustaendigeStelle::getOrganisationseinheitenId) .isEqualTo(ORGANISATIONS_EINHEIT_ID); @@ -260,40 +260,6 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { } - @DisplayName("add form id") - @Nested - class TestAddFormId { - - @DisplayName("should get form id from project title") - @Test - void shouldGetFormIdFromProjectTitle() { - var formData = adapter.addFormId(createFormDataWithProjectTitle(FORM_ID)); - - assertThat(formData.getHeader().getFormId()).isEqualTo(FORM_ID); - } - - @DisplayName("should keep form id if project title is empty") - @Test - void shouldKeepFormIdIfProjectTitleIsEmpty() { - var formData = adapter.addFormId(createFormDataWithProjectTitle("")); - - assertThat(formData.getHeader().getFormId()).isEqualTo(FormHeaderTestFactory.FORM_ID); - } - - @DisplayName("should keep form id if project title is null") - @Test - void shouldKeepFormIdIfProjectTitleIsNull() { - var formData = adapter.addFormId(createFormDataWithProjectTitle(null)); - - assertThat(formData.getHeader().getFormId()).isEqualTo(FormHeaderTestFactory.FORM_ID); - } - - FormData createFormDataWithProjectTitle(String projectTitle) { - return createFachnachrichtBuilder().projectTitle(projectTitle).build().createFormData(); - } - - } - @Nested class TestAddFormEngineName { diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelFormDataTestFactory.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelFormDataTestFactory.java index 8b8c9bf4103b13f085a7910361925a11e7b90297..969f4a635ed892e59106591f73d945b27f0b40be 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelFormDataTestFactory.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelFormDataTestFactory.java @@ -8,20 +8,17 @@ import java.util.function.Predicate; import java.util.stream.IntStream; import de.ozgcloud.eingang.common.formdata.FormData; -import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory; import lombok.Builder; class DFoerdermittelFormDataTestFactory { static final String FORM_NAME = "Name of form"; - static final String FORM_ID = "Wert von ProjectTitle"; static final String POSTFACH_ID = "4dd01647-b9d9-4775-1b50-08da3d83800a"; static final String ORGANISATIONS_EINHEIT_ID = "9795669"; static Fachnachricht.FachnachrichtBuilder createFachnachrichtBuilder() { return Fachnachricht.builder() .title(FORM_NAME) - .projectTitle(FORM_ID) .postfachId(POSTFACH_ID) .organisationsEinheitId(ORGANISATIONS_EINHEIT_ID); } @@ -36,7 +33,6 @@ class DFoerdermittelFormDataTestFactory { static FormData.FormDataBuilder createBuilderWithFachnachricht(Fachnachricht fachnachricht) { return FormData.builder() - .header(FormHeaderTestFactory.create()) .formData(Map.of("Fachnachricht", createFachnachrichtMapWithFachnachricht(fachnachricht))); } @@ -48,7 +44,6 @@ class DFoerdermittelFormDataTestFactory { return createMapWithValueFilter( Objects::nonNull, "Title", fachnachricht.title(), - "ProjectTitle", fachnachricht.projectTitle(), "InboxReference", "sh/sh/" + fachnachricht.postfachId(), "MetaText1", fachnachricht.organisationsEinheitId() ); @@ -66,7 +61,7 @@ class DFoerdermittelFormDataTestFactory { } @Builder - record Fachnachricht(String title, String projectTitle, String postfachId, String organisationsEinheitId) { + record Fachnachricht(String title, String postfachId, String organisationsEinheitId) { FormData createFormData() { return createBuilderWithFachnachricht(this).build(); }