From 462e5e40d21702c568c84c23b4a5058c80f68291 Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Fri, 4 Apr 2025 11:47:49 +0200
Subject: [PATCH] OZG-7573 OZG-7991 Make EingangForwarder a managed bean

---
 .../vorgang/redirect/EingangForwarder.java    | 17 ++++++++--------
 .../redirect/ForwardingRemoteService.java     | 16 +++++++--------
 .../redirect/ForwardingRemoteServiceTest.java | 20 +------------------
 3 files changed, 17 insertions(+), 36 deletions(-)

diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java
index 338af0917..6c71321b1 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java
@@ -31,6 +31,10 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
 import com.google.protobuf.ByteString;
 
 import de.ozgcloud.common.binaryfile.GrpcFileUploadUtils;
@@ -49,18 +53,20 @@ import de.ozgcloud.vorgang.vorgang.IncomingFileGroup;
 import de.ozgcloud.vorgang.vorgang.IncomingFileMapper;
 import io.grpc.stub.ClientCallStreamObserver;
 import io.grpc.stub.ClientResponseObserver;
-import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
+import net.devh.boot.grpc.client.inject.GrpcClient;
 
-@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
+@Component
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+@RequiredArgsConstructor
 @Log4j2
 class EingangForwarder {
 
+	@GrpcClient("forwarder")
 	private final RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub;
 	private final FileService fileService;
-
 	private final IncomingFileMapper incomingFileMapper;
 
 	private ForwardingResponseObserver responseObserver;
@@ -69,11 +75,6 @@ class EingangForwarder {
 	@Getter
 	private CompletableFuture<Void> forwardFuture;
 
-	public static EingangForwarder create(RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub, FileService fileService,
-			IncomingFileMapper incomingFileMapper) {
-		return new EingangForwarder(serviceStub, fileService, incomingFileMapper);
-	}
-
 	public EingangForwarder forward(GrpcRouteForwarding grpcRouteForwarding, List<IncomingFileGroup> attachments,
 			List<IncomingFile> representations) {
 
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java
index eef4e2ca0..387491c0a 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java
@@ -28,15 +28,12 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
+import org.springframework.beans.factory.annotation.Lookup;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.eingang.forwarder.RouteForwardingServiceGrpc;
-import de.ozgcloud.vorgang.files.FileService;
-import de.ozgcloud.vorgang.vorgang.IncomingFileMapper;
 import de.ozgcloud.vorgang.vorgang.VorgangService;
 import lombok.RequiredArgsConstructor;
-import net.devh.boot.grpc.client.inject.GrpcClient;
 
 @Service
 @RequiredArgsConstructor
@@ -45,19 +42,20 @@ class ForwardingRemoteService {
 	static final int TIMEOUT_MINUTES = 10;
 	private final VorgangService vorgangService;
 	private final ForwardingRequestMapper forwardingRequestMapper;
-	@GrpcClient("forwarder")
-	private final RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub;
-	private final FileService fileService;
-	private final IncomingFileMapper incomingFileMapper;
 
 	public void forward(ForwardingRequest request) {
 		var eingang = vorgangService.getById(request.getVorgangId()).getEingangs().getFirst();
 		var grpcRouteForwarding = forwardingRequestMapper.toGrpcRouteForwarding(request, eingang);
-		var responseFuture = EingangForwarder.create(serviceStub, fileService, incomingFileMapper).forward(grpcRouteForwarding, eingang.getAttachments(),
+		var responseFuture = getEingangForwarder().forward(grpcRouteForwarding, eingang.getAttachments(),
 				eingang.getRepresentations()).getForwardFuture();
 		waitForCompletion(responseFuture);
 	}
 
+	@Lookup
+	EingangForwarder getEingangForwarder() {
+		return null; // provided by Spring
+	}
+
 	<T> void waitForCompletion(CompletableFuture<T> responseFuture) {
 		try {
 			responseFuture.get(TIMEOUT_MINUTES, TimeUnit.MINUTES);
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteServiceTest.java
index dce2bd91b..5ddb68d30 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteServiceTest.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteServiceTest.java
@@ -34,21 +34,16 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import org.junit.jupiter.api.AfterEach;
 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 org.mockito.MockedStatic;
 import org.mockito.Spy;
 
 import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.eingang.forwarder.RouteForwardingServiceGrpc;
 import de.ozgcloud.eingang.forwarding.GrpcRouteForwarding;
-import de.ozgcloud.vorgang.files.FileService;
 import de.ozgcloud.vorgang.vorgang.EingangTestFactory;
-import de.ozgcloud.vorgang.vorgang.IncomingFileMapper;
 import de.ozgcloud.vorgang.vorgang.VorgangService;
 import de.ozgcloud.vorgang.vorgang.VorgangTestFactory;
 import lombok.SneakyThrows;
@@ -59,12 +54,6 @@ class ForwardingRemoteServiceTest {
 	private VorgangService vorgangService;
 	@Mock
 	private ForwardingRequestMapper forwardingRequestMapper;
-	@Mock
-	private RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub;
-	@Mock
-	private FileService fileService;
-	@Mock
-	private IncomingFileMapper incomingFileMapper;
 	@InjectMocks
 	@Spy
 	private ForwardingRemoteService service;
@@ -75,26 +64,19 @@ class ForwardingRemoteServiceTest {
 		private final ForwardingRequest request = ForwardingRequestTestFactory.create();
 		private final GrpcRouteForwarding grpcRouteForwarding = GrpcRouteForwardingTestFactory.create();
 		private final CompletableFuture<Void> responseFuture = new CompletableFuture<>();
-		private MockedStatic<EingangForwarder> eingangForwarderMockedStatic;
 		@Mock
 		private EingangForwarder eingangForwarder;
 
 		@BeforeEach
 		void init() {
+			doReturn(eingangForwarder).when(service).getEingangForwarder();
 			when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create());
-			eingangForwarderMockedStatic = mockStatic(EingangForwarder.class);
-			eingangForwarderMockedStatic.when(() -> EingangForwarder.create(any(), any(), any())).thenReturn(eingangForwarder);
 			when(eingangForwarder.forward(any(), any(), any())).thenReturn(eingangForwarder);
 			when(eingangForwarder.getForwardFuture()).thenReturn(responseFuture);
 			when(forwardingRequestMapper.toGrpcRouteForwarding(any(), any())).thenReturn(grpcRouteForwarding);
 			doNothing().when(service).waitForCompletion(any());
 		}
 
-		@AfterEach
-		void teardown() {
-			eingangForwarderMockedStatic.close();
-		}
-
 		@Test
 		void shouldGetVorgang() {
 			service.forward(request);
-- 
GitLab