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

OZG-6344 KOP-2585: Use ProjectTitle as formId

parent 882b0c24
No related branches found
No related tags found
No related merge requests found
......@@ -8,6 +8,8 @@ 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;
......@@ -17,11 +19,12 @@ 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.enginebased.EngineBasedSemantikAdapter;
import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
import lombok.NonNull;
import lombok.extern.log4j.Log4j2;
......@@ -36,6 +39,7 @@ 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: Ohne Titel";
......@@ -51,26 +55,50 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
}
FormData processFachnachricht(FormData formData) {
Map<String, Object> fachnachricht = getFachnachricht(formData);
return pipe(
formData,
Stream.of(
this::addFormName,
this::addFormEngineName,
this::addServiceKonto,
this::addOrganisationsEinheitId,
this::addFormId
)
);
}
var extendedFormData = addFormName(formData);
extendedFormData = addFormEngineName(extendedFormData);
extendedFormData = addServiceKonto(extendedFormData, fachnachricht);
return addOrganisationsEinheitId(extendedFormData, fachnachricht);
private FormData pipe(FormData formData, Stream<UnaryOperator<FormData>> functions) {
return functions
.reduce(formData, (acc, f) -> f.apply(acc), (a, b) -> a);
}
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) {
return Optional.ofNullable((String) fachnachricht.get(KEY_POSTFACH_ID))
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))
.map(this::extractPrefix)
.map(this::createServiceKonto)
.map(serviceKonto -> formData.getHeader().toBuilder().serviceKonto(serviceKonto).build())
.map(header -> formData.toBuilder().header(header).build())
.map(serviceKonto -> mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.serviceKonto(serviceKonto)))
.orElse(formData);
}
FormData addOrganisationsEinheitId(FormData formData, Map<String, Object> fachnachricht) {
return Optional.ofNullable((String) fachnachricht.get(KEY_ORGANISATIONS_EINHEIT_ID))
FormData addOrganisationsEinheitId(FormData formData) {
return Optional.ofNullable((String) getFachnachricht(formData).get(KEY_ORGANISATIONS_EINHEIT_ID))
.map(orgaId -> addOrganisationsEinheitId(orgaId, formData.getZustaendigeStelle()))
.map(zustStelle -> formData.toBuilder().zustaendigeStelle(zustStelle).build())
.orElse(formData);
......@@ -88,16 +116,10 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
}
FormData addFormName(FormData formData) {
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);
return mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formName(
getNonEmptyFachnachrichtValueByKey(formData, KEY_FORM_NAME)
.orElse(DEFAULT_FORM_NAME)
));
}
@SuppressWarnings("unchecked")
......@@ -106,12 +128,7 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
}
FormData addFormEngineName(FormData formData) {
return formData.toBuilder()
.header(formData.getHeader().toBuilder()
.formEngineName("dFördermittelantrag")
.build()
)
.build();
return mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formEngineName("dFördermittelantrag"));
}
String extractPrefix(@NonNull String postfachId) {
......
......@@ -22,6 +22,7 @@ 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;
......@@ -153,22 +154,23 @@ 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, fachnachrichtMap);
doReturn(formData4).when(adapter).addOrganisationsEinheitId(formData3, fachnachrichtMap);
doReturn(formData3).when(adapter).addServiceKonto(formData2);
doReturn(formData4).when(adapter).addOrganisationsEinheitId(formData3);
doReturn(formData5).when(adapter).addFormId(formData4);
}
@Test
void shouldReturn() {
var processedFormData = adapter.processFachnachricht(formData0);
assertThat(processedFormData).isEqualTo(formData4);
assertThat(processedFormData).isEqualTo(formData5);
}
}
......@@ -182,8 +184,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
@Test
void shouldHaveServiceKonto() {
var formData = adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create(),
DFoerdermittelFormDataTestFactory.createFachnachrichtMap());
var formData = adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create());
assertThat(formData.getHeader().getServiceKonto().getPostfachAddresses().get(0).getIdentifier())
.asInstanceOf(type(StringBasedIdentifier.class)).extracting(StringBasedIdentifier::getPostfachId)
......@@ -192,7 +193,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
@Test
void shouldRemovePrefix() {
adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create(), DFoerdermittelFormDataTestFactory.createFachnachrichtMap());
adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create());
verify(serviceKontoFactory).buildOsiServiceKonto(DFoerdermittelFormDataTestFactory.POSTFACH_ID);
}
......@@ -219,8 +220,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
class TestAddOrganisationsEinheitId {
@Test
void shouldHaveOrganisationsEinheitId() {
var formData = adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create(),
DFoerdermittelFormDataTestFactory.createFachnachrichtMap());
var formData = adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create());
assertThat(formData.getZustaendigeStelle()).isNotNull().extracting(ZustaendigeStelle::getOrganisationseinheitenId)
.isEqualTo(ORGANISATIONS_EINHEIT_ID);
......@@ -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
class TestAddFormEngineName {
......
......@@ -8,17 +8,20 @@ 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);
}
......@@ -33,6 +36,7 @@ class DFoerdermittelFormDataTestFactory {
static FormData.FormDataBuilder createBuilderWithFachnachricht(Fachnachricht fachnachricht) {
return FormData.builder()
.header(FormHeaderTestFactory.create())
.formData(Map.of("Fachnachricht", createFachnachrichtMapWithFachnachricht(fachnachricht)));
}
......@@ -44,6 +48,7 @@ class DFoerdermittelFormDataTestFactory {
return createMapWithValueFilter(
Objects::nonNull,
"Title", fachnachricht.title(),
"ProjectTitle", fachnachricht.projectTitle(),
"InboxReference", "sh/sh/" + fachnachricht.postfachId(),
"MetaText1", fachnachricht.organisationsEinheitId()
);
......@@ -61,7 +66,7 @@ class DFoerdermittelFormDataTestFactory {
}
@Builder
record Fachnachricht(String title, String postfachId, String organisationsEinheitId) {
record Fachnachricht(String title, String projectTitle, String postfachId, String organisationsEinheitId) {
FormData createFormData() {
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