From 736e2de0751effc3cb3244f5683b915b192939a6 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Sat, 23 Nov 2024 21:52:07 +0100
Subject: [PATCH] OZG-6990 [wip] use client call interceptor

---
 .../document/DocumentManagerConfiguration.java  |  7 +++++++
 ...BescheidCallContextAttachingInterceptor.java |  3 ++-
 .../bescheid/BescheidEventListener.java         |  3 +++
 .../document/bescheid/BescheidService.java      |  3 +++
 .../ClientAttributeRemoteService.java           | 13 ++++++++-----
 .../attributes/ClientAttributeService.java      |  5 ++++-
 .../binaryfile/BinaryFileRemoteService.java     | 14 +++++++++++---
 .../bescheid/vorgang/VorgangRemoteService.java  | 17 +++++++++--------
 .../bescheid/vorgang/VorgangService.java        |  5 ++++-
 .../attached_item/AttachedItemService.java      |  3 ++-
 .../VorgangAttachedItemRemoteService.java       | 16 +++++++++-------
 lombok.config                                   |  3 ++-
 12 files changed, 64 insertions(+), 28 deletions(-)

diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/DocumentManagerConfiguration.java b/document-manager-server/src/main/java/de/ozgcloud/document/DocumentManagerConfiguration.java
index fdc2559..8470d4d 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/DocumentManagerConfiguration.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/DocumentManagerConfiguration.java
@@ -45,6 +45,13 @@ public class DocumentManagerConfiguration {
 
 	public static final String COMMAND_SERVICE_NAME = "document_OzgCloudCommandService";
 	public static final String USER_PROFILE_SERVICE_NAME = "document_OzgCloudUserProfileService";
+	public static final String CALL_CONTEXT_CLIENT_INTERCEPTOR_NAME = "document_CallContextClientInterceptor";
+	public static final String VORGANG_SERVICE_NAME = "document_VorgangService";
+	public static final String VORGANG_REMOTE_SERVICE_NAME = "document_VorgangRemoteService";
+	public static final String VORGANG_ATTACHED_ITEM_SERVICE_NAME = "document_VorgangAttachedItemService";
+	public static final String VORGANG_ATTACHED_ITEM_REMOTE_SERVICE_NAME = "document_VorgangAttachedItemRemoteService";
+	public static final String CLIENT_ATTRIBUTE_SERVICE_NAME = "document_ClientAttributeService";
+	public static final String CLIENT_ATTRIBUTE_REMOTE_SERVICE_NAME = "document_ClientAttributeRemoteService";
 
 	@GrpcClient(GRPC_COMMAND_MANAGER_NAME)
 	private CommandServiceGrpc.CommandServiceBlockingStub commandServiceStub;
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidCallContextAttachingInterceptor.java b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidCallContextAttachingInterceptor.java
index 6837a33..30c5555 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidCallContextAttachingInterceptor.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidCallContextAttachingInterceptor.java
@@ -7,6 +7,7 @@ import java.util.UUID;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import de.ozgcloud.document.DocumentManagerConfiguration;
 import de.ozgcloud.document.bescheid.common.callcontext.CurrentUserService;
 import io.grpc.CallOptions;
 import io.grpc.Channel;
@@ -16,7 +17,7 @@ import io.grpc.ForwardingClientCall.SimpleForwardingClientCall;
 import io.grpc.Metadata;
 import io.grpc.MethodDescriptor;
 
-@Component("bescheidCallContextInterceptor")
+@Component(DocumentManagerConfiguration.CALL_CONTEXT_CLIENT_INTERCEPTOR_NAME)
 public class BescheidCallContextAttachingInterceptor implements ClientInterceptor {
 
 	public static final String BESCHEID_MANAGER_CLIENT_NAME = "OzgCloud_BescheidManager";
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidEventListener.java b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidEventListener.java
index 13829ca..ed636e1 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidEventListener.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidEventListener.java
@@ -34,11 +34,13 @@ import java.util.stream.Collectors;
 
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.event.EventListener;
 import org.springframework.security.core.context.SecurityContext;
 import org.springframework.stereotype.Component;
 
+import de.ozgcloud.document.DocumentManagerConfiguration;
 import de.ozgcloud.document.bescheid.Bescheid.SendBy;
 import de.ozgcloud.document.bescheid.binaryfile.BinaryFileService;
 import de.ozgcloud.document.bescheid.common.callcontext.CurrentUserService;
@@ -93,6 +95,7 @@ class BescheidEventListener {
 
 	private final BescheidService service;
 	private final BinaryFileService fileService;
+	@Qualifier(DocumentManagerConfiguration.VORGANG_ATTACHED_ITEM_SERVICE_NAME)
 	private final AttachedItemService attachedItemService;
 	private final DocumentService documentService;
 
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidService.java b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidService.java
index a942c70..96da367 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidService.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/BescheidService.java
@@ -66,7 +66,9 @@ public class BescheidService {
 	static final String FIELD_ATTACHMENTS = "attachments";
 	static final String SUBJECT = "Ihr Bescheid zum Antrag";
 
+	@Qualifier(DocumentManagerConfiguration.VORGANG_SERVICE_NAME)
 	private final VorgangService vorgangService;
+	@Qualifier(DocumentManagerConfiguration.VORGANG_ATTACHED_ITEM_SERVICE_NAME)
 	private final AttachedItemService attachedItemService;
 	private final UserProfileService userProfileService;
 	@Qualifier(DocumentManagerConfiguration.COMMAND_SERVICE_NAME)
@@ -74,6 +76,7 @@ public class BescheidService {
 	private final AdministrationService administrationService;
 
 	private final CommandMapper commandMapper;
+	@Qualifier(DocumentManagerConfiguration.CLIENT_ATTRIBUTE_SERVICE_NAME)
 	private final ClientAttributeService bescheidClientAttributeService;
 	private final BuildProperties buildProperties;
 	private final Optional<BescheidRemoteService> remoteService;
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/attributes/ClientAttributeRemoteService.java b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/attributes/ClientAttributeRemoteService.java
index 3114805..a3aa3fc 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/attributes/ClientAttributeRemoteService.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/attributes/ClientAttributeRemoteService.java
@@ -23,9 +23,10 @@
  */
 package de.ozgcloud.document.bescheid.attributes;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.document.DocumentManagerConfiguration;
 import de.ozgcloud.document.bescheid.BescheidCallContextAttachingInterceptor;
 import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub;
 import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission;
@@ -33,16 +34,18 @@ import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute;
 import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue;
 import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest;
 import io.grpc.ClientInterceptor;
+import lombok.RequiredArgsConstructor;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 
-@Service("bescheid_ClientAttributeRemoteService")
+@Service(DocumentManagerConfiguration.CLIENT_ATTRIBUTE_REMOTE_SERVICE_NAME)
+@RequiredArgsConstructor
 class ClientAttributeRemoteService {
 
 	@GrpcClient("vorgang-manager")
-	private ClientAttributeServiceBlockingStub serviceBlockingStub;
+	private final ClientAttributeServiceBlockingStub serviceBlockingStub;
 
-	@Autowired
-	private ClientInterceptor bescheidCallContextInterceptor;
+	@Qualifier(DocumentManagerConfiguration.CALL_CONTEXT_CLIENT_INTERCEPTOR_NAME)
+	private final ClientInterceptor bescheidCallContextInterceptor;
 
 	public void setBooleanReadOnlyClientAttribute(String vorgangId, String attributeName, boolean value) {
 		serviceBlockingStub.withInterceptors(bescheidCallContextInterceptor).set(buildRequest(vorgangId, attributeName, value));
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/attributes/ClientAttributeService.java b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/attributes/ClientAttributeService.java
index 5f6ffec..d09c1bb 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/attributes/ClientAttributeService.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/attributes/ClientAttributeService.java
@@ -23,16 +23,19 @@
  */
 package de.ozgcloud.document.bescheid.attributes;
 
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.document.DocumentManagerConfiguration;
 import lombok.RequiredArgsConstructor;
 
-@Service("bescheid_ClientAttributeService")
+@Service(DocumentManagerConfiguration.CLIENT_ATTRIBUTE_SERVICE_NAME)
 @RequiredArgsConstructor
 public class ClientAttributeService {
 
 	public static final String ATTRIBUTE_NAME_ANTRAG_BEWILLIGT = "antragBewilligt";
 
+	@Qualifier(DocumentManagerConfiguration.CLIENT_ATTRIBUTE_REMOTE_SERVICE_NAME)
 	private final ClientAttributeRemoteService bescheidClientAttributeRemoteService;
 
 	public void setAntragResult(String vorgangId, boolean antragResult) {
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/binaryfile/BinaryFileRemoteService.java b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/binaryfile/BinaryFileRemoteService.java
index 8af3827..4ef6b76 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/binaryfile/BinaryFileRemoteService.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/binaryfile/BinaryFileRemoteService.java
@@ -10,10 +10,13 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
 import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import com.google.protobuf.ByteString;
 
+import de.ozgcloud.document.DocumentManagerConfiguration;
+import de.ozgcloud.document.bescheid.BescheidCallContextAttachingInterceptor;
 import de.ozgcloud.document.bescheid.BescheidResponse;
 import de.ozgcloud.common.binaryfile.FileId;
 import de.ozgcloud.common.binaryfile.GrpcFileUploadUtils;
@@ -27,21 +30,25 @@ import de.ozgcloud.vorgang.grpc.command.GrpcCallContext;
 import io.grpc.stub.CallStreamObserver;
 import io.grpc.stub.StreamObserver;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 
 @Service
+@RequiredArgsConstructor
 class BinaryFileRemoteService {
 
 	private static final String CALL_CONTEXT_CLIENT = "bescheid-manager";
 	private static final String VORGANG_ATTACHMENT_FIELD = "bescheid";
 
 	@GrpcClient("vorgang-manager")
-	private BinaryFileServiceStub binaryFileRemoteStub;
+	private final BinaryFileServiceStub binaryFileRemoteStub;
+	@Qualifier(DocumentManagerConfiguration.CALL_CONTEXT_CLIENT_INTERCEPTOR_NAME)
+	private final BescheidCallContextAttachingInterceptor callContextInterceptor;
 
 	public FileId uploadBescheidFile(@NonNull BescheidResponse bescheid) {
 		try (var in = openFile(bescheid.getBescheidFile())) {
 			var resultFuture = GrpcFileUploadUtils.createSender(this::buildChunkRequest, in,
-					this::buildCallStreamObserver)
+							this::buildCallStreamObserver)
 					.withMetaData(buildMetaDataRequest(bescheid))
 					.send();
 
@@ -79,7 +86,8 @@ class BinaryFileRemoteService {
 
 	private CallStreamObserver<GrpcUploadBinaryFileRequest> buildCallStreamObserver(
 			StreamObserver<GrpcUploadBinaryFileResponse> responseObserver) {
-		return (CallStreamObserver<GrpcUploadBinaryFileRequest>) binaryFileRemoteStub.uploadBinaryFileAsStream(responseObserver);
+		return (CallStreamObserver<GrpcUploadBinaryFileRequest>) binaryFileRemoteStub.withInterceptors(callContextInterceptor)
+				.uploadBinaryFileAsStream(responseObserver);
 	}
 
 	GrpcUploadBinaryFileResponse waitUntilFutureToComplete(FileSender<GrpcUploadBinaryFileRequest, GrpcUploadBinaryFileResponse> fileSender,
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/vorgang/VorgangRemoteService.java b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/vorgang/VorgangRemoteService.java
index fdf8940..95954e0 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/vorgang/VorgangRemoteService.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/vorgang/VorgangRemoteService.java
@@ -1,24 +1,25 @@
 package de.ozgcloud.document.bescheid.vorgang;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.document.DocumentManagerConfiguration;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
 import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub;
 import io.grpc.ClientInterceptor;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 
-@Service("bescheid_VorgangRemoteService")
+@Service(DocumentManagerConfiguration.VORGANG_REMOTE_SERVICE_NAME)
+@RequiredArgsConstructor
 class VorgangRemoteService {
 
 	@GrpcClient("vorgang-manager")
-	private VorgangServiceBlockingStub vorgangServiceStub;
-	@Autowired
-	private BescheidVorgangMapper mapper;
-
-	@Autowired
-	private ClientInterceptor bescheidCallContextInterceptor;
+	private final VorgangServiceBlockingStub vorgangServiceStub;
+	private final BescheidVorgangMapper mapper;
+	@Qualifier(DocumentManagerConfiguration.CALL_CONTEXT_CLIENT_INTERCEPTOR_NAME)
+	private final ClientInterceptor bescheidCallContextInterceptor;
 
 	public Vorgang getById(@NonNull VorgangId vorgangId) {
 		var request = GrpcFindVorgangWithEingangRequest.newBuilder().setId(vorgangId.toString()).build();
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/vorgang/VorgangService.java b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/vorgang/VorgangService.java
index a5d8c45..64bc78d 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/vorgang/VorgangService.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/bescheid/vorgang/VorgangService.java
@@ -1,14 +1,17 @@
 package de.ozgcloud.document.bescheid.vorgang;
 
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.document.DocumentManagerConfiguration;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 
-@Service("bescheid_VorgangService")
+@Service(DocumentManagerConfiguration.VORGANG_SERVICE_NAME)
 @RequiredArgsConstructor
 public class VorgangService {
 
+	@Qualifier(DocumentManagerConfiguration.VORGANG_REMOTE_SERVICE_NAME)
 	private final VorgangRemoteService remoteService;
 
 	public Vorgang getById(@NonNull VorgangId id) {
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/common/attached_item/AttachedItemService.java b/document-manager-server/src/main/java/de/ozgcloud/document/common/attached_item/AttachedItemService.java
index db06b2a..9e1b1a6 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/common/attached_item/AttachedItemService.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/common/attached_item/AttachedItemService.java
@@ -48,7 +48,7 @@ import de.ozgcloud.document.bescheid.BescheidMapper;
 import de.ozgcloud.document.bescheid.vorgang.VorgangId;
 import lombok.RequiredArgsConstructor;
 
-@Service
+@Service(DocumentManagerConfiguration.VORGANG_ATTACHED_ITEM_SERVICE_NAME)
 @RequiredArgsConstructor
 public class AttachedItemService {
 
@@ -60,6 +60,7 @@ public class AttachedItemService {
 
 	@Qualifier(DocumentManagerConfiguration.COMMAND_SERVICE_NAME)
 	private final OzgCloudCommandService commandService;
+	@Qualifier(DocumentManagerConfiguration.VORGANG_ATTACHED_ITEM_REMOTE_SERVICE_NAME)
 	private final VorgangAttachedItemRemoteService remoteService;
 
 	private final CommandMapper commandMapper;
diff --git a/document-manager-server/src/main/java/de/ozgcloud/document/common/attached_item/VorgangAttachedItemRemoteService.java b/document-manager-server/src/main/java/de/ozgcloud/document/common/attached_item/VorgangAttachedItemRemoteService.java
index 20a6ab4..fa32c2c 100644
--- a/document-manager-server/src/main/java/de/ozgcloud/document/common/attached_item/VorgangAttachedItemRemoteService.java
+++ b/document-manager-server/src/main/java/de/ozgcloud/document/common/attached_item/VorgangAttachedItemRemoteService.java
@@ -32,9 +32,10 @@ import java.util.Optional;
 import java.util.stream.Stream;
 
 import org.apache.commons.collections.MapUtils;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.document.DocumentManagerConfiguration;
 import de.ozgcloud.document.bescheid.Bescheid;
 import de.ozgcloud.document.bescheid.BescheidCallContextAttachingInterceptor;
 import de.ozgcloud.document.bescheid.vorgang.VorgangId;
@@ -42,11 +43,13 @@ import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemReques
 import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest;
 import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub;
 import io.grpc.ClientInterceptor;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 
-@Service
+@Service(DocumentManagerConfiguration.VORGANG_ATTACHED_ITEM_REMOTE_SERVICE_NAME)
 @Log4j2
+@RequiredArgsConstructor
 class VorgangAttachedItemRemoteService {
 
 	private static final Comparator<AttachedItem> BY_BESCHIEDEN_AM_DESC = (bescheid1, bescheid2) -> {
@@ -56,11 +59,10 @@ class VorgangAttachedItemRemoteService {
 	};
 
 	@GrpcClient("vorgang-manager")
-	private VorgangAttachedItemServiceBlockingStub serviceStub;
-	@Autowired
-	private ClientInterceptor bescheidCallContextInterceptor;
-	@Autowired
-	private AttachedItemMapper attachedItemMapper;
+	private final VorgangAttachedItemServiceBlockingStub serviceStub;
+	@Qualifier(DocumentManagerConfiguration.CALL_CONTEXT_CLIENT_INTERCEPTOR_NAME)
+	private final ClientInterceptor bescheidCallContextInterceptor;
+	private final AttachedItemMapper attachedItemMapper;
 
 	public Optional<AttachedItem> findBescheidDraft(VorgangId vorgangId) {
 		return findBescheidDraft(buildFindRequest(vorgangId.toString()));
diff --git a/lombok.config b/lombok.config
index a06fa13..f74a428 100644
--- a/lombok.config
+++ b/lombok.config
@@ -28,4 +28,5 @@ lombok.log.log4j.flagUsage = ERROR
 lombok.data.flagUsage = ERROR
 lombok.nonNull.exceptionType = IllegalArgumentException
 lombok.addLombokGeneratedAnnotation = true
-lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
\ No newline at end of file
+lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
+lombok.copyableAnnotations += net.devh.boot.grpc.client.inject.GrpcClient
-- 
GitLab