diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/WsHeaderAddingInterceptor.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/WsHeaderAddingInterceptor.java index a685b0a20bfc5a93b90dcd606cebb2dea31e8187..3833376fc82fb34588edd7896fb245893544a80e 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/WsHeaderAddingInterceptor.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/WsHeaderAddingInterceptor.java @@ -11,7 +11,7 @@ import de.ozgcloud.eingang.common.errorhandling.TechnicalException; import eu.osci.ws._2014._10.transport.OriginatorsType; import eu.osci.ws._2014._10.transport.PartyIdentifierType; import eu.osci.ws._2014._10.transport.PartyType; -import jakarta.validation.Valid; + import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.JAXBElement; import jakarta.xml.bind.JAXBException; @@ -20,8 +20,7 @@ import jakarta.xml.bind.JAXBException; class WsHeaderAddingInterceptor implements ClientInterceptor { @Autowired - @Valid - private XtaProperties properties; + private XtaCurrentIdentifierService xtaCurrentIdentifierService; @Override public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { @@ -44,7 +43,7 @@ class WsHeaderAddingInterceptor implements ClientInterceptor { PartyType partyType = new PartyType(); PartyIdentifierType identifier = new PartyIdentifierType(); - identifier.setValue(properties.getIdentifier()); + identifier.setValue(xtaCurrentIdentifierService.getCurrentIdentifier()); partyType.setIdentifier(identifier); var origin = new OriginatorsType(); diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaCurrentIdentifierService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaCurrentIdentifierService.java new file mode 100644 index 0000000000000000000000000000000000000000..0024ec287a64691c8ece083c10ee19ac262ac897 --- /dev/null +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaCurrentIdentifierService.java @@ -0,0 +1,28 @@ +package de.ozgcloud.eingang.xta; + +import java.util.List; + +import jakarta.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lombok.Getter; +import lombok.Setter; + +@Service +public class XtaCurrentIdentifierService { + + @Setter + @Getter + private String currentIdentifier = "*"; + + @Autowired + @Valid + private XtaProperties properties; + + public List<String> getIdentifiers() { + return properties.getIdentifiers(); + } + +} diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java index 2f31999ff99e8d9e997a8e57b6ee2b6260855beb..23a4e4bcc030f56f017200536653a3fca84c44d4 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaProperties.java @@ -2,6 +2,7 @@ package de.ozgcloud.eingang.xta; import java.math.BigInteger; import java.net.URI; +import java.util.List; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -31,7 +32,7 @@ class XtaProperties { private KeyStore keyStore; private Actions actions; @NotEmpty - private String identifier; + private List<String> identifiers; } @Validated diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java index 2341fbf6dc93899cb0c195ee6f09be52266c5c81..ae71ea062381ed78d7c32bb211100af55b55ed86 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java @@ -4,14 +4,13 @@ import java.util.Spliterators; import java.util.stream.Stream; import java.util.stream.StreamSupport; -import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; -import de.ozgcloud.eingang.xdomea.XdomeaMessageDataMapper; -import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; +import de.ozgcloud.eingang.xdomea.XdomeaMessageDataMapper; import lombok.NonNull; import lombok.extern.log4j.Log4j2; @@ -31,12 +30,20 @@ class XtaService { private XdomeaMessageDataMapper xdomeaMessageDataMapper; @Autowired private XtaIncomingFilesMapper xtaIncomingFilesMapper; + @Autowired + private XtaCurrentIdentifierService service; public Stream<FormData> getMessages() { return createXtaMessageStream().filter(this::isSupportedMessageType).map(this::getFormData); } Stream<XtaMessageMetaData> createXtaMessageStream() { + return service.getIdentifiers().stream() + .flatMap(this::createXtaMessageStreamForIdentifier); + } + + private Stream<XtaMessageMetaData> createXtaMessageStreamForIdentifier(String identifier) { + service.setCurrentIdentifier(identifier); var iterator = new XtaMessageMetadataRemoteIterator(remoteService); return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, 0), false); } diff --git a/xta-adapter/src/main/resources/application-local.yml b/xta-adapter/src/main/resources/application-local.yml index 83e7b8ca8d1088a6fcbae18446b9ac917d21f942..b35125c65bce0ce95de34f97fb97c398bbcefc15 100644 --- a/xta-adapter/src/main/resources/application-local.yml +++ b/xta-adapter/src/main/resources/application-local.yml @@ -1,6 +1,7 @@ ozgcloud: xta: - identifier: gae:jens.reese@mgm-tp.com + identifiers: + - gae:jens.reese@mgm-tp.com server: address: localhost:3000 name: LI33-0005 diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml index 3e4e37b8fe3f8ad0fce65be7a136aa3b8219431c..7eac13e81398613f23cc5e4dedc3309b69030c5a 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml @@ -60,7 +60,8 @@ tests: image.name: xta-adapter xta: schedule: "1 1 * * * *" - identifier: gae:test@ozg-sh.de + identifiers: + - gae:test@ozg-sh.de server: address: 1.2.3.4 name: test @@ -144,4 +145,4 @@ tests: path: spec.jobTemplate.spec.template.spec.containers[0].securityContext.capabilities value: drop: - - ALL \ No newline at end of file + - ALL diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml index 4e84137ff94e27f91f7786522f65e9ff5b52d380..213a9de09e759a97343231a35201d5a4c6598962 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml @@ -36,7 +36,8 @@ tests: set: image.name: xta-adapter xta: - identifier: gae:test@ozg-sh.de + identifiers: + - gae:test@ozg-sh.de server: name: test address: 1.2.3.4 @@ -116,7 +117,8 @@ tests: image.name: xta-adapter env.overrideSpringProfiles: local xta: - identifier: gae:test@ozg-sh.de + identifiers: + - gae:test@ozg-sh.de server: name: test address: 1.2.3.4 @@ -154,4 +156,4 @@ tests: path: spec.jobTemplate.spec.template.spec.containers[0].env content: name: grpc_client_vorgang-manager-vorgang-manager_negotiationType - value: "TLS" \ No newline at end of file + value: "TLS" diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_volumes_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_volumes_test.yaml index 7af81adc1e39cc206f113ab1e00415b147a65f99..352f196bf1b8a8cafccb6fa868e8da0efe595636 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_volumes_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_volumes_test.yaml @@ -36,7 +36,8 @@ tests: set: image.name: xta-adapter xta: - identifier: gae:test@ozg-sh.de + identifiers: + - gae:test@ozg-sh.de server: name: test address: 1.2.3.4 @@ -66,7 +67,8 @@ tests: set: image.name: xta-adapter xta: - identifier: gae:test@ozg-sh.de + identifiers: + - gae:test@ozg-sh.de server: name: test address: 1.2.3.4 diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaActiveIdentifierServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaActiveIdentifierServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ae5b12b2bab4b3a8b5d6a106db2ed7ad8481c269 --- /dev/null +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaActiveIdentifierServiceTest.java @@ -0,0 +1,44 @@ +package de.ozgcloud.eingang.xta; + +import static org.assertj.core.api.Assertions.*; +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; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +class XtaActiveIdentifierServiceTest { + + private static final String IDENTIFIER1 = "identifier1"; + private static final String IDENTIFIER2 = "identifier2"; + private static final List<String> IDENTIFIERS = List.of(IDENTIFIER1, IDENTIFIER2); + + @Spy + @InjectMocks + private XtaCurrentIdentifierService service; + + @Mock + private XtaProperties properties; + + @DisplayName("get identifiers") + @Nested + class TestGetIdentifiers { + @BeforeEach + void mock() { + when(properties.getIdentifiers()).thenReturn(IDENTIFIERS); + } + + @DisplayName("should return") + @Test + void shouldReturn() { + assertThat(service.getIdentifiers()).isEqualTo(IDENTIFIERS); + } + } + +} diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java index 75a00a6610db89ffeaed0ba620d4676038fda296..997ce3bf36df47953077bbda509fc1f68705f83f 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -19,8 +20,8 @@ import org.mockito.Spy; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; import de.ozgcloud.eingang.xdomea.XdomeaMessageData; -import de.ozgcloud.eingang.xdomea.XdomeaMessageDataTestFactory; import de.ozgcloud.eingang.xdomea.XdomeaMessageDataMapper; +import de.ozgcloud.eingang.xdomea.XdomeaMessageDataTestFactory; class XtaServiceTest { @@ -43,6 +44,9 @@ class XtaServiceTest { @Mock private XdomeaMessageDataMapper xdomeaMessageDataMapper; + @Mock + private XtaCurrentIdentifierService currentIdentifierService; + @Nested class TestGetMessagesAsFormData { @@ -124,7 +128,7 @@ class XtaServiceTest { private ArgumentCaptor<XtaMessageMetaData> messageMetaDataCaptor; @Captor - private ArgumentCaptor<XdomeaMessageData> classificationCaptor; + private ArgumentCaptor<XdomeaMessageData> classificationCaptor; @BeforeEach void init() { @@ -185,4 +189,46 @@ class XtaServiceTest { } } + @DisplayName("create XTA message stream") + @Nested + class TestCreateXtaMessageStream { + private static final List<String> XTA_IDENTIFIERS = List.of("XTA_IDENTIFIER", "XTA_IDENTIFIER2"); + + @Captor + private ArgumentCaptor<String> identifierCaptor; + + @BeforeEach + void mock() { + when(remoteService.getMessagesMetadata()) + .thenReturn(XtaMessageMetaDatasAndHeaderTestFactory.create()) + .thenReturn(XtaMessageMetaDatasAndHeaderTestFactory.create()); + when(currentIdentifierService.getIdentifiers()).thenReturn(XTA_IDENTIFIERS); + } + + @DisplayName("should return") + @Test + void shouldReturn() { + var result = service.createXtaMessageStream().toList(); + + assertThat(result).isEqualTo(getExpectedMessages()); + } + + private List<XtaMessageMetaData> getExpectedMessages() { + return Stream.concat( + XtaMessageMetaDatasAndHeaderTestFactory.create().getMessages(), + XtaMessageMetaDatasAndHeaderTestFactory.create().getMessages() + ).toList(); + } + + @DisplayName("should call set current identifier") + @Test + void shouldCallSetCurrentIdentifier() { + service.createXtaMessageStream().toList(); + + verify(currentIdentifierService, times(2)) + .setCurrentIdentifier(identifierCaptor.capture()); + assertThat(identifierCaptor.getAllValues()).isEqualTo(XTA_IDENTIFIERS); + } + } + } diff --git a/xta-adapter/src/test/resources/application-itcase.yml b/xta-adapter/src/test/resources/application-itcase.yml index 99b88fbe12ffdb4562dc264c08595afde1b9092a..e4f04915dcad084966187e831830afba2e8da1c1 100644 --- a/xta-adapter/src/test/resources/application-itcase.yml +++ b/xta-adapter/src/test/resources/application-itcase.yml @@ -1,6 +1,7 @@ ozgcloud: xta: - identifier: afmsh:010600000000_Online-Dienste + identifiers: + - afmsh:010600000000_Online-Dienste server: address: localhost:3000 name: LI33-0005