diff --git a/xta-adapter/pom.xml b/xta-adapter/pom.xml index ee4f7d158376d2684368f2833619acfd491592e0..7cfe37b6aeda3084de15eb85df9d8b8703fb31ca 100644 --- a/xta-adapter/pom.xml +++ b/xta-adapter/pom.xml @@ -24,6 +24,10 @@ <groupId>de.itvsh.kop.eingangsadapter</groupId> <artifactId>common</artifactId> </dependency> + <dependency> + <groupId>de.itvsh.kop.eingangsadapter</groupId> + <artifactId>semantik-adapter</artifactId> + </dependency> <!--mapstruct--> <dependency> <groupId>org.mapstruct</groupId> diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java index d8852bd692a2e14d8e190e063d2e1164e168cb28..6904d6f9e3ffd64e8724f58e4007a5d75b4f8a47 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java @@ -32,7 +32,7 @@ interface XtaMessageMapper { @Mapping(target = "formEngineName", ignore = true) @Mapping(target = "formId", source = "messageType") - @Mapping(target = "requestId", ignore = true) + @Mapping(target = "requestId", source = "messageId") @Mapping(target = "serviceKonto", ignore = true) @Mapping(target = "createdAt", source = "origin") @Mapping(target = "sender", constant = "XTA") @@ -58,4 +58,8 @@ interface XtaMessageMapper { throw new TechnicalException("Error opening xta message file."); } } + + default String fromId(XtaMessageId id) { + return id.toString(); + } } diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java index 479cbcc9d27ac3e2f9ce0588497bf4fd4016d19e..d04f7e5d6c98d79f202c25c3ce1173b61304dfd8 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java @@ -1,7 +1,6 @@ package de.ozgcloud.eingang.xta; import de.itvsh.kop.eingangsadapter.common.formdata.FormData; -import de.itvsh.kop.eingangsadapter.common.formdata.FormHeader; class FormDataTestFactory { @@ -11,15 +10,7 @@ class FormDataTestFactory { static FormData.FormDataBuilder createBuilder() { return FormData.builder() - .header(createHeader()); + .header(FormHeaderTestFactory.create()); } - static FormHeader createHeader() { - return FormHeader.builder() - .sender("XTA") - .formName(XtaMessageMetaDataTestFactory.MESSAGE_TYPE) - .formId(XtaMessageMetaDataTestFactory.MESSAGE_TYPE) - .createdAt(XtaMessageMetaDataTestFactory.ORIGIN) - .build(); - } } diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..5e41248ab66c5d75aaf0c6df90d16ab6c169c818 --- /dev/null +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java @@ -0,0 +1,20 @@ +package de.ozgcloud.eingang.xta; + +import de.itvsh.kop.eingangsadapter.common.formdata.FormHeader; +import de.itvsh.kop.eingangsadapter.common.formdata.FormHeader.FormHeaderBuilder; + +public class FormHeaderTestFactory { + + static FormHeader create() { + return createBuilder().build(); + } + + static FormHeaderBuilder createBuilder() { + return FormHeader.builder() + .sender("XTA") + .requestId(XtaMessageTestFactory.MESSAGE_ID.toString()) + .formName(XtaMessageMetaDataTestFactory.MESSAGE_TYPE) + .formId(XtaMessageMetaDataTestFactory.MESSAGE_TYPE) + .createdAt(XtaMessageMetaDataTestFactory.ORIGIN); + } +} diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java index 0fb7ddb9059ce2b7f209d8af1b78f466ae772f3b..cfcb0bfc310218964fa5652775759e922f7006aa 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java @@ -42,6 +42,16 @@ class XtaMessageMapperTest { verify(mapper).toIncomingFile(message.getMessageFile()); } + @Nested + class ToFormHeader { + @Test + void shouldMapToFormHeader() { + var mapped = mapper.formHeaderFromMetaData(XtaMessageMetaDataTestFactory.create()); + + assertThat(mapped).usingRecursiveComparison().isEqualTo(FormHeaderTestFactory.create()); + } + } + @Nested class ToIncomingFile { @Test diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaScheduler.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaScheduler.java new file mode 100644 index 0000000000000000000000000000000000000000..fcd1ebf3ffdcd26ef26856d12c20f2b799654f7a --- /dev/null +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaScheduler.java @@ -0,0 +1,38 @@ +package de.ozgcloud.eingang.xta; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import de.itvsh.kop.eingangsadapter.common.formdata.FormData; +import de.itvsh.kop.eingangsadapter.semantik.SemantikAdapter; +import lombok.NonNull; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +@Component +@Profile("!itcase") +@ConditionalOnProperty(havingValue = "ozgcloud.xta.scheduler.enabled") +class XtaScheduler { + + @Autowired + private XtaService service; + @Autowired + private SemantikAdapter semantikAdapter; + + @Scheduled(initialDelayString = "${ozgcloud.xta.scheduler.initialDelay:5000}", fixedDelayString = "${ozgcloud.xta.scheduler.fixedDelay:900000") + void runGetXtaMessages() { + service.getMessagesAsFormData().forEach(this::processAndAcknowledge); + } + + private void processAndAcknowledge(@NonNull FormData formData) { + try { + semantikAdapter.processFormData(formData); + service.acknowledgeReceive(XtaMessageId.from(formData.getHeader().getRequestId())); + } catch (RuntimeException e) { + LOG.error("Error on processing XTA-Message. Continue with next message.", e); + } + } +} diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaSchedulerTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaSchedulerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..506f129c362fcbd1c9d94f08eb4ead320b23fd7b --- /dev/null +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaSchedulerTest.java @@ -0,0 +1,58 @@ +package de.ozgcloud.eingang.xta; + +import static org.mockito.Mockito.*; + +import java.util.stream.Stream; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.itvsh.kop.eingangsadapter.common.formdata.FormData; +import de.itvsh.kop.eingangsadapter.semantik.SemantikAdapter; + +class XtaSchedulerTest { + + @InjectMocks + private XtaScheduler scheduler; + + @Mock + private XtaService service; + @Mock + private SemantikAdapter semantikAdapter; + + @Nested + class TestRunGetXtaMessages { + + private FormData formData = FormDataTestFactory.create(); + + @BeforeEach + void init() { + when(service.getMessagesAsFormData()).thenReturn(Stream.of(formData)); + } + + @Test + void shouldCallXtaService() { + scheduler.runGetXtaMessages(); + + verify(service).getMessagesAsFormData(); + } + + @Test + void shouldHandOverFormDataToSemantikAdapter() { + scheduler.runGetXtaMessages(); + + verify(semantikAdapter).processFormData(formData); + } + + @Test + void shouldAcknowledgeReceive() { + scheduler.runGetXtaMessages(); + + verify(service).acknowledgeReceive(XtaMessageTestFactory.MESSAGE_ID); + } + } + +}