Skip to content
Snippets Groups Projects
Commit d21025a8 authored by Jan Zickermann's avatar Jan Zickermann
Browse files

Reapply "OZG-6344 KOP-2585: Use ProjectTitle as formId"

This reverts commit 9a280f28.
parent 6bfae086
No related branches found
No related tags found
No related merge requests found
...@@ -8,6 +8,8 @@ import java.util.Map; ...@@ -8,6 +8,8 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.function.Predicate; 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.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -17,11 +19,12 @@ import org.springframework.stereotype.Component; ...@@ -17,11 +19,12 @@ import org.springframework.stereotype.Component;
import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import de.ozgcloud.eingang.common.formdata.FormData; 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.IncomingFile;
import de.ozgcloud.eingang.common.formdata.ServiceKonto; import de.ozgcloud.eingang.common.formdata.ServiceKonto;
import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory; import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
import lombok.NonNull; import lombok.NonNull;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
...@@ -36,8 +39,9 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema ...@@ -36,8 +39,9 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
private static final String KEY_POSTFACH_ID = "InboxReference"; private static final String KEY_POSTFACH_ID = "InboxReference";
private static final String KEY_ORGANISATIONS_EINHEIT_ID = "MetaText1"; private static final String KEY_ORGANISATIONS_EINHEIT_ID = "MetaText1";
private static final String KEY_FORM_NAME = "Title"; private static final String KEY_FORM_NAME = "Title";
private static final String KEY_FORM_ID = "ProjectTitle";
static final String DEFAULT_FORM_NAME = "dFördermittelantrag: Ohne Titel"; static final String DEFAULT_FORM_NAME = "dFördermittelantrag";
@Autowired @Autowired
private ServiceKontoFactory serviceKontoFactory; private ServiceKontoFactory serviceKontoFactory;
...@@ -51,26 +55,49 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema ...@@ -51,26 +55,49 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
} }
FormData processFachnachricht(FormData formData) { FormData processFachnachricht(FormData formData) {
Map<String, Object> fachnachricht = getFachnachricht(formData); return pipe(
Stream.of(
this::addFormName,
this::addFormEngineName,
this::addServiceKonto,
this::addOrganisationsEinheitId,
this::addFormId
)
).apply(formData);
}
var extendedFormData = addFormName(formData); private UnaryOperator<FormData> pipe(Stream<UnaryOperator<FormData>> functions) {
extendedFormData = addFormEngineName(extendedFormData); return (formData) -> functions
extendedFormData = addServiceKonto(extendedFormData, fachnachricht); .reduce(formData, (acc, f) -> f.apply(acc), (a, b) -> a);
return addOrganisationsEinheitId(extendedFormData, fachnachricht);
} }
FormData addFormId(FormData formData) {
return getNonEmptyFachnachrichtValueByKey(formData, KEY_FORM_ID)
.map(formId -> mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formId(formId)))
.orElse(formData);
}
FormData addServiceKonto(FormData formData, Map<String, Object> fachnachricht) { private Optional<String> getNonEmptyFachnachrichtValueByKey(FormData formData, String key) {
return Optional.ofNullable((String) fachnachricht.get(KEY_POSTFACH_ID)) 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))
.map(this::extractPrefix) .map(this::extractPrefix)
.map(this::createServiceKonto) .map(this::createServiceKonto)
.map(serviceKonto -> formData.getHeader().toBuilder().serviceKonto(serviceKonto).build()) .map(serviceKonto -> mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.serviceKonto(serviceKonto)))
.map(header -> formData.toBuilder().header(header).build())
.orElse(formData); .orElse(formData);
} }
FormData addOrganisationsEinheitId(FormData formData, Map<String, Object> fachnachricht) { FormData addOrganisationsEinheitId(FormData formData) {
return Optional.ofNullable((String) fachnachricht.get(KEY_ORGANISATIONS_EINHEIT_ID)) return Optional.ofNullable((String) getFachnachricht(formData).get(KEY_ORGANISATIONS_EINHEIT_ID))
.map(orgaId -> addOrganisationsEinheitId(orgaId, formData.getZustaendigeStelle())) .map(orgaId -> addOrganisationsEinheitId(orgaId, formData.getZustaendigeStelle()))
.map(zustStelle -> formData.toBuilder().zustaendigeStelle(zustStelle).build()) .map(zustStelle -> formData.toBuilder().zustaendigeStelle(zustStelle).build())
.orElse(formData); .orElse(formData);
...@@ -88,16 +115,10 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema ...@@ -88,16 +115,10 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
} }
FormData addFormName(FormData formData) { FormData addFormName(FormData formData) {
return formData.toBuilder() return mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formName(
.header(formData.getHeader().toBuilder() getNonEmptyFachnachrichtValueByKey(formData, KEY_FORM_NAME)
.formName(getFormName(formData).orElse(DEFAULT_FORM_NAME)) .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") @SuppressWarnings("unchecked")
...@@ -106,12 +127,7 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema ...@@ -106,12 +127,7 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
} }
FormData addFormEngineName(FormData formData) { FormData addFormEngineName(FormData formData) {
return formData.toBuilder() return mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formEngineName("dFördermittelantrag"));
.header(formData.getHeader().toBuilder()
.formEngineName("dFördermittelantrag")
.build()
)
.build();
} }
String extractPrefix(@NonNull String postfachId) { String extractPrefix(@NonNull String postfachId) {
......
...@@ -22,6 +22,7 @@ import de.ozgcloud.common.binaryfile.TempFileUtils; ...@@ -22,6 +22,7 @@ import de.ozgcloud.common.binaryfile.TempFileUtils;
import de.ozgcloud.common.test.TestUtils; import de.ozgcloud.common.test.TestUtils;
import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; 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.IncomingFile;
import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory; import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory;
import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory;
...@@ -153,22 +154,23 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { ...@@ -153,22 +154,23 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
@Mock @Mock
FormData formData4; FormData formData4;
@Mock
FormData formData5;
@BeforeEach @BeforeEach
void mock() { void mock() {
var formData = DFoerdermittelFormDataTestFactory.create();
var fachnachrichtMap = DFoerdermittelFormDataTestFactory.createFachnachrichtMap();
when(formData0.getFormData()).thenReturn(formData.getFormData());
doReturn(formData1).when(adapter).addFormName(formData0); doReturn(formData1).when(adapter).addFormName(formData0);
doReturn(formData2).when(adapter).addFormEngineName(formData1); doReturn(formData2).when(adapter).addFormEngineName(formData1);
doReturn(formData3).when(adapter).addServiceKonto(formData2, fachnachrichtMap); doReturn(formData3).when(adapter).addServiceKonto(formData2);
doReturn(formData4).when(adapter).addOrganisationsEinheitId(formData3, fachnachrichtMap); doReturn(formData4).when(adapter).addOrganisationsEinheitId(formData3);
doReturn(formData5).when(adapter).addFormId(formData4);
} }
@Test @Test
void shouldReturn() { void shouldReturn() {
var processedFormData = adapter.processFachnachricht(formData0); var processedFormData = adapter.processFachnachricht(formData0);
assertThat(processedFormData).isEqualTo(formData4); assertThat(processedFormData).isEqualTo(formData5);
} }
} }
...@@ -182,8 +184,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { ...@@ -182,8 +184,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
@Test @Test
void shouldHaveServiceKonto() { void shouldHaveServiceKonto() {
var formData = adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create(), var formData = adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create());
DFoerdermittelFormDataTestFactory.createFachnachrichtMap());
assertThat(formData.getHeader().getServiceKonto().getPostfachAddresses().get(0).getIdentifier()) assertThat(formData.getHeader().getServiceKonto().getPostfachAddresses().get(0).getIdentifier())
.asInstanceOf(type(StringBasedIdentifier.class)).extracting(StringBasedIdentifier::getPostfachId) .asInstanceOf(type(StringBasedIdentifier.class)).extracting(StringBasedIdentifier::getPostfachId)
...@@ -192,7 +193,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { ...@@ -192,7 +193,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
@Test @Test
void shouldRemovePrefix() { void shouldRemovePrefix() {
adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create(), DFoerdermittelFormDataTestFactory.createFachnachrichtMap()); adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create());
verify(serviceKontoFactory).buildOsiServiceKonto(DFoerdermittelFormDataTestFactory.POSTFACH_ID); verify(serviceKontoFactory).buildOsiServiceKonto(DFoerdermittelFormDataTestFactory.POSTFACH_ID);
} }
...@@ -219,8 +220,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { ...@@ -219,8 +220,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
class TestAddOrganisationsEinheitId { class TestAddOrganisationsEinheitId {
@Test @Test
void shouldHaveOrganisationsEinheitId() { void shouldHaveOrganisationsEinheitId() {
var formData = adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create(), var formData = adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create());
DFoerdermittelFormDataTestFactory.createFachnachrichtMap());
assertThat(formData.getZustaendigeStelle()).isNotNull().extracting(ZustaendigeStelle::getOrganisationseinheitenId) assertThat(formData.getZustaendigeStelle()).isNotNull().extracting(ZustaendigeStelle::getOrganisationseinheitenId)
.isEqualTo(ORGANISATIONS_EINHEIT_ID); .isEqualTo(ORGANISATIONS_EINHEIT_ID);
...@@ -260,6 +260,40 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { ...@@ -260,6 +260,40 @@ 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 @Nested
class TestAddFormEngineName { class TestAddFormEngineName {
......
...@@ -8,17 +8,20 @@ import java.util.function.Predicate; ...@@ -8,17 +8,20 @@ import java.util.function.Predicate;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory;
import lombok.Builder; import lombok.Builder;
class DFoerdermittelFormDataTestFactory { class DFoerdermittelFormDataTestFactory {
static final String FORM_NAME = "Name of form"; 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 POSTFACH_ID = "4dd01647-b9d9-4775-1b50-08da3d83800a";
static final String ORGANISATIONS_EINHEIT_ID = "9795669"; static final String ORGANISATIONS_EINHEIT_ID = "9795669";
static Fachnachricht.FachnachrichtBuilder createFachnachrichtBuilder() { static Fachnachricht.FachnachrichtBuilder createFachnachrichtBuilder() {
return Fachnachricht.builder() return Fachnachricht.builder()
.title(FORM_NAME) .title(FORM_NAME)
.projectTitle(FORM_ID)
.postfachId(POSTFACH_ID) .postfachId(POSTFACH_ID)
.organisationsEinheitId(ORGANISATIONS_EINHEIT_ID); .organisationsEinheitId(ORGANISATIONS_EINHEIT_ID);
} }
...@@ -33,6 +36,7 @@ class DFoerdermittelFormDataTestFactory { ...@@ -33,6 +36,7 @@ class DFoerdermittelFormDataTestFactory {
static FormData.FormDataBuilder createBuilderWithFachnachricht(Fachnachricht fachnachricht) { static FormData.FormDataBuilder createBuilderWithFachnachricht(Fachnachricht fachnachricht) {
return FormData.builder() return FormData.builder()
.header(FormHeaderTestFactory.create())
.formData(Map.of("Fachnachricht", createFachnachrichtMapWithFachnachricht(fachnachricht))); .formData(Map.of("Fachnachricht", createFachnachrichtMapWithFachnachricht(fachnachricht)));
} }
...@@ -44,6 +48,7 @@ class DFoerdermittelFormDataTestFactory { ...@@ -44,6 +48,7 @@ class DFoerdermittelFormDataTestFactory {
return createMapWithValueFilter( return createMapWithValueFilter(
Objects::nonNull, Objects::nonNull,
"Title", fachnachricht.title(), "Title", fachnachricht.title(),
"ProjectTitle", fachnachricht.projectTitle(),
"InboxReference", "sh/sh/" + fachnachricht.postfachId(), "InboxReference", "sh/sh/" + fachnachricht.postfachId(),
"MetaText1", fachnachricht.organisationsEinheitId() "MetaText1", fachnachricht.organisationsEinheitId()
); );
...@@ -61,7 +66,7 @@ class DFoerdermittelFormDataTestFactory { ...@@ -61,7 +66,7 @@ class DFoerdermittelFormDataTestFactory {
} }
@Builder @Builder
record Fachnachricht(String title, String postfachId, String organisationsEinheitId) { record Fachnachricht(String title, String projectTitle, String postfachId, String organisationsEinheitId) {
FormData createFormData() { FormData createFormData() {
return createBuilderWithFachnachricht(this).build(); return createBuilderWithFachnachricht(this).build();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment