Skip to content
Snippets Groups Projects
Commit 14c1d2f6 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-3757 some cleanups; add postfachId to formHeader

parent 5dc2dda3
No related branches found
No related tags found
No related merge requests found
Showing
with 98 additions and 17 deletions
...@@ -43,7 +43,8 @@ public class FormData { ...@@ -43,7 +43,8 @@ public class FormData {
@Builder.Default @Builder.Default
private String id = UUID.randomUUID().toString(); private String id = UUID.randomUUID().toString();
private FormHeader header; @Builder.Default
private FormHeader header = FormHeader.builder().build();
private ZustaendigeStelle zustaendigeStelle; private ZustaendigeStelle zustaendigeStelle;
@ToString.Exclude @ToString.Exclude
......
...@@ -32,7 +32,7 @@ import lombok.ToString; ...@@ -32,7 +32,7 @@ import lombok.ToString;
@Getter @Getter
@Setter @Setter
@Builder @Builder(toBuilder = true)
@ToString @ToString
public class FormHeader { public class FormHeader {
......
...@@ -25,11 +25,11 @@ public class ServiceKontoBuildHelper { ...@@ -25,11 +25,11 @@ public class ServiceKontoBuildHelper {
public static final String REST_RESPONSE_NAME_MEMBER_SCOPE = "memberscope"; public static final String REST_RESPONSE_NAME_MEMBER_SCOPE = "memberscope";
public static final String REST_RESPONSE_NAME_MEMBER_SCOPE_MAILBOX_TYPE = "mailboxtype"; public static final String REST_RESPONSE_NAME_MEMBER_SCOPE_MAILBOX_TYPE = "mailboxtype";
public ServiceKonto buildServicekonto(String postfachId) { public ServiceKonto buildServiceKonto(String postfachId) {
return buildDefault(postfachId); return buildDefault(postfachId);
} }
public ServiceKonto buildServiceKonto(String postfachId, FormData formData) { // NOSONAR public ServiceKonto buildServiceKonto(String postfachId, FormData formData) {
return Optional.ofNullable(getRestResponseNames(formData)) return Optional.ofNullable(getRestResponseNames(formData))
.filter(names -> !names.isEmpty()) .filter(names -> !names.isEmpty())
.map(restResponseNames -> buildWithRestResponseNames(postfachId, restResponseNames)) .map(restResponseNames -> buildWithRestResponseNames(postfachId, restResponseNames))
......
...@@ -66,7 +66,7 @@ class FormSolutionsHeaderMapper implements FormSolutionsEngineBasedMapper { ...@@ -66,7 +66,7 @@ class FormSolutionsHeaderMapper implements FormSolutionsEngineBasedMapper {
.requestId(getRequestId(formData)) .requestId(getRequestId(formData))
.formEngineName(FORM_ENGINE_NAME); .formEngineName(FORM_ENGINE_NAME);
Optional.ofNullable(getPostkorbhandle(formData)).map(serviceKontoBuildHelper::buildServicekonto).ifPresent(formHeaderBuilder::serviceKonto); Optional.ofNullable(getPostkorbhandle(formData)).map(serviceKontoBuildHelper::buildServiceKonto).ifPresent(formHeaderBuilder::serviceKonto);
return formHeaderBuilder.build(); return formHeaderBuilder.build();
} }
......
...@@ -5,23 +5,34 @@ import java.io.InputStream; ...@@ -5,23 +5,34 @@ import java.io.InputStream;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.function.Predicate; import java.util.function.Predicate;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData; import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile; import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
import de.itvsh.kop.eingangsadapter.common.formdata.ServiceKonto;
import de.itvsh.kop.eingangsadapter.semantik.enginebased.ServiceKontoBuildHelper;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@Log4j2 @Log4j2
@Component
public class DFoerdermittelFormBasedMapper implements FormBasedMapper { public class DFoerdermittelFormBasedMapper implements FormBasedMapper {
private static final String FACHNACHRICHT_SUFFIX = "Fachnachricht.xml"; private static final String FACHNACHRICHT_SUFFIX = "Fachnachricht.xml";
private static final Predicate<IncomingFile> IS_FACHNACHRICHT = inFile -> StringUtils.endsWith(inFile.getName(), FACHNACHRICHT_SUFFIX); private static final Predicate<IncomingFile> IS_FACHNACHRICHT = inFile -> StringUtils.endsWith(inFile.getName(), FACHNACHRICHT_SUFFIX);
private static final String KEY_FACHNACHRICHT = "Fachnachricht"; private static final String KEY_FACHNACHRICHT = "Fachnachricht";
private static final String KEY_POSTFACH_ID = "InboxReference";
@Autowired
private ServiceKontoBuildHelper serviceKontoHelper;
@Override @Override
public FormData parseFormData(FormData formData) { public FormData parseFormData(FormData formData) {
...@@ -30,11 +41,28 @@ public class DFoerdermittelFormBasedMapper implements FormBasedMapper { ...@@ -30,11 +41,28 @@ public class DFoerdermittelFormBasedMapper implements FormBasedMapper {
.orElse(formData); .orElse(formData);
} }
FormData addServiceKonto(FormData formData) {
@SuppressWarnings("unchecked")
Map<String, Object> fachnachricht = (Map<String, Object>) MapUtils.getMap(formData.getFormData(), KEY_FACHNACHRICHT,
Collections.<String, Object>emptyMap());
return Optional.ofNullable((String) fachnachricht.get(KEY_POSTFACH_ID))
.map(this::createServiceKonto)
.map(serviceKonto -> formData.getHeader().toBuilder().serviceKonto(serviceKonto).build())
.map(header -> formData.toBuilder().header(header).build())
.orElse(formData);
}
private ServiceKonto createServiceKonto(String postfachId) {
return serviceKontoHelper.buildServiceKonto(postfachId);
}
FormData parseFachnachricht(FormData formData, IncomingFile fachnachrichtFile) { FormData parseFachnachricht(FormData formData, IncomingFile fachnachrichtFile) {
// TODO allow re-reading of incoming file // TODO allow re-reading of incoming file
var fachnachrichtData = extractFormDataFormXML(fachnachrichtFile.getContentStream()); var fachnachrichtData = extractFormDataFormXML(fachnachrichtFile.getContentStream());
if (fachnachrichtData != null) { if (MapUtils.isNotEmpty(fachnachrichtData)) {
var editable = new HashMap<>(formData.getFormData()); var editable = new HashMap<>(formData.getFormData());
editable.put(KEY_FACHNACHRICHT, fachnachrichtData); editable.put(KEY_FACHNACHRICHT, fachnachrichtData);
return formData.toBuilder().formData(Collections.unmodifiableMap(editable)).build(); return formData.toBuilder().formData(Collections.unmodifiableMap(editable)).build();
...@@ -52,7 +80,7 @@ public class DFoerdermittelFormBasedMapper implements FormBasedMapper { ...@@ -52,7 +80,7 @@ public class DFoerdermittelFormBasedMapper implements FormBasedMapper {
} catch (IOException e) { } catch (IOException e) {
LOG.error("Error reading xml fachnachricht.", e); LOG.error("Error reading xml fachnachricht.", e);
} }
return null; return Collections.emptyMap();
} }
@Override @Override
......
...@@ -119,7 +119,7 @@ class FormSolutionsHeaderMapperTest { ...@@ -119,7 +119,7 @@ class FormSolutionsHeaderMapperTest {
void shouldCallServiceKontoBuildHelper() { void shouldCallServiceKontoBuildHelper() {
buildFormHeader(); buildFormHeader();
verify(serviceKontoBuildHelper).buildServicekonto(any()); verify(serviceKontoBuildHelper).buildServiceKonto(any());
} }
@Test @Test
...@@ -128,7 +128,7 @@ class FormSolutionsHeaderMapperTest { ...@@ -128,7 +128,7 @@ class FormSolutionsHeaderMapperTest {
mapper.buildFormHeader(formDataWithoutPostkorbHandle); mapper.buildFormHeader(formDataWithoutPostkorbHandle);
verify(serviceKontoBuildHelper, never()).buildServicekonto(any()); verify(serviceKontoBuildHelper, never()).buildServiceKonto(any());
} }
} }
......
...@@ -11,12 +11,15 @@ import org.junit.jupiter.api.BeforeEach; ...@@ -11,12 +11,15 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy; import org.mockito.Spy;
import de.itvsh.kop.common.test.TestUtils; import de.itvsh.kop.common.test.TestUtils;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData; import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.common.formdata.FormDataTestFactory; import de.itvsh.kop.eingangsadapter.common.formdata.FormDataTestFactory;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile; import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
import de.itvsh.kop.eingangsadapter.common.formdata.ServiceKontoTestFactory;
import de.itvsh.kop.eingangsadapter.semantik.enginebased.ServiceKontoBuildHelper;
class DFoerdermittelFormBasedMapperTest { class DFoerdermittelFormBasedMapperTest {
...@@ -24,6 +27,9 @@ class DFoerdermittelFormBasedMapperTest { ...@@ -24,6 +27,9 @@ class DFoerdermittelFormBasedMapperTest {
@InjectMocks @InjectMocks
private DFoerdermittelFormBasedMapper mapper; private DFoerdermittelFormBasedMapper mapper;
@Mock
private ServiceKontoBuildHelper serviceKontoHelper;
@Nested @Nested
class TestIsResponsible { class TestIsResponsible {
...@@ -72,15 +78,12 @@ class DFoerdermittelFormBasedMapperTest { ...@@ -72,15 +78,12 @@ class DFoerdermittelFormBasedMapperTest {
@Nested @Nested
class HandleFachnachrichtData { class HandleFachnachrichtData {
private Map<String, Object> extracted = Collections.emptyMap(); private Map<String, Object> extracted = Map.of("name", "Theo");
@BeforeEach
void init() {
doReturn(extracted).when(mapper).extractFormDataFormXML(any());
}
@Test @Test
void shouldCallExtractData() { void shouldCallExtractData() {
doReturn(extracted).when(mapper).extractFormDataFormXML(any());
mapper.parseFachnachricht(createWithFachnachricht(), createFachnachrichtFile()); mapper.parseFachnachricht(createWithFachnachricht(), createFachnachrichtFile());
verify(mapper).extractFormDataFormXML(notNull()); verify(mapper).extractFormDataFormXML(notNull());
...@@ -88,13 +91,22 @@ class DFoerdermittelFormBasedMapperTest { ...@@ -88,13 +91,22 @@ class DFoerdermittelFormBasedMapperTest {
@Test @Test
void shouldAddMap() { void shouldAddMap() {
doReturn(extracted).when(mapper).extractFormDataFormXML(any());
var result = mapper.parseFachnachricht(createWithFachnachricht(), createFachnachrichtFile()); var result = mapper.parseFachnachricht(createWithFachnachricht(), createFachnachrichtFile());
assertThat(result.getFormData()).containsEntry("Fachnachricht", extracted); assertThat(result.getFormData()).containsEntry("Fachnachricht", extracted);
} }
}
@Test
void shouldIgnoreEmptyData() {
doReturn(Collections.emptyMap()).when(mapper).extractFormDataFormXML(any());
var result = mapper.parseFachnachricht(createWithFachnachricht(), createFachnachrichtFile());
assertThat(result.getFormData()).doesNotContainKey("Fachnachricht");
}
}
} }
FormData createWithFachnachricht() { FormData createWithFachnachricht() {
...@@ -112,4 +124,20 @@ class DFoerdermittelFormBasedMapperTest { ...@@ -112,4 +124,20 @@ class DFoerdermittelFormBasedMapperTest {
.name("Beispieldatensatz_Fachnachricht.xml") .name("Beispieldatensatz_Fachnachricht.xml")
.build(); .build();
} }
@Nested
class TestAddServiceKonto {
@BeforeEach
void init() {
when(serviceKontoHelper.buildServiceKonto(any())).thenReturn(ServiceKontoTestFactory.create());
}
@Test
void shouldHaveServiceKonto() {
var formData = mapper.addServiceKonto(DFoerdermittelFormDataTestFactory.create());
assertThat(formData.getHeader().getServiceKonto()).isNotNull();
}
}
} }
package de.itvsh.kop.eingangsadapter.semantik.formbased;
import java.util.Map;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
class DFoerdermittelFormDataTestFactory {
static FormData create() {
return createBuilder().build();
}
static FormData.FormDataBuilder createBuilder() {
return FormData.builder()
.formData(Map.of("Fachnachricht", createFachnachrichtMap()));
}
static Map<String, Object> createFachnachrichtMap() {
return Map.of("InboxReference", "sh/sh/4dd01647-b9d9-4775-1b50-08da3d83800a");
}
}
...@@ -97,6 +97,9 @@ ...@@ -97,6 +97,9 @@
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>local,sec</profiles>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment