Skip to content
Snippets Groups Projects
Commit 1b7ff3d0 authored by OZG-Cloud Team's avatar OZG-Cloud Team
Browse files

Merge branch 'release'

# Conflicts:
#	common/pom.xml
#	formsolutions-adapter/pom.xml
#	formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRequestMapper.java
#	forwarder/pom.xml
#	intelliform-adapter/pom.xml
#	pom.xml
#	router/pom.xml
#	semantik-adapter/pom.xml
#	semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AbstractFileMapper.java
#	semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsAntragstellerMapper.java
#	semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsHeaderMapper.java
#	semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsZustaendigeStelleMapper.java
parents 69a6ced4 de6ef682
Branches
Tags
No related merge requests found
Showing
with 286 additions and 672 deletions
package de.itvsh.kop.eingangsadapter.common.formdata;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import lombok.NonNull;
public class FormDataUtils {
final FormData baseFormData;
final Map<String, Object> modifieableData;
private FormDataUtils(FormData formData) {
baseFormData = formData;
modifieableData = new HashMap<>(formData.getFormData());
}
public static FormDataUtils from(FormData formData) {
return new FormDataUtils(formData);
}
public FormDataUtils remove(String key) {
modifieableData.remove(key);
return this;
}
public FormDataUtils put(@NonNull String key, Object value) {
modifieableData.put(key, value);
return this;
}
public FormData.FormDataBuilder builder() {
return baseFormData.toBuilder().formData(Collections.unmodifiableMap(modifieableData));
}
public FormData build() {
return builder().build();
}
@SuppressWarnings("unchecked")
public static Map<String, Object> getSubMap(FormData formData, String key) {
return (Map<String, Object>) formData.getFormData().get(key);
}
}
......@@ -45,6 +45,7 @@ public class FormSolutionsTestFactory {
public static final String ZUSTAENDIGE_STELLE_VALUE = "zustaendigeStelle";
public static final String POSTFACH_ID_STELLE = "51522620-03d2-4507-b1f0-08d86920efed";
public static final String FORM_ID_VALUE = "KFAS_KOP_TEST-yCkgCdqG";
// TODO vereinfachen und in Datei(en acken
public static final String SIMPLE_JSON_DATA = "{\"assistant\": "
+ "{\"identifier\":\"" + IDENTIFIER_VALUE + "\",\n"
+ "\"panels\": [{\"identifier\":\"" + PANEL_ID + "\",\n"
......
......@@ -28,6 +28,7 @@ import java.util.UUID;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
interface FormSolutionsFileMapper {
// TODO auf utils Klasse umstellen - interface abschaffen
default IncomingFile mapFile(byte[] data, String contentType, String fileName) {
return IncomingFile.builder()
.content(data)
......
......@@ -23,10 +23,6 @@
*/
package de.itvsh.kop.eingangsadapter.formsolutions;
import static de.itvsh.kop.eingangsadapter.formsolutions.FormSolutionsAttachmentsMapper.*;
import static de.itvsh.kop.eingangsadapter.formsolutions.FormSolutionsRepresentationsMapper.*;
import static de.itvsh.kop.eingangsadapter.semantik.enginebased.AbstractFileMapper.*;
import java.util.Map;
import java.util.Optional;
......@@ -39,9 +35,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import de.itvsh.kop.common.errorhandling.TechnicalException;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.common.formdata.FormDataUtils;
import de.itvsh.kop.eingangsadapter.semantik.enginebased.AbstractFileMapper;
@Component
class FormSolutionsRequestMapper {
static final TypeReference<Map<String, Object>> VALUE_TYPE_REF = new TypeReference<Map<String, Object>>() {
};
@Autowired
private FormSolutionsAttachmentsMapper attachmentMapper;
......@@ -53,31 +54,39 @@ class FormSolutionsRequestMapper {
public FormData map(String json) {
var formData = mapRequestJson(json);
return mapFiles(formData, json);
formData.getFormData().put(MAPPED_FILES, Map.of(
ATTACHMENTS, attachmentMapper.mapAttachments(formData.getFormData()),
REPRESENTATIONS, representationMapper.mapRepresentations(formData.getFormData(), Optional.of(json))));
return removeProcessedData(formData);
}
private FormData mapRequestJson(String json) {
return FormData.builder()
.formData(mapFormData(json))
.build();
}
Map<String, Object> mapFormData(String json) {
try {
return FormData.builder().formData(objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {
})).build();
return objectMapper.readValue(json, VALUE_TYPE_REF);
} catch (JsonProcessingException e) {
throw new TechnicalException("Error parsing JSON from FormSolutions-Server", e);
}
}
//TEST
private FormData removeProcessedData(FormData formData) {
Map<String, Object> data = formData.getFormData();
//TODO immutable berucksichtigen
data.remove(ZIP);
data.remove(PDF);
data.remove(JSON);
FormData mapFiles(FormData formData, String json) {
return FormDataUtils.from(formData)
.put(AbstractFileMapper.FIELD_NAME_MAPPED_FILES, buildMappedFiles(formData, json))
.remove(FormSolutionsAttachmentsMapper.ZIP)
.remove(FormSolutionsRepresentationsMapper.PDF)
.build();
return formData.toBuilder().formData(data).build();
}
private Map<String, Object> buildMappedFiles(FormData formData, String json) {
return Map.of(
AbstractFileMapper.ATTACHMENTS, attachmentMapper.mapAttachments(formData.getFormData()),
AbstractFileMapper.REPRESENTATIONS, representationMapper.mapRepresentations(formData.getFormData(), Optional.of(json)));
}
}
\ No newline at end of file
......@@ -34,11 +34,14 @@ import static org.mockito.Mockito.*;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Spy;
import com.fasterxml.jackson.core.JsonProcessingException;
......@@ -47,7 +50,8 @@ import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.itvsh.kop.common.errorhandling.TechnicalException;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.common.formdata.FormDataTestFactory;
import de.itvsh.kop.eingangsadapter.semantik.enginebased.AbstractFileMapper;
import de.itvsh.kop.eingangsadapter.semantik.enginebased.FormSolutionsPanelMapper;
class FormSolutionsRequestMapperTest {
......@@ -56,10 +60,10 @@ class FormSolutionsRequestMapperTest {
@Spy
@InjectMocks
private FormSolutionsRequestMapper mapper = new FormSolutionsRequestMapper();
private FormSolutionsRequestMapper mapper;
@Mock
private FormSolutionsAttachmentsMapper attachmentsMapper;
private FormSolutionsAttachmentsMapper attachmentMapper;
@Mock
private FormSolutionsRepresentationsMapper representationsMapper;
......@@ -70,153 +74,179 @@ class FormSolutionsRequestMapperTest {
class TestJsonToMapMapping {
@Test
void shouldMap() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat(dataMap).isNotNull();
}
@Test
void shouldNotFillSemantikFields() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
assertThat(dataMap.getZustaendigeStelle()).isNull();
assertThat(dataMap.getAntragsteller()).isNull();
assertThat(dataMap.getHeader()).isNull();
}
@Test
void shouldContainZustaendigeStelle() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat((String) dataMap.getFormData().get(ZUSTAENDIGE_STELLE)).isEqualTo(ORGANISATIONSEINHEITEN_ID);
assertThat((String) dataMap.get(ZUSTAENDIGE_STELLE)).isEqualTo(ORGANISATIONSEINHEITEN_ID);
}
@Test
void shouldContainAnsprechpartner() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat((String) dataMap.getFormData().get(POSTKORBHANDLE)).isEqualTo(POSTFACH_ID);
assertThat((String) dataMap.get(POSTKORBHANDLE)).isEqualTo(POSTFACH_ID);
}
@Test
void shouldContainRequestId() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat((String) dataMap.getFormData().get(TRANSACTION_ID)).isEqualTo(FORM_ID_VALUE);
assertThat((String) dataMap.get(TRANSACTION_ID)).isEqualTo(FORM_ID_VALUE);
}
@Test
void shouldContainAssitant() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat(dataMap.getFormData().get(ASSISTANT)).isNotNull();
assertThat(dataMap.get(ASSISTANT)).isNotNull();
}
@SuppressWarnings("unchecked")
@Test
void shouldHandleJsonException() throws JsonMappingException, JsonProcessingException {
doThrow(JsonProcessingException.class).when(objectMapper).readValue(anyString(), any(TypeReference.class));
doThrow(JsonProcessingException.class).when(objectMapper).readValue(anyString(), Mockito.<TypeReference<Map<String, Object>>>any());
assertThatThrownBy(() -> mapper.map(SIMPLE_JSON_DATA)).isInstanceOf(TechnicalException.class);
assertThatThrownBy(() -> mapper.mapFormData(SIMPLE_JSON_DATA)).isInstanceOf(TechnicalException.class);
}
@Test
@SuppressWarnings("unchecked")
void shouldContainFormIdentifier() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat((String) ((Map<String, Object>) dataMap.getFormData().get(ASSISTANT))
assertThat((String) ((Map<String, Object>) dataMap.get(ASSISTANT))
.get(IDENTIFIER))
.isEqualTo(IDENTIFIER_VALUE);
}
@Test
void shouldRemoveZip() {
var dataMap = mapper.map(ATTACHMENTS_JSON);
assertThat(dataMap.getFormData().get(FormSolutionsAttachmentsMapper.ZIP)).isNull();
}
@Test
void shouldRemovePdf() {
var dataMap = mapper.map(ATTACHMENTS_JSON);
assertThat(dataMap.getFormData().get(FormSolutionsRepresentationsMapper.PDF)).isNull();
}
}
@Nested
class TestPanels {
@Test
void shouldContainPanels() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat(getPanels(dataMap)).isNotNull();
}
@Test
void shouldContainPanelIdentifier() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat(getPanels(dataMap).get(0)).containsEntry(IDENTIFIER, PANEL_ID);
}
@Test
void shouldContainPanelComponets() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat(getPanels(dataMap).get(0).get(FormSolutionsPanelMapper.COMPONENTS)).isNotNull();
}
@Test
void shouldContainTextComponets() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat(getComponents(dataMap).get(0)).containsEntry(IDENTIFIER, COMPONENT_ID);
assertThat(getComponents(dataMap).get(0)).containsEntry(STRING_VALUE, COMPONENT_VALUE);
assertThat(getComponents(dataMap).get(0))
.containsEntry(IDENTIFIER, COMPONENT_ID)
.containsEntry(STRING_VALUE, COMPONENT_VALUE);
}
@Test
void shouldContainDateComponets() {
var dataMap = mapper.map(SIMPLE_JSON_DATA);
var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
assertThat(getComponents(dataMap).get(1)).containsEntry(IDENTIFIER, DATE_COMPONENT_ID);
assertThat(getComponents(dataMap).get(1)).containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE);
assertThat(getComponents(dataMap).get(1))
.containsEntry(IDENTIFIER, DATE_COMPONENT_ID)
.containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE);
}
@Nested
class TestNestedPanels {
@Test
void shouldContainGroup() {
var dataMap = mapper.map(NESTED_COMPONENTS_JSON);
var dataMap = mapper.mapFormData(NESTED_COMPONENTS_JSON);
assertThat(getComponents(dataMap).get(0)).containsEntry(IDENTIFIER, OBJEKTGRUPPE_0);
}
@Test
void shouldContainDateField() {
var dataMap = mapper.map(NESTED_COMPONENTS_JSON);
var dataMap = mapper.mapFormData(NESTED_COMPONENTS_JSON);
assertThat(getNestedComponents(dataMap).get(0)).containsEntry(IDENTIFIER, DATE_COMPONENT_ID);
assertThat(getNestedComponents(dataMap).get(0)).containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE);
assertThat(getNestedComponents(dataMap).get(0))
.containsEntry(IDENTIFIER, DATE_COMPONENT_ID)
.containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE);
}
}
}
@SuppressWarnings("unchecked")
private List<Map<String, Object>> getPanels(FormData dataMap) {
return (List<Map<String, Object>>) ((Map<String, Object>) dataMap.getFormData().get(ASSISTANT)).get(PANELS);
private List<Map<String, Object>> getComponents(Map<String, Object> dataMap) {
return (List<Map<String, Object>>) getPanels(dataMap).get(0).get(COMPONENTS);
}
@SuppressWarnings("unchecked")
private List<Map<String, Object>> getComponents(FormData dataMap) {
return (List<Map<String, Object>>) getPanels(dataMap).get(0).get(COMPONENTS);
private List<Map<String, Object>> getNestedComponents(Map<String, Object> dataMap) {
return (List<Map<String, Object>>) ((List<Map<String, Object>>) getPanels(dataMap).get(0).get(COMPONENTS)).get(0).get(COMPONENTS);
}
@SuppressWarnings("unchecked")
private List<Map<String, Object>> getNestedComponents(FormData dataMap) {
return (List<Map<String, Object>>) ((List<Map<String, Object>>) getPanels(dataMap).get(0).get(COMPONENTS)).get(0).get(COMPONENTS);
private List<Map<String, Object>> getPanels(Map<String, Object> dataMap) {
return (List<Map<String, Object>>) ((Map<String, Object>) dataMap.get(ASSISTANT)).get(PANELS);
}
}
@Nested
class TestFileMapping {
@Nested
class TestMapFiles {
@Test
void shouldCallAttachmentMappers() {
mapper.mapFiles(FormDataTestFactory.create(), ATTACHMENTS_JSON);
verify(attachmentMapper).mapAttachments(Mockito.<Map<String, Object>>any());
}
@DisplayName("result should have mapped files field")
@Test
void shouldHaveMappedFilesField() {
var result = mapper.mapFiles(FormDataTestFactory.create(), ATTACHMENTS_JSON);
assertThat(result.getFormData()).containsKey(AbstractFileMapper.FIELD_NAME_MAPPED_FILES);
}
@Test
void shouldCallRepresentationMapper() {
mapper.mapFiles(FormDataTestFactory.create(), ATTACHMENTS_JSON);
verify(representationsMapper).mapRepresentations(Mockito.<Map<String, Object>>any(), eq(Optional.of(ATTACHMENTS_JSON)));
}
@Test
void shouldRemoveZip() {
var formData = FormDataTestFactory.withFormDataMaps(Map.of(FormSolutionsAttachmentsMapper.ZIP, "test"));
var dataMap = mapper.mapFiles(formData, ATTACHMENTS_JSON);
assertThat(dataMap.getFormData()).doesNotContainKey(FormSolutionsAttachmentsMapper.ZIP);
}
@Test
void shouldRemovePdf() {
var formData = FormDataTestFactory.withFormDataMaps(Map.of(FormSolutionsRepresentationsMapper.PDF, "test"));
var dataMap = mapper.mapFiles(formData, ATTACHMENTS_JSON);
assertThat(dataMap.getFormData()).doesNotContainKey(FormSolutionsRepresentationsMapper.PDF);
}
}
}
}
......@@ -158,7 +158,7 @@ class SendFormEndpointITCase {
@SuppressWarnings("unchecked")
private IncomingFile getRepresentation(Map<String, Object> data) {
return ((List<IncomingFile>) ((Map<String, Object>) data.get(MAPPED_FILES)).get(PARSED_REPRESENTATIONS)).get(0);
return ((List<IncomingFile>) ((Map<String, Object>) data.get(FIELD_NAME_MAPPED_FILES)).get(PARSED_REPRESENTATIONS)).get(0);
}
}
......@@ -189,6 +189,6 @@ class SendFormEndpointITCase {
@SuppressWarnings("unchecked")
private Map<String, Object> getFiles(Map<String, Object> data) {
return (Map<String, Object>) data.get(MAPPED_FILES);
return (Map<String, Object>) data.get(FIELD_NAME_MAPPED_FILES);
}
}
/*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.eingangsadapter.intelliform;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import org.springframework.stereotype.Component;
import de.itvsh.kop.eingangsadapter.common.formdata.Antragsteller;
import de.itvsh.kop.eingangsadapter.common.formdata.Antragsteller.AntragstellerBuilder;
@Component
class AntragstellerMapper {
static final String XML_ANTRAGSTELLER = "antragsteller";
static final String XML_MAPPING_ANREDE = "b_anrede";
static final String XML_MAPPING_VORNAME = "pers_vorname";
static final String XML_MAPPING_NACHNAME = "pers_nachname";
static final String XML_MAPPING_GEBURTSNAME = "pers_geburtsname";
static final String XML_MAPPING_GEBURTSDATUM = "pers_geburtsdatum";
static final String XML_MAPPING_GEBURTSORT = "pers_geburtsort";
static final String XML_MAPPING_EMAIL = "kont_email";
static final String XML_MAPPING_TELEFON = "kont_telefonnummer";
static final String XML_MAPPING_STRASSE = "sh_strasse";
static final String XML_MAPPING_HAUSNUMMER = "sh_hausnummer";
static final String XML_MAPPING_PLZ = "sh_plz";
static final String XML_MAPPING_ORT = "ort";
static final String XML_MAPPING_POSTFACH_ID = "nameid";
private static final Set<String> XML_MAPPINGS = new HashSet<>(List.of(
XML_MAPPING_ANREDE,
XML_MAPPING_VORNAME,
XML_MAPPING_NACHNAME,
XML_MAPPING_GEBURTSNAME,
XML_MAPPING_GEBURTSDATUM,
XML_MAPPING_GEBURTSORT,
XML_MAPPING_EMAIL,
XML_MAPPING_TELEFON,
XML_MAPPING_STRASSE,
XML_MAPPING_HAUSNUMMER,
XML_MAPPING_PLZ,
XML_MAPPING_ORT,
XML_MAPPING_POSTFACH_ID));
public Antragsteller mapToAntragsteller(Map<String, Object> formDataMap) {
var builder = Antragsteller.builder().postfachId(getPostfachId(formDataMap));
var filledBuilder = getAntragstellerMap(formDataMap)
.map(antragstellerMap -> addAntragstellerData(builder, antragstellerMap))
.orElse(builder);
removeMappedData(formDataMap);
return filledBuilder.build();
}
private String getPostfachId(Map<String, Object> formDataMap) {
return (String) formDataMap.get(XML_MAPPING_POSTFACH_ID);
}
@SuppressWarnings("unchecked")
private Optional<Map<String, Object>> getAntragstellerMap(Map<String, Object> formDataMap) {
return Optional.ofNullable(formDataMap.get(XML_ANTRAGSTELLER)).map(Map.class::cast).map(HashMap::new);
}
private AntragstellerBuilder addAntragstellerData(AntragstellerBuilder builder, Map<String, Object> antragstellerMap) {
return builder //
.anrede((String) antragstellerMap.get(XML_MAPPING_ANREDE)) //
.vorname((String) antragstellerMap.get(XML_MAPPING_VORNAME)) //
.nachname((String) antragstellerMap.get(XML_MAPPING_NACHNAME)) //
.geburtsname((String) antragstellerMap.get(XML_MAPPING_GEBURTSNAME)) //
.geburtsdatum((String) antragstellerMap.get(XML_MAPPING_GEBURTSDATUM)) //
.geburtsort((String) antragstellerMap.get(XML_MAPPING_GEBURTSORT)) //
.email((String) antragstellerMap.get(XML_MAPPING_EMAIL)) //
.telefon((String) antragstellerMap.get(XML_MAPPING_TELEFON)) //
.strasse((String) antragstellerMap.get(XML_MAPPING_STRASSE)) //
.hausnummer((String) antragstellerMap.get(XML_MAPPING_HAUSNUMMER)) //
.plz((String) antragstellerMap.get(XML_MAPPING_PLZ)) //
.ort((String) antragstellerMap.get(XML_MAPPING_ORT)) //
.data(getNotMappedData(antragstellerMap));
}
private Map<String, Object> getNotMappedData(Map<String, Object> antragstellerMap) {
var tempMap = new HashMap<>(antragstellerMap);
XML_MAPPINGS.forEach(tempMap::remove);
return tempMap;
}
private void removeMappedData(Map<String, Object> formDataMap) {
formDataMap.remove(XML_ANTRAGSTELLER);
formDataMap.remove(XML_MAPPING_POSTFACH_ID);
}
}
\ No newline at end of file
......@@ -26,6 +26,7 @@ package de.itvsh.kop.eingangsadapter.intelliform;
import static de.itvsh.kop.eingangsadapter.semantik.enginebased.AbstractFileMapper.*;
import java.io.ByteArrayInputStream;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -41,6 +42,7 @@ import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileGroup;
import lombok.RequiredArgsConstructor;
//TODO Naming prüfen - er scheint mir nicht semantik zu mappen und befindet sich auch nicht im entsprechenden Modul
@Component
@RequiredArgsConstructor
class SemantikFormDataMapper {
......@@ -94,7 +96,7 @@ class SemantikFormDataMapper {
addHeader(document, formDataMap);
return FormData.builder().formData(formDataMap).build();
return FormData.builder().formData(Collections.unmodifiableMap(formDataMap)).build();
}
private byte[] getXmlFormData(DepositData depositData) {
......@@ -111,7 +113,7 @@ class SemantikFormDataMapper {
List<IncomingFile> representations = incomingFilesService.calculateRepresentations(attachments, depositRequestFiles);
formDataMap.put(MAPPED_FILES, Map.of(
formDataMap.put(FIELD_NAME_MAPPED_FILES, Map.of(
ATTACHMENTS, attachments,
REPRESENTATIONS, representations));
......
/*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.eingangsadapter.intelliform;
import static org.assertj.core.api.Assertions.*;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
class AntragstellerMapperTest {
private final static AntragstellerMapper mapper = new AntragstellerMapper();
@Nested
class TestMapToAntragsteller {
@Test
void shouldMapFields() {
var antragsteller = mapper.mapToAntragsteller(createDataMap());
assertThat(antragsteller).usingRecursiveComparison().ignoringFields("data").isEqualTo(AntragstellerTestFactory.create());
}
@Test
void shouldMapPostfachId() {
var antragsteller = mapper.mapToAntragsteller(createDataMap());
assertThat(antragsteller.getPostfachId()).isEqualTo(AntragstellerTestFactory.POSTFACH_ID);
}
@Nested
class TestOtherData {
private final String NOT_MAPPED_FIELD_KEY = "NotMappedField";
@Test
void shouldNotContainDuplicateValues() {
var antragsteller = mapper.mapToAntragsteller(createDataMap());
assertThat(antragsteller.getData()).doesNotContainKeys(
AntragstellerMapper.XML_MAPPING_ANREDE,
AntragstellerMapper.XML_MAPPING_EMAIL,
AntragstellerMapper.XML_MAPPING_GEBURTSDATUM,
AntragstellerMapper.XML_MAPPING_GEBURTSNAME,
AntragstellerMapper.XML_MAPPING_GEBURTSORT,
AntragstellerMapper.XML_MAPPING_NACHNAME,
AntragstellerMapper.XML_MAPPING_VORNAME,
AntragstellerMapper.XML_MAPPING_TELEFON,
AntragstellerMapper.XML_MAPPING_STRASSE,
AntragstellerMapper.XML_MAPPING_HAUSNUMMER,
AntragstellerMapper.XML_MAPPING_ORT,
AntragstellerMapper.XML_MAPPING_PLZ);
}
@Test
void shouldContainNotMappedData() {
var antragstellerMap = new HashMap<>(AntragstellerTestFactory.createAsMap());
antragstellerMap.put(NOT_MAPPED_FIELD_KEY, "Value!");
var antragsteller = mapper.mapToAntragsteller(createDataMap(antragstellerMap));
assertThat(antragsteller.getData()).containsKey(NOT_MAPPED_FIELD_KEY);
}
}
private Map<String, Object> createDataMap() {
return createDataMap(AntragstellerTestFactory.createAsMap());
}
private Map<String, Object> createDataMap(Map<String, Object> antragstellerMap) {
Map<String, Object> dataMap = new HashMap<>();
dataMap.put(AntragstellerMapper.XML_ANTRAGSTELLER, antragstellerMap);
dataMap.put(AntragstellerMapper.XML_MAPPING_POSTFACH_ID, AntragstellerTestFactory.POSTFACH_ID);
return dataMap;
}
}
}
\ No newline at end of file
/*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.eingangsadapter.intelliform;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import de.itvsh.kop.eingangsadapter.common.formdata.Antragsteller;
public class AntragstellerTestFactory {
static final String ANREDE = "Herr";
static final String VORNAME = "Max";
static final String NACHNAME = "Mustermann";
static final String GEBURTSNAME = "Maxi";
static final String GEBURTSDATUM = "01.01.1970";
static final String GEBURTSORT = "Sandhausen";
static final String EMAIL = "alsob@ne.ver";
static final String TELEFON = "+ 49 4621 9654";
static final String STRASSE = "Lachstrasse";
static final String HAUSNUMMER = "8484";
static final String PLZ = "12345";
static final String ORT = "Wohlfuehlhausen";
static final String POSTFACH_ID = UUID.randomUUID().toString();
public static Antragsteller create() {
return createBuilder().build();
}
public static Antragsteller.AntragstellerBuilder createBuilder() {
return Antragsteller.builder()
.anrede(ANREDE)
.vorname(VORNAME)
.nachname(NACHNAME)
.geburtsname(GEBURTSNAME)
.geburtsdatum(GEBURTSDATUM)
.geburtsort(GEBURTSORT)
.email(EMAIL)
.telefon(TELEFON)
.strasse(STRASSE)
.hausnummer(HAUSNUMMER)
.plz(PLZ)
.ort(ORT)
.postfachId(POSTFACH_ID);
}
public static Map<String, Object> createAsMap() {
var map = new HashMap<String, Object>();
map.put(AntragstellerMapper.XML_MAPPING_ANREDE, ANREDE);
map.put(AntragstellerMapper.XML_MAPPING_VORNAME, VORNAME);
map.put(AntragstellerMapper.XML_MAPPING_NACHNAME, NACHNAME);
map.put(AntragstellerMapper.XML_MAPPING_GEBURTSNAME, GEBURTSNAME);
map.put(AntragstellerMapper.XML_MAPPING_GEBURTSDATUM, GEBURTSDATUM);
map.put(AntragstellerMapper.XML_MAPPING_GEBURTSORT, GEBURTSORT);
map.put(AntragstellerMapper.XML_MAPPING_EMAIL, EMAIL);
map.put(AntragstellerMapper.XML_MAPPING_TELEFON, TELEFON);
map.put(AntragstellerMapper.XML_MAPPING_STRASSE, STRASSE);
map.put(AntragstellerMapper.XML_MAPPING_HAUSNUMMER, HAUSNUMMER);
map.put(AntragstellerMapper.XML_MAPPING_PLZ, PLZ);
map.put(AntragstellerMapper.XML_MAPPING_ORT, ORT);
return map;
}
}
\ No newline at end of file
......@@ -27,6 +27,7 @@ import static de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileGroupTest
import static org.assertj.core.api.Assertions.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -59,13 +60,11 @@ class SemantikFormDataMapperTest {
@Test
void shouldRemoveFileReferences() {
var formData = mapToFormData(deposit);
formData.getFormData().put(FILE_REF1, Map.of(SemantikFormDataMapper.FILE, Map.of(ID, VENDOR_ID_XXX)));
Map<String, Object> formDataMap = new HashMap<>(Map.of(FILE_REF1, Map.of(SemantikFormDataMapper.FILE, Map.of(ID, VENDOR_ID_XXX))));
mapper.removeMappedFileReferences(FILE_GROUPS, formData.getFormData());
mapper.removeMappedFileReferences(FILE_GROUPS, formDataMap);
assertThat(formData.getFormData()).doesNotContainKey(FILE_REF1);
assertThat(formDataMap).doesNotContainKey(FILE_REF1);
}
@Nested
......@@ -112,7 +111,7 @@ class SemantikFormDataMapperTest {
@SuppressWarnings("unchecked")
private List<IncomingFile> getRepresentations(FormData formData) {
return (List<IncomingFile>) ((Map<String, Object>) formData.getFormData().get(AbstractFileMapper.MAPPED_FILES))
return (List<IncomingFile>) ((Map<String, Object>) formData.getFormData().get(AbstractFileMapper.FIELD_NAME_MAPPED_FILES))
.get(AbstractFileMapper.REPRESENTATIONS);
}
}
......
/*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.eingangsadapter.router;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileGroup;
import de.itvsh.ozg.pluto.vorgang.GrpcIncomingFileGroup;
@Mapper(uses = IncomingFileMapper.class)
interface IncomingFileGroupMapper {
@Mapping(source = "files", target = "filesList")
GrpcIncomingFileGroup mapToGrpc(IncomingFileGroup fileGroup);
}
\ No newline at end of file
/*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.eingangsadapter.router;
import org.mapstruct.Mapper;
import com.google.protobuf.ByteString;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
import de.itvsh.ozg.pluto.vorgang.GrpcIncomingFile;
@Mapper(uses = FileIdMapper.class)
interface IncomingFileMapper {
GrpcIncomingFile mapToGrpc(IncomingFile file);
default ByteString map(byte[] value) {
return ByteString.copyFrom(value);
}
}
\ No newline at end of file
/*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.eingangsadapter.router;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import org.mockito.InjectMocks;
import org.mockito.Spy;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileGroupTestFactory;
class IncomingFileGroupMapperTest {
@InjectMocks
private IncomingFileGroupMapper fileGroupMapper = Mappers.getMapper(IncomingFileGroupMapper.class);
@Spy
private IncomingFileMapper fileMapper = Mappers.getMapper(IncomingFileMapper.class);
@Disabled
@Nested
class TestIncomingFileGroupMapper {
@Test
void shouldMap() {
var mappedValue = fileGroupMapper.mapToGrpc(IncomingFileGroupTestFactory.create());
assertThat(mappedValue.getFilesList()).hasSize(1);
assertThat(mappedValue.getFiles(0)).usingRecursiveComparison().isEqualTo(GrpcIncomingFileTestFactory.create());
}
}
}
\ No newline at end of file
/*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.itvsh.kop.eingangsadapter.router;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import org.mockito.InjectMocks;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileTestFactory;
class IncomingFileMapperTest {
@InjectMocks
private IncomingFileMapper mapper = Mappers.getMapper(IncomingFileMapper.class);
@Nested
class TestGrpcIncomingFileMapToIncomingFile {
@Test
void shouldMap() {
var result = mapper.mapToGrpc(IncomingFileTestFactory.create());
assertThat(result).isNotNull().usingRecursiveComparison().isEqualTo(GrpcIncomingFileTestFactory.create());
}
}
}
\ No newline at end of file
......@@ -42,7 +42,7 @@ public class SemantikAdapter {
@Autowired
private VorgangService vorgangService;
public void processFormDGata(FormData formData) {
public void processFormData(FormData formData) {
formData = parseByEngineAdapter(formData);
formData = parseByFormAdapter(formData);
......
......@@ -23,19 +23,20 @@
*/
package de.itvsh.kop.eingangsadapter.semantik.enginebased;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.common.formdata.FormDataUtils;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileGroup;
//TODO Vererbung ausbauen und durch Utils ersetzen
public abstract class AbstractFileMapper implements EngineBasedMapper {
public static final String ATTACHMENTS = "parsedAttachments";
public static final String REPRESENTATIONS = "parsedRepresentations";
public static final String MAPPED_FILES = "mappedFiles";
public static final String FIELD_NAME_MAPPED_FILES = "mappedFiles";
@Override
public FormData parseFormData(FormData formData) {
......@@ -76,16 +77,13 @@ public abstract class AbstractFileMapper implements EngineBasedMapper {
return builder;
}
@SuppressWarnings("unchecked")
protected Map<String, Object> getMappedFiles(FormData formData) {
return (Map<String, Object>) formData.getFormData().get(MAPPED_FILES);
return FormDataUtils.getSubMap(formData, FIELD_NAME_MAPPED_FILES);
}
protected FormData removeProcessedData(FormData formData) {
Map<String, Object> mutableMap = new HashMap<>(formData.getFormData());
mutableMap.remove(MAPPED_FILES);
return FormDataUtils.from(formData).remove(FIELD_NAME_MAPPED_FILES).build();
// TODO copyOf erlaubt keine null values -daher ausbauen
return formData.toBuilder().formData(Map.copyOf(mutableMap)).build();
}
}
}
\ No newline at end of file
......@@ -35,64 +35,75 @@ import org.springframework.stereotype.Component;
import de.itvsh.kop.eingangsadapter.common.formdata.Antragsteller;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.common.formdata.FormDataUtils;
@Component
public class FormSolutionsAntragstellerMapper implements FormSolutionsEngineBasedMapper {
public static final String ANTRAGSTELLER_PANEL_IDENTIFIER = "Antragstellende Person";
public static final String POSTKORBHANDLE = "postkorbhandle";
public static final String VORNAME_KEY = "AS_Vorname";
public static final String NACHNAME_KEY = "AS_Name";
@Override
public FormData parseFormData(FormData formData) {
var cleanedData = removePostkorbhandle(formData);
Antragsteller.AntragstellerBuilder builder = Antragsteller.builder()
.postfachId((String) formData.getFormData().get(POSTKORBHANDLE));
return FormDataUtils.from(formData)
.remove(POSTKORBHANDLE)
.builder()
.antragsteller(buildAntragsteller(formData))
.build();
}
Antragsteller buildAntragsteller(FormData formData) {
var antragstellerData = findAntragstellerData(formData.getFormData());
findValueByKey(NACHNAME_KEY, antragstellerData).ifPresent(builder::nachname);
return Antragsteller.builder()
.postfachId(getPostkorbhandle(formData))
.vorname(getVorname(antragstellerData))
.nachname(getNachname(antragstellerData))
.build();
}
findValueByKey(VORNAME_KEY, antragstellerData).ifPresent(builder::vorname);
private String getVorname(Map<String, String> antragstellerData) {
return Optional.ofNullable(antragstellerData.get(VORNAME_KEY)).orElse(null);
}
return formData.toBuilder()
.antragsteller(builder.build())
.formData(cleanedData)
.build();
private String getNachname(Map<String, String> antragstellerData) {
return Optional.ofNullable(antragstellerData.get(NACHNAME_KEY)).orElse(null);
}
// TODO auf immutable ma umstellen
private Map<String, String> findAntragstellerData(Map<String, Object> formData) {
Map<String, String> names = new HashMap<>();
addContent(getPanels(formData), names);
return names;
private String getPostkorbhandle(FormData formData) {
return (String) formData.getFormData().get(POSTKORBHANDLE);
}
private Optional<String> findValueByKey(String key, Map<String, String> data) {
return Optional.ofNullable(data.get(key));
private Map<String, String> findAntragstellerData(Map<String, Object> formData) {
var names = new HashMap<String, String>();
addContent(getAssistantPanels(formData), names);
return names;
}
@SuppressWarnings("unchecked")
private List<Map<String, Object>> getPanels(Map<String, Object> formData) {
return ((List<Map<String, Object>>) ((Map<String, Object>) formData.get(ASSISTANT)).get(PANELS));
private void addContent(List<Map<String, Object>> panels, Map<String, String> names) {
panels.stream().forEach(entry -> handleContentEntry(entry, names));
}
@SuppressWarnings("unchecked")
private void addContent(List<Map<String, Object>> items, Map<String, String> names) {
items.stream().forEach(entry -> {
private void handleContentEntry(Map<String, Object> entry, Map<String, String> names) {
if (entry.containsKey(COMPONENTS)) {
addContent((List<Map<String, Object>>) entry.get(COMPONENTS), names);
addContent(getComponentList(entry), names);
} else if (entry.containsKey(STRING_VALUE)) {
names.put((String) entry.get(IDENTIFIER), (String) entry.get(STRING_VALUE));
}
});
}
private Map<String, Object> removePostkorbhandle(FormData processedData) {
Map<String, Object> cleanedData = new HashMap<>(processedData.getFormData());
cleanedData.remove(POSTKORBHANDLE);
return cleanedData;
@SuppressWarnings("unchecked")
private List<Map<String, Object>> getComponentList(Map<String, Object> entry) {
return (List<Map<String, Object>>) entry.get(COMPONENTS);
}
@SuppressWarnings("unchecked")
private List<Map<String, Object>> getAssistantPanels(Map<String, Object> formData) {
return ((List<Map<String, Object>>) ((Map<String, Object>) formData.get(ASSISTANT)).get(PANELS));
}
}
......@@ -28,9 +28,12 @@ import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.common.formdata.FormDataUtils;
public class FormSolutionsEngineBasedAdapter implements EngineBasedSemantikAdapter {
public static final String IDENTIFIER = "identifier";
public static final String ASSISTANT = "assistant";
public static final String ANLIEGEN_ID = "anliegenId";
public static final String KOMMUNALVERWALTUNG_ID = "kommunalverwaltungId";
......@@ -42,18 +45,18 @@ public class FormSolutionsEngineBasedAdapter implements EngineBasedSemantikAdapt
public FormData parseFormData(FormData formData) {
var processedFormData = formData;
for (FormSolutionsEngineBasedMapper mapper : mappers) {
for (var mapper : mappers) {
processedFormData = mapper.parseFormData(processedFormData);
}
removeProcessedRawData(processedFormData);
return processedFormData;
return removeProcessedData(processedFormData);
}
void removeProcessedRawData(FormData processedFormData) {
processedFormData.getFormData().remove(ASSISTANT);
processedFormData.getFormData().remove(ANLIEGEN_ID);
processedFormData.getFormData().remove(KOMMUNALVERWALTUNG_ID);
FormData removeProcessedData(FormData formData) {
return FormDataUtils.from(formData)
.remove(ASSISTANT)
.remove(ANLIEGEN_ID)
.remove(KOMMUNALVERWALTUNG_ID)
.build();
}
}
......@@ -25,12 +25,12 @@ package de.itvsh.kop.eingangsadapter.semantik.enginebased;
import static de.itvsh.kop.eingangsadapter.semantik.enginebased.FormSolutionsEngineBasedAdapter.*;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Component;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.common.formdata.FormDataUtils;
import de.itvsh.kop.eingangsadapter.common.formdata.FormHeader;
@Component
......@@ -38,33 +38,40 @@ public class FormSolutionsHeaderMapper implements FormSolutionsEngineBasedMapper
static final String TRANSACTION_ID = "transactionId";
static final String FS_FORMENGINE_NAME = "FormSolutions";
static final String FORM_ENGINE_NAME = "FormSolutions";
@Override
public FormData parseFormData(FormData formData) {
var header = mapHeader(formData);
var cleanedData = removeTransactionId(formData);
return FormDataUtils.from(formData)
.remove(TRANSACTION_ID)
.builder()
.header(buildFormHeader(formData))
.build();
}
return formData.toBuilder().header(header).formData(cleanedData).build();
FormHeader buildFormHeader(FormData formData) {
return FormHeader.builder()
.formName(getIdentifier(formData))
.formId(getIdentifier(formData))
.requestId(getRequestId(formData))
.formEngineName(FORM_ENGINE_NAME)
.build();
}
private Map<String, Object> removeTransactionId(FormData processedData) {
Map<String, Object> cleanedData = new HashMap<>(processedData.getFormData());
cleanedData.remove(TRANSACTION_ID);
private String getIdentifier(FormData formData) {
return (String) getAssistant(formData).get(IDENTIFIER);
// TODO immutable machen
return cleanedData;
}
@SuppressWarnings("unchecked")
FormHeader mapHeader(FormData formData) {
var assistantMap = (Map<String, Object>) formData.getFormData().get(ASSISTANT);
private String getRequestId(FormData formData) {
return (String) formData.getFormData().get(TRANSACTION_ID);
}
return FormHeader.builder()
.formName((String) assistantMap.get(IDENTIFIER))
.formId((String) assistantMap.get(IDENTIFIER))
.requestId((String) formData.getFormData().get(TRANSACTION_ID))
.formEngineName(FS_FORMENGINE_NAME)
.build();
private Map<String, Object> getAssistant(FormData formData) {
return FormDataUtils.getSubMap(formData, ASSISTANT);
}
Map<String, Object> removeProcessedData(FormData processedData) {
return FormDataUtils.from(processedData).remove(TRANSACTION_ID).build().getFormData();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment