diff --git a/pom.xml b/pom.xml index ca9687bf4b8063400fd666cd0b2eb04f735e8ca1..8f012b9b151a38ebe31d966f226e2b52d0f4f524 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.5.0</version> + <version>4.7.0</version> </parent> <groupId>de.ozgcloud.processor</groupId> @@ -48,6 +48,7 @@ <tyrus-standalone-client.version>2.2.0</tyrus-standalone-client.version> <okio.version>3.9.1</okio.version> </properties> + <dependencies> <!-- OZG-Cloud --> <dependency> @@ -124,7 +125,6 @@ <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-inprocess</artifactId> - <version>1.65.0</version> <scope>test</scope> </dependency> diff --git a/src/main/java/de/ozgcloud/processor/processor/LogRunner.java b/src/main/java/de/ozgcloud/processor/processor/LogRunner.java new file mode 100644 index 0000000000000000000000000000000000000000..d93978c475d9f4cc3dc0d5b16a150892b1c3943b --- /dev/null +++ b/src/main/java/de/ozgcloud/processor/processor/LogRunner.java @@ -0,0 +1,23 @@ +package de.ozgcloud.processor.processor; + +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +@Component +@RequiredArgsConstructor +class ProcessorLogRunner implements ApplicationListener<ContextRefreshedEvent> { + + private final ProcessorProperties properties; + + @Override + public void onApplicationEvent(ContextRefreshedEvent event) { + LOG.info("Processors configured: " + properties); + + } + +} diff --git a/src/main/java/de/ozgcloud/processor/processor/ProcessorProperties.java b/src/main/java/de/ozgcloud/processor/processor/ProcessorProperties.java index e7706c445d815047256d6dd5deda5848c6f8d9fb..51fe4ae61b818c4320bf1aa144647dd000795ec8 100644 --- a/src/main/java/de/ozgcloud/processor/processor/ProcessorProperties.java +++ b/src/main/java/de/ozgcloud/processor/processor/ProcessorProperties.java @@ -55,6 +55,7 @@ class ProcessorProperties { @Singular private List<Processor> processors; + @ToString @Getter @Setter @Builder @@ -82,6 +83,7 @@ class ProcessorProperties { private String address; } + @ToString @Getter @Setter @Builder diff --git a/src/main/java/de/ozgcloud/processor/processor/ProcessorService.java b/src/main/java/de/ozgcloud/processor/processor/ProcessorService.java index 15dcb0253134f16dd3fc214e466feabd96435ef2..ff4d2230dfaf2883bf85450f2c0ea065ad20e4a6 100644 --- a/src/main/java/de/ozgcloud/processor/processor/ProcessorService.java +++ b/src/main/java/de/ozgcloud/processor/processor/ProcessorService.java @@ -26,6 +26,7 @@ package de.ozgcloud.processor.processor; import java.util.Collection; import java.util.Collections; import java.util.Optional; +import java.util.Set; import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; @@ -78,7 +79,14 @@ public class ProcessorService { } public Stream<Mono<ProcessorResult>> processVorgang(Vorgang vorgang, Collection<String> processorNames) { - return getProcessors(processorNames).map(processor -> callProcessor(processor, vorgang)); + return getProcessors(processorNames) + .filter(processor -> containsMatchingForm(vorgang, processor.getForms())) + .map(processor -> callProcessor(processor, vorgang)); + } + + private boolean containsMatchingForm(Vorgang vorgang, Set<Form> forms) { + return forms.stream().anyMatch(form -> StringUtils.equals(vorgang.getFormEngineName(), form.getFormEngineName()) + && StringUtils.equals(vorgang.getFormId(), form.getFormId())); } Stream<Processor> getProcessors(Collection<String> processorNames) { diff --git a/src/main/java/de/ozgcloud/processor/vorgang/Vorgang.java b/src/main/java/de/ozgcloud/processor/vorgang/Vorgang.java index 9d3c8772b52e9fd5309bc6e376412d04441a45fb..5634470d8e0879f822d392c07c65bcd0b913ba86 100644 --- a/src/main/java/de/ozgcloud/processor/vorgang/Vorgang.java +++ b/src/main/java/de/ozgcloud/processor/vorgang/Vorgang.java @@ -23,7 +23,6 @@ */ package de.ozgcloud.processor.vorgang; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty.Access; @@ -39,9 +38,9 @@ public class Vorgang { private long version; private String vorgangName; private String vorgangNummer; - private String formId; - @JsonIgnore + private String formEngineName; + private String formId; private Eingang eingang; diff --git a/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceTest.java b/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceTest.java index 1b77a7729e7cdd16a1f51a73149738f72607c647..c9a87204347c1039119adde275cd3508af8a3d8d 100644 --- a/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceTest.java +++ b/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceTest.java @@ -98,77 +98,95 @@ class ProcessorServiceTest { } } } - + @DisplayName("Process vorgang by given processorNames") @Nested class TestProcessVorgangByGivenProcessorNames { - + private final Vorgang vorgang = VorgangTestFactory.create(); private final Collection<String> processorNames = Collections.singleton(ProcessorTestFactory.PROCESSOR_NAME); private final Processor processor = ProcessorTestFactory.create(); private final Mono<ProcessorResult> processorMonoResponse = Mono.just(ProcessorResultTestFactory.create()); - + @Test void shouldGetProcessorByNames() { doReturn(Stream.of(processor)).when(service).getProcessors(anyCollection()); - + service.processVorgang(vorgang, processorNames); - + verify(service).getProcessors(processorNames); } - + @Test void shouldCallProcessor() { doReturn(processorMonoResponse).when(service).callProcessor(any(), any()); doReturn(Stream.of(processor)).when(service).getProcessors(anyCollection()); - + service.processVorgang(vorgang, processorNames).toList(); - + verify(service).callProcessor(any(), any()); } - + + @Test + void shouldNotCallProcessorForWrongFormEngine() { + doReturn(Stream.of(processor)).when(service).getProcessors(anyCollection()); + + service.processVorgang(VorgangTestFactory.createBuilder().formEngineName("wrong").build(), processorNames).toList(); + + verify(service, never()).callProcessor(any(), any()); + } + + @Test + void shouldNotCallProcessorForWrongFormId() { + doReturn(Stream.of(processor)).when(service).getProcessors(anyCollection()); + + service.processVorgang(VorgangTestFactory.createBuilder().formId("wrong").build(), processorNames).toList(); + + verify(service, never()).callProcessor(any(), any()); + } + @Test void shouldReturnProcessorResult() { doReturn(processorMonoResponse).when(service).callProcessor(any(), any()); doReturn(Stream.of(processor)).when(service).getProcessors(anyCollection()); - + var result = service.processVorgang(vorgang, processorNames).toList(); - + assertThat(result).containsExactly(processorMonoResponse); } - + @DisplayName("get processors") @Nested class TestGetProcessors { - + private final Processor processor = ProcessorTestFactory.create(); - + @Test void shouldGetConfiguredProcessor() { when(properties.getProcessors()).thenReturn(List.of(processor)); - + service.getProcessors(processorNames); - + verify(properties).getProcessors(); } - + @DisplayName("should return processors matching processor name") @Test void shouldReturnProcessor() { when(properties.getProcessors()).thenReturn(List.of(processor)); - + var processorResult = service.getProcessors(processorNames).toList(); - + assertThat(processorResult).containsExactly(processor); } - + @DisplayName("should return empty stream on non matching processor name") @Test void shouldReturnEmpty() { when(properties.getProcessors()).thenReturn(List.of(ProcessorTestFactory.createBuilder().name("notMatchin").build())); - + var processorResult = service.getProcessors(processorNames).toList(); - + assertThat(processorResult).isEmpty(); } }