From d770dccd10f50d344966d147549d84f2d642baeb Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 18 Jul 2023 16:50:04 +0200
Subject: [PATCH] implement autostarter to configure grpc-client

---
 api-lib-core/pom.xml                          |  7 ++++---
 .../apilib/vorgang/OzgCloudVorgang.java       |  2 ++
 .../vorgang/dummy/DummyVorgangService.java    |  2 ++
 .../vorgang/grpc/GrpcVorgangService.java      |  3 ++-
 .../de/ozgcloud/apilib/demo/DemoRunner.java   |  3 ++-
 .../src/main/resources/application.yml        |  3 +++
 ozg-cloud-spring-boot-starter/pom.xml         |  4 ++++
 .../OzgCloudClientAutoConfiguration.java      | 21 +++++++++++++++++++
 ...ot.autoconfigure.AutoConfiguration.imports |  3 ++-
 .../src/main/resources/application.yml        |  7 +++++++
 10 files changed, 49 insertions(+), 6 deletions(-)
 create mode 100644 api-lib-demo/src/main/resources/application.yml
 create mode 100644 ozg-cloud-spring-boot-starter/src/main/resources/application.yml

diff --git a/api-lib-core/pom.xml b/api-lib-core/pom.xml
index ad3c80c..192bc44 100644
--- a/api-lib-core/pom.xml
+++ b/api-lib-core/pom.xml
@@ -9,7 +9,7 @@
 	</parent>
 
 	<artifactId>api-lib-core</artifactId>
-	
+
 	<properties>
 		<lombok.version>1.18.26</lombok.version>
 		<mapstruct.version>1.5.4.Final</mapstruct.version>
@@ -35,7 +35,8 @@
 		<!--spring -->
 		<dependency>
 			<groupId>net.devh</groupId>
-			<artifactId>grpc-client-spring-boot-starter</artifactId>
+			<artifactId>grpc-client-spring-boot-autoconfigure</artifactId>
+			<version>2.14.0.RELEASE</version>
 		</dependency>
 
 		<dependency>
@@ -72,7 +73,7 @@
 			<optional>true</optional>
 		</dependency>
 	</dependencies>
-	
+
 	<build>
 		<plugins>
 			<plugin>
diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgang.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgang.java
index a04a802..11903e3 100644
--- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgang.java
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgang.java
@@ -5,9 +5,11 @@ import java.util.List;
 import lombok.Builder;
 import lombok.Getter;
 import lombok.Singular;
+import lombok.ToString;
 
 @Builder
 @Getter
+@ToString
 public class OzgCloudVorgang {
 
 	private OzgCloudVorgangId id;
diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/dummy/DummyVorgangService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/dummy/DummyVorgangService.java
index 293e9fe..37b5144 100644
--- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/dummy/DummyVorgangService.java
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/dummy/DummyVorgangService.java
@@ -6,6 +6,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.apilib.errorhandling.NotFoundException;
@@ -18,6 +19,7 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStub;
 import de.ozgcloud.apilib.vorgang.VorgangStatus;
 
 @Service
+@ConditionalOnMissingBean(OzgCloudVorgangService.class)
 class DummyVorgangService implements OzgCloudVorgangService {
 
 	private final Map<OzgCloudVorgangId, OzgCloudVorgang> idToVorgang;
diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcVorgangService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcVorgangService.java
index ab96c7e..ca36aaf 100644
--- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcVorgangService.java
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcVorgangService.java
@@ -2,6 +2,7 @@ package de.ozgcloud.apilib.vorgang.grpc;
 
 import java.util.List;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import de.itvsh.ozg.pluto.vorgang.GrpcFindVorgangWithEingangRequest;
@@ -18,7 +19,7 @@ class GrpcVorgangService implements OzgCloudVorgangService {
 
 	@GrpcClient("vorgang-manager")
 	private VorgangServiceBlockingStub vorgangServiceStub;
-
+	@Autowired
 	private OzgCloudVorgangMapper mapper;
 
 	@Override
diff --git a/api-lib-demo/src/main/java/de/ozgcloud/apilib/demo/DemoRunner.java b/api-lib-demo/src/main/java/de/ozgcloud/apilib/demo/DemoRunner.java
index d0324fe..a140db5 100644
--- a/api-lib-demo/src/main/java/de/ozgcloud/apilib/demo/DemoRunner.java
+++ b/api-lib-demo/src/main/java/de/ozgcloud/apilib/demo/DemoRunner.java
@@ -5,6 +5,7 @@ import org.springframework.context.ApplicationListener;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.stereotype.Component;
 
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
 
 @Component
@@ -15,7 +16,7 @@ class DemoRunner implements ApplicationListener<ContextRefreshedEvent> {
 
 	@Override
 	public void onApplicationEvent(ContextRefreshedEvent event) {
-		System.out.println(vorgangService.search("test"));
+		System.out.println(vorgangService.getById(OzgCloudVorgangId.from("647885a50b105b1e4995378e")));
 	}
 
 }
diff --git a/api-lib-demo/src/main/resources/application.yml b/api-lib-demo/src/main/resources/application.yml
new file mode 100644
index 0000000..3f50825
--- /dev/null
+++ b/api-lib-demo/src/main/resources/application.yml
@@ -0,0 +1,3 @@
+ozgcloud:
+  vorgang-manager:
+    url: static://127.0.0.1:9090
\ No newline at end of file
diff --git a/ozg-cloud-spring-boot-starter/pom.xml b/ozg-cloud-spring-boot-starter/pom.xml
index e652140..3e5414d 100644
--- a/ozg-cloud-spring-boot-starter/pom.xml
+++ b/ozg-cloud-spring-boot-starter/pom.xml
@@ -14,6 +14,10 @@
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-autoconfigure</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>net.devh</groupId>
+			<artifactId>grpc-client-spring-boot-starter</artifactId>
+		</dependency>
 
 		<dependency>
 			<groupId>de.ozgcloud.api-lib</groupId>
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 0ef6d54..2a2b6ab 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
@@ -1,10 +1,31 @@
 package de.ozgcloud.client.autoconfigure;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 
+import net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration;
+import net.devh.boot.grpc.client.config.GrpcChannelProperties;
+import net.devh.boot.grpc.client.config.GrpcChannelsProperties;
+import net.devh.boot.grpc.client.config.NegotiationType;
+
 @AutoConfiguration
 @ComponentScan(basePackages = "de.ozgcloud.apilib.**")
+@AutoConfigureBefore(GrpcClientAutoConfiguration.class)
+//TODO remove component scan
 public class OzgCloudClientAutoConfiguration {
 
+	@Bean
+	GrpcChannelsProperties channelProperties() {
+		var properties = new GrpcChannelsProperties();
+		var channelProps = new GrpcChannelProperties();
+
+		properties.getClient().put("vorgang-manager", channelProps);
+
+		channelProps.setAddress("static://127.0.0.1:9090");
+		channelProps.setNegotiationType(NegotiationType.PLAINTEXT);
+
+		return properties;
+	}
 }
diff --git a/ozg-cloud-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ozg-cloud-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 126a0de..daabf24 100644
--- a/ozg-cloud-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/ozg-cloud-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1,2 @@
-de.ozgcloud.client.autoconfigure.OzgCloudClientAutoConfiguration
\ No newline at end of file
+de.ozgcloud.client.autoconfigure.OzgCloudClientAutoConfiguration
+net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration
\ No newline at end of file
diff --git a/ozg-cloud-spring-boot-starter/src/main/resources/application.yml b/ozg-cloud-spring-boot-starter/src/main/resources/application.yml
new file mode 100644
index 0000000..b770baa
--- /dev/null
+++ b/ozg-cloud-spring-boot-starter/src/main/resources/application.yml
@@ -0,0 +1,7 @@
+grpc:
+  client:
+    vorgang-manager:
+#      address: ${ozgcloud.vorgang-manager.url}
+      address: static://127.0.0.1:9090
+      negotiationType: PLAINTEXT
+  
\ No newline at end of file
-- 
GitLab