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

OZG-5776 xta-adapter: Reuse XtaMessageMapper for fim

parent fa83a4dc
Branches
No related tags found
No related merge requests found
Showing
with 201 additions and 85 deletions
package de.ozgcloud.eingang.fim;
import java.util.Collection;
import java.util.Collections;
import org.springframework.stereotype.Component;
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.IncomingFileGroup;
import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
import de.ozgcloud.eingang.xta.XtaMessageMetaData;
@Component
public class FimMessageMapper {
private static final int VORGANG_NUMMER_SUFFIX_LENGTH = 4;
/*
* FIXME: This is only a quick and dirty implementation for a fim message mapper
*/
public FormData toFormData(final XtaMessageMetaData metaData, final VorgangNummerSupplier vorgangNummerSupplier,
final Collection<IncomingFile> incomingFileList) {
return FormData.builder()
.header(FormHeader.builder()
.formId(metaData.getMessageType())
.requestId(metaData.getMessageId().toString())
.createdAt(metaData.getOrigin())
.vorgangNummer(vorgangNummerSupplier.get(VORGANG_NUMMER_SUFFIX_LENGTH))
.sender("XTA")
.build())
.zustaendigeStelle(ZustaendigeStelle.builder()
.organisationseinheitenId("0")
.build())
.numberOfAttachments(incomingFileList.size())
.attachments(Collections.singleton(IncomingFileGroup.builder()
.name("fim_files")
.files(incomingFileList)
.build()))
.build();
}
}
package de.ozgcloud.eingang.fim;
import static java.util.Collections.*;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
......@@ -9,7 +11,9 @@ import org.springframework.stereotype.Component;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
import de.ozgcloud.eingang.xta.RepresentationsAttachmentsPair;
import de.ozgcloud.eingang.xta.XtaMessageHandler;
import de.ozgcloud.eingang.xta.XtaMessageMapper;
import de.ozgcloud.eingang.xta.XtaMessageMetaData;
@Component
......@@ -17,14 +21,25 @@ public class FimXtaMessageHandler implements XtaMessageHandler {
static final String ALL_FIM_MESSAGES_PREFIX = "fim.";
@Autowired
private FimMessageMapper fimMessageMapper;
private XtaMessageMapper xtaMessageMapper;
@Autowired
private VorgangNummerSupplier vorgangNummerSupplier;
@Override
public FormData getFormData(XtaMessageMetaData xtaMessageMetaData, List<IncomingFile> incomingFiles) {
return fimMessageMapper.toFormData(xtaMessageMetaData, vorgangNummerSupplier, incomingFiles);
return xtaMessageMapper.toFormData(
getRepresentationsAttachmentsPair(incomingFiles),
xtaMessageMetaData,
vorgangNummerSupplier
);
}
RepresentationsAttachmentsPair getRepresentationsAttachmentsPair(List<IncomingFile> incomingFiles) {
return RepresentationsAttachmentsPair.builder()
.representations(incomingFiles)
.attachments(emptyList())
.build();
}
@Override
......
......@@ -8,7 +8,7 @@ import lombok.Builder;
import lombok.Singular;
@Builder
public record XdomeaMessageData(
record XdomeaMessageData(
IncomingFile metadataFile,
List<IncomingFile> representations,
@Singular
......
package de.ozgcloud.eingang.xdomea;
import java.util.List;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -9,7 +10,9 @@ import org.springframework.stereotype.Component;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
import de.ozgcloud.eingang.xta.RepresentationsAttachmentsPair;
import de.ozgcloud.eingang.xta.XtaMessageHandler;
import de.ozgcloud.eingang.xta.XtaMessageMapper;
import de.ozgcloud.eingang.xta.XtaMessageMetaData;
@Component
......@@ -27,8 +30,26 @@ public class XdomeaXtaMessageHandler implements XtaMessageHandler {
@Override
public FormData getFormData(XtaMessageMetaData xtaMessageMetaData, List<IncomingFile> incomingFiles) {
return xtaMessageMapper.toFormData(
getRepresentationsAttachmentsPair(incomingFiles),
xtaMessageMetaData,
vorgangNummerSupplier
);
}
RepresentationsAttachmentsPair getRepresentationsAttachmentsPair(List<IncomingFile> incomingFiles) {
var xdomeaMessageData = xdomeaMessageDataMapper.mapIncomingFilesToXdomeaMessageData(incomingFiles);
return xtaMessageMapper.toFormData(xdomeaMessageData, xtaMessageMetaData, vorgangNummerSupplier);
return RepresentationsAttachmentsPair.builder()
.representations(getRepresentations(xdomeaMessageData))
.attachments(xdomeaMessageData.attachments())
.build();
}
private List<IncomingFile> getRepresentations(XdomeaMessageData xdomeaMessageData) {
return Stream.concat(
Stream.of(xdomeaMessageData.metadataFile()),
xdomeaMessageData.representations().stream()
).toList();
}
@Override
......
package de.ozgcloud.eingang.xta;
import java.util.List;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import lombok.Builder;
@Builder
public record RepresentationsAttachmentsPair(
List<IncomingFile> representations,
List<IncomingFileGroup> attachments
) {
}
package de.ozgcloud.eingang.xdomea;
import java.util.List;
import java.util.stream.Stream;
package de.ozgcloud.eingang.xta;
import org.mapstruct.Context;
import org.mapstruct.Mapper;
......@@ -9,14 +6,11 @@ import org.mapstruct.Mapping;
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.vorgang.VorgangNummerSupplier;
import de.ozgcloud.eingang.semantik.enginebased.FilesMapperHelper;
import de.ozgcloud.eingang.xta.XtaMessageId;
import de.ozgcloud.eingang.xta.XtaMessageMetaData;
@Mapper(imports = FilesMapperHelper.class)
interface XtaMessageMapper {
public interface XtaMessageMapper {
int VORGANG_NUMMER_SUFFIX_LENGTH = 4;
@Mapping(target = "antragsteller", ignore = true)
......@@ -24,19 +18,15 @@ interface XtaMessageMapper {
@Mapping(target = "id", ignore = true)
@Mapping(target = "zustaendigeStelle", ignore = true)
@Mapping(target = "header", source = "metaData")
@Mapping(target = "numberOfAttachments", expression = "java(FilesMapperHelper.countAttachedFiles(xdomeaMessageData.attachments()))")
@Mapping(target = "numberOfRepresentations", dependsOn = "representations", expression = "java(getRepresentations(xdomeaMessageData).size())")
@Mapping(target = "representations", source = "xdomeaMessageData")
@Mapping(target = "numberOfAttachments", expression = "java(FilesMapperHelper.countAttachedFiles(representationsAttachmentsPair.attachments()))")
@Mapping(target = "numberOfRepresentations", expression = "java(representationsAttachmentsPair.representations().size())")
@Mapping(target = "representation", ignore = true)
@Mapping(target = "attachment", ignore = true)
FormData toFormData(XdomeaMessageData xdomeaMessageData, XtaMessageMetaData metaData, @Context VorgangNummerSupplier vorgangNummerSupplier);
default List<IncomingFile> getRepresentations(XdomeaMessageData xdomeaMessageData) {
return Stream.concat(
Stream.of(xdomeaMessageData.metadataFile()),
xdomeaMessageData.representations().stream()
).toList();
}
FormData toFormData(
RepresentationsAttachmentsPair representationsAttachmentsPair,
XtaMessageMetaData metaData,
@Context VorgangNummerSupplier vorgangNummerSupplier
);
@Mapping(target = "formId", source = "messageType")
@Mapping(target = "requestId", source = "messageId")
......
......@@ -5,6 +5,7 @@ import static org.mockito.Mockito.*;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
......@@ -15,6 +16,8 @@ import org.mockito.Spy;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
import de.ozgcloud.eingang.xta.RepresentationsAttachmentsPair;
import de.ozgcloud.eingang.xta.XtaMessageMapper;
import de.ozgcloud.eingang.xta.XtaMessageMetaData;
class FimXtaMessageHandlerTest {
......@@ -24,7 +27,7 @@ class FimXtaMessageHandlerTest {
private FimXtaMessageHandler handler;
@Mock
private FimMessageMapper fimMessageMapper;
private XtaMessageMapper xtaMessageMapper;
@Mock
private VorgangNummerSupplier vorgangNummerSupplier;
......@@ -32,6 +35,9 @@ class FimXtaMessageHandlerTest {
@Mock
private XtaMessageMetaData xtaMessageMetaData;
@Mock
private RepresentationsAttachmentsPair representationsAttachmentsPair;
@DisplayName("get form data")
@Nested
class TestGetFormData {
......@@ -39,14 +45,14 @@ class FimXtaMessageHandlerTest {
@Mock
private List<IncomingFile> incomingFiles;
@Mock
private FormData formData;
@DisplayName("should return form data")
@Test
void shouldReturnFormData() {
when(fimMessageMapper.toFormData(xtaMessageMetaData, vorgangNummerSupplier, incomingFiles)).thenReturn(formData);
doReturn(representationsAttachmentsPair).when(handler).getRepresentationsAttachmentsPair(incomingFiles);
when(xtaMessageMapper.toFormData(representationsAttachmentsPair, xtaMessageMetaData, vorgangNummerSupplier)).thenReturn(formData);
var result = handler.getFormData(xtaMessageMetaData, incomingFiles);
......@@ -54,6 +60,40 @@ class FimXtaMessageHandlerTest {
}
}
@DisplayName("get representations attachments pair")
@Nested
class TestGetRepresentationsAttachmentsPair {
@Mock
private IncomingFile incomingFile1;
@Mock
private IncomingFile incomingFile2;
private List<IncomingFile> incomingFiles;
@BeforeEach
void mock() {
incomingFiles = List.of(incomingFile1, incomingFile2);
}
@DisplayName("should return representations")
@Test
void shouldReturnRepresentations() {
var result = handler.getRepresentationsAttachmentsPair(incomingFiles);
assertThat(result.representations()).containsExactly(incomingFile1, incomingFile2);
}
@DisplayName("should return empty attachments")
@Test
void shouldReturnEmptyAttachments() {
var result = handler.getRepresentationsAttachmentsPair(incomingFiles);
assertThat(result.attachments()).isEmpty();
}
}
@DisplayName("is responsible")
@Nested
class TestIsResponsible {
......
......@@ -5,6 +5,7 @@ import static org.mockito.Mockito.*;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
......@@ -15,6 +16,8 @@ import org.mockito.Spy;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
import de.ozgcloud.eingang.xta.RepresentationsAttachmentsPair;
import de.ozgcloud.eingang.xta.XtaMessageMapper;
import de.ozgcloud.eingang.xta.XtaMessageMetaData;
class XdomeaXtaMessageHandlerTest {
......@@ -43,7 +46,7 @@ class XdomeaXtaMessageHandlerTest {
private List<IncomingFile> incomingFiles;
@Mock
private XdomeaMessageData xdomeaMessageData;
private RepresentationsAttachmentsPair representationsAttachmentsPair;
@Mock
private FormData formData;
......@@ -51,8 +54,12 @@ class XdomeaXtaMessageHandlerTest {
@DisplayName("should map to form data")
@Test
void shouldMapToFormData() {
when(xdomeaMessageDataMapper.mapIncomingFilesToXdomeaMessageData(incomingFiles)).thenReturn(xdomeaMessageData);
when(xtaMessageMapper.toFormData(xdomeaMessageData, xtaMessageMetaData, vorgangNummerSupplier)).thenReturn(formData);
doReturn(representationsAttachmentsPair).when(handler).getRepresentationsAttachmentsPair(incomingFiles);
when(xtaMessageMapper.toFormData(
representationsAttachmentsPair,
xtaMessageMetaData,
vorgangNummerSupplier
)).thenReturn(formData);
var result = handler.getFormData(xtaMessageMetaData, incomingFiles);
......@@ -60,6 +67,49 @@ class XdomeaXtaMessageHandlerTest {
}
}
@DisplayName("get representations attachments pair")
@Nested
class TestGetRepresentationsAttachmentsPair {
@Mock
private List<IncomingFile> incomingFiles;
private XdomeaMessageData xdomeaMessageData;
@Mock
private IncomingFile incomingFile1;
@Mock
private IncomingFile incomingFile2;
@BeforeEach
void mock() {
xdomeaMessageData = XdomeaMessageDataTestFactory.createBuilder()
.representations(List.of(incomingFile1, incomingFile2))
.build();
when(xdomeaMessageDataMapper.mapIncomingFilesToXdomeaMessageData(incomingFiles)).thenReturn(xdomeaMessageData);
}
@DisplayName("should return representations")
@Test
void shouldReturnRepresentations() {
var result = handler.getRepresentationsAttachmentsPair(incomingFiles);
assertThat(result.representations()).containsExactly(
xdomeaMessageData.metadataFile(),
incomingFile1,
incomingFile2
);
}
@DisplayName("should return attachments")
@Test
void shouldReturnAttachments() {
var result = handler.getRepresentationsAttachmentsPair(incomingFiles);
assertThat(result.attachments()).isEqualTo(xdomeaMessageData.attachments());
}
}
@DisplayName("is responsible")
@Nested
class TestIsResponsible {
......
package de.ozgcloud.eingang.xta;
import java.util.List;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory;
import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
class RepresentationsAttachmentsPairTestFactory {
static List<IncomingFile> PAIR_REPRESENTATIONS = List.of(
IncomingFileTestFactory.createBuilder().name("representation1.xml").build(),
IncomingFileTestFactory.createBuilder().name("representation1.pdf").build()
);
static List<IncomingFileGroup> PAIR_ATTACHMENTS = List.of(
IncomingFileGroupTestFactory.create(),
IncomingFileGroupTestFactory.create(),
IncomingFileGroupTestFactory.create()
);
static RepresentationsAttachmentsPair create() {
return createBuilder().build();
}
static RepresentationsAttachmentsPair.RepresentationsAttachmentsPairBuilder createBuilder() {
return RepresentationsAttachmentsPair.builder()
.representations(PAIR_REPRESENTATIONS)
.attachments(PAIR_ATTACHMENTS);
}
}
package de.ozgcloud.eingang.xdomea;
package de.ozgcloud.eingang.xta;
import static de.ozgcloud.eingang.xdomea.XtaMessageMapper.*;
import static de.ozgcloud.eingang.xta.RepresentationsAttachmentsPairTestFactory.*;
import static de.ozgcloud.eingang.xta.XtaMessageMapper.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
......@@ -14,9 +15,6 @@ import org.mockito.Spy;
import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
import de.ozgcloud.eingang.xta.FormHeaderTestFactory;
import de.ozgcloud.eingang.xta.XtaMessageMetaData;
import de.ozgcloud.eingang.xta.XtaMessageMetaDataTestFactory;
class XtaMessageMapperTest {
......@@ -31,12 +29,12 @@ class XtaMessageMapperTest {
class TestToFormData {
private XtaMessageMetaData xtaMessageMetaData;
private XdomeaMessageData xdomeaMessageData;
private RepresentationsAttachmentsPair representationsAttachmentsPair;
@BeforeEach
void mock() {
xtaMessageMetaData = XtaMessageMetaDataTestFactory.create();
xdomeaMessageData = XdomeaMessageDataTestFactory.create();
representationsAttachmentsPair = RepresentationsAttachmentsPairTestFactory.create();
when(vorgangNummerSupplier.get(VORGANG_NUMMER_SUFFIX_LENGTH)).thenReturn(FormHeaderTestFactory.VORGANGNUMMER);
}
......@@ -44,29 +42,28 @@ class XtaMessageMapperTest {
void shouldMapRepresentations() {
var formData = doMapping();
assertThat(formData.getRepresentations()).containsExactly(xdomeaMessageData.metadataFile(),
xdomeaMessageData.representations().getFirst());
assertThat(formData.getRepresentations()).isEqualTo(PAIR_REPRESENTATIONS);
}
@Test
void shouldSetNumberOfAttachments() {
var formData = doMapping();
assertThat(formData.getNumberOfAttachments()).isEqualTo(1);
assertThat(formData.getNumberOfAttachments()).isEqualTo(PAIR_ATTACHMENTS.size());
}
@Test
void shouldSetNumberOfRepresentations() {
var formData = doMapping();
assertThat(formData.getNumberOfRepresentations()).isEqualTo(2);
assertThat(formData.getNumberOfRepresentations()).isEqualTo(PAIR_REPRESENTATIONS.size());
}
@Test
void shouldMapAttachments() {
var formData = doMapping();
assertThat(formData.getAttachments()).isEqualTo(xdomeaMessageData.attachments());
assertThat(formData.getAttachments()).isEqualTo(PAIR_ATTACHMENTS);
}
@Test
......@@ -77,7 +74,7 @@ class XtaMessageMapperTest {
}
private FormData doMapping() {
return mapper.toFormData(xdomeaMessageData, xtaMessageMetaData, vorgangNummerSupplier);
return mapper.toFormData(representationsAttachmentsPair, xtaMessageMetaData, vorgangNummerSupplier);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment