From 106c870858cea2755fe812652db844a26b9d2c4b Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 14 Nov 2024 13:58:54 +0100
Subject: [PATCH] OZG-6990 initialize default client attribute service

---
 .../OzgCloudClientAutoConfiguration.java      |  13 ++
 ...udClientAttributeServiceStarterITCase.java | 122 ++++++++++++++++++
 .../OzgCloudFileServiceStarterITCase.java     |   2 +-
 3 files changed, 136 insertions(+), 1 deletion(-)
 create mode 100644 ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAttributeServiceStarterITCase.java

diff --git a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java
index ecb1679..fc22fbc 100644
--- a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java
+++ b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java
@@ -14,6 +14,8 @@ import org.springframework.context.annotation.ComponentScan;
 import de.ozgcloud.apilib.alfa.AlfaService;
 import de.ozgcloud.apilib.alfa.CommandAlfaService;
 import de.ozgcloud.apilib.alfa.dummy.DummyAlfaService;
+import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeService;
+import de.ozgcloud.apilib.client_attribute.grpc.OzgCloudClientAttributeGrpcService;
 import de.ozgcloud.apilib.client_attribute.grpc.OzgCloudClientAttributeMapper;
 import de.ozgcloud.apilib.common.callcontext.DefaultOzgCloudCallContextProvider;
 import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider;
@@ -35,6 +37,7 @@ import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangQueryMapper;
 import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangStubMapper;
 import de.ozgcloud.user.grpc.userprofile.UserProfileServiceGrpc;
 import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc;
+import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc;
 import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc;
 import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc;
 import io.grpc.ManagedChannelBuilder;
@@ -139,6 +142,16 @@ public class OzgCloudClientAutoConfiguration {
 		return new GrpcOzgCloudVorgangService(vorgangServiceStub, mapper, stubMapper, queryMapper, contextProvider);
 	}
 
+	@Bean
+	@ConditionalOnProperty("ozgcloud.vorgang-manager.address")
+	@ConditionalOnMissingBean
+	OzgCloudClientAttributeService grpcOzgCloudClientAttributeService(OzgCloudClientAttributeMapper clientAttributeMapper,
+		OzgCloudCallContextProvider contextProvider) {
+		var channel = ManagedChannelBuilder.forTarget(vorgangManagerProperties.getAddress()).usePlaintext().build();
+		var blockingStub = ClientAttributeServiceGrpc.newBlockingStub(channel);
+		return new OzgCloudClientAttributeGrpcService(blockingStub, clientAttributeMapper, contextProvider);
+	}
+
 	@Bean
 	OzgCloudVorgangMapper ozgCloudVorgangMapper() {
 		return Mappers.getMapper(OzgCloudVorgangMapper.class);
diff --git a/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAttributeServiceStarterITCase.java b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAttributeServiceStarterITCase.java
new file mode 100644
index 0000000..86c5fb8
--- /dev/null
+++ b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAttributeServiceStarterITCase.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.client.autoconfigure;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.Optional;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.annotation.DirtiesContext;
+
+import de.ozgcloud.apilib.autoconfig.ApiLibTestApplication;
+import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute;
+import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeService;
+import de.ozgcloud.apilib.client_attribute.OzgCloudDoubleClientAttribute;
+import de.ozgcloud.apilib.client_attribute.OzgCloudLongClientAttribute;
+import de.ozgcloud.apilib.client_attribute.OzgCloudStringClientAttribute;
+import de.ozgcloud.apilib.client_attribute.grpc.OzgCloudClientAttributeGrpcService;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
+
+public class OzgCloudClientAttributeServiceStarterITCase {
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class)
+	@DirtiesContext
+	class TestWithoutOzgCloudClientAttributeService {
+
+		@Autowired
+		private Optional<OzgCloudClientAttributeService> ozgCloudFileService;
+
+		@Test
+		void shouldStart() {
+			assertThat(ozgCloudFileService).isEmpty();
+		}
+	}
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
+		"ozgcloud.vorgang-manager.address=address"
+	})
+	class TestWithOzgCloudClientAttributeService {
+
+		@Autowired
+		private OzgCloudClientAttributeService attributeService;
+
+		@Test
+		void shouldStart() {
+			assertThat(attributeService).isInstanceOf(OzgCloudClientAttributeGrpcService.class);
+		}
+	}
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class)
+	@Import(TestWithExistingOzgCloudClientAttributeService.Config.class)
+	class TestWithExistingOzgCloudClientAttributeService {
+
+		@Autowired
+		private OzgCloudClientAttributeService attributeService;
+
+		@Test
+		void shouldStart() { // NOSONAR
+			assertThat(attributeService).isInstanceOf(TestClientAttributeService.class);
+		}
+
+		static class Config {
+
+			@Bean
+			OzgCloudClientAttributeService ozgCloudFileService() {
+				return new TestClientAttributeService();
+			}
+		}
+
+		static class TestClientAttributeService implements OzgCloudClientAttributeService {
+
+			@Override
+			public void setClientAttribute(final OzgCloudBooleanClientAttribute clientAttribute, final OzgCloudVorgangId vorgangId) {
+
+			}
+
+			@Override
+			public void setClientAttribute(final OzgCloudStringClientAttribute clientAttribute, final OzgCloudVorgangId vorgangId) {
+
+			}
+
+			@Override
+			public void setClientAttribute(final OzgCloudLongClientAttribute clientAttribute, final OzgCloudVorgangId vorgangId) {
+
+			}
+
+			@Override
+			public void setClientAttribute(final OzgCloudDoubleClientAttribute clientAttribute, final OzgCloudVorgangId vorgangId) {
+
+			}
+		}
+	}
+}
diff --git a/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudFileServiceStarterITCase.java b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudFileServiceStarterITCase.java
index 0581131..0f408d6 100644
--- a/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudFileServiceStarterITCase.java
+++ b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudFileServiceStarterITCase.java
@@ -44,7 +44,7 @@ public class OzgCloudFileServiceStarterITCase {
 
 	@Nested
 	@SpringBootTest(classes = ApiLibTestApplication.class)
-	@DirtiesContext()
+	@DirtiesContext
 	class TestWithoutOzgCloudFileService {
 
 		@Autowired
-- 
GitLab