From ff4a66fadaedefb07da1769a549e688562ff47d2 Mon Sep 17 00:00:00 2001 From: Tobias Bruns <kontakt@tobias-bruns.de> Date: Thu, 6 Feb 2025 10:54:03 +0100 Subject: [PATCH] OZG-7669 filter processors if called by name * add logging * add formEngineName --- pom.xml | 4 +- .../processor/processor/LogRunner.java | 23 +++++++ .../processor/ProcessorProperties.java | 2 + .../processor/processor/ProcessorService.java | 10 ++- .../ozgcloud/processor/vorgang/Vorgang.java | 5 +- .../processor/ProcessorServiceTest.java | 62 ++++++++++++------- 6 files changed, 78 insertions(+), 28 deletions(-) create mode 100644 src/main/java/de/ozgcloud/processor/processor/LogRunner.java diff --git a/pom.xml b/pom.xml index ca9687b..8f012b9 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 0000000..d93978c --- /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 e7706c4..51fe4ae 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 15dcb02..ff4d223 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 9d3c877..5634470 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 1b77a77..c9a8720 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(); } } -- GitLab