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