This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch custos-integration
in repository https://gitbox.apache.org/repos/asf/airavata-data-catalog.git

commit d13e11b3088445867def9d031ee15709b4aca39a
Author: Marcus Christie <[email protected]>
AuthorDate: Mon May 1 10:37:44 2023 -0400

    Class name based configuration of sharing manager
---
 .../api/DataCatalogApiServiceApplication.java      | 26 ++++++++++++++++------
 .../api/sharing/SharingManagerImpl.java            | 15 +++++++++++--
 .../api/sharing/SimpleSharingManagerImpl.java      |  2 --
 .../src/main/resources/application.properties      | 19 ++++++++++------
 4 files changed, 44 insertions(+), 18 deletions(-)

diff --git 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/DataCatalogApiServiceApplication.java
 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/DataCatalogApiServiceApplication.java
index 3722a66..e8aeb56 100644
--- 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/DataCatalogApiServiceApplication.java
+++ 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/DataCatalogApiServiceApplication.java
@@ -1,12 +1,13 @@
 package org.apache.airavata.datacatalog.api;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
 import org.apache.airavata.datacatalog.api.sharing.SharingManager;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
-import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Primary;
@@ -22,16 +23,27 @@ import 
org.springframework.data.jpa.repository.config.EnableJpaRepositories;
         "org.apache.custos.sharing.core.persistance.model" })
 public class DataCatalogApiServiceApplication {
 
-    @Autowired
-    private ApplicationContext applicationContext;
-
     public static void main(String[] args) {
         SpringApplication.run(DataCatalogApiServiceApplication.class, args);
     }
 
     @Bean
     @Primary
-    public SharingManager getSharingManager(@Value("${sharing.manager.bean}") 
String sharingManagerBeanName) {
-        return applicationContext.getBean(sharingManagerBeanName, 
SharingManager.class);
+    public SharingManager getSharingManager(
+            
@Value("${sharing.manager.class.name:org.apache.airavata.datacatalog.api.sharing.SimpleSharingManagerImpl}")
 String sharingManagerClassName) {
+        try {
+            Class<?> sharingManagerClass = (Class<?>) 
Class.forName(sharingManagerClassName);
+            Constructor<?> constructor = sharingManagerClass.getConstructor();
+            try {
+                return (SharingManager) constructor.newInstance();
+            } catch (InstantiationException | IllegalAccessException | 
IllegalArgumentException
+                    | InvocationTargetException e) {
+                throw new RuntimeException("Failed to instantiated sharing 
manager " + sharingManagerClass, e);
+            }
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException("Unable to load the sharing manager 
class " + sharingManagerClassName, e);
+        } catch (NoSuchMethodException | SecurityException e) {
+            throw new RuntimeException("Failed to find no-arg constructor for 
" + sharingManagerClassName, e);
+        }
     }
 }
diff --git 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManagerImpl.java
 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManagerImpl.java
index 0ec0f80..3a90c3d 100644
--- 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManagerImpl.java
+++ 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManagerImpl.java
@@ -18,6 +18,7 @@ import org.apache.airavata.datacatalog.api.model.UserEntity;
 import org.apache.airavata.datacatalog.api.repository.TenantRepository;
 import org.apache.airavata.datacatalog.api.repository.UserRepository;
 import org.apache.custos.clients.CustosClientProvider;
+import org.apache.custos.group.management.client.GroupManagementClient;
 import org.apache.custos.iam.service.FindUsersResponse;
 import org.apache.custos.iam.service.UserRepresentation;
 import org.apache.custos.sharing.core.Entity;
@@ -27,15 +28,14 @@ import 
org.apache.custos.sharing.core.exceptions.CustosSharingException;
 import org.apache.custos.sharing.core.impl.SharingImpl;
 import org.apache.custos.sharing.core.utils.Constants;
 import org.apache.custos.user.management.client.UserManagementClient;
+import org.apache.custos.user.profile.service.Group;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
 
 import jakarta.annotation.PostConstruct;
 
-@Component("custosSharingManager")
 public class SharingManagerImpl implements SharingManager {
 
     private static final Logger logger = 
LoggerFactory.getLogger(SharingManagerImpl.class);
@@ -305,4 +305,15 @@ public class SharingManagerImpl implements SharingManager {
             return newTenantEntity;
         }
     }
+
+    private void createPublicGroup(String tenantId) throws SharingException {
+
+        try (GroupManagementClient groupManagementClient = 
custosClientProvider.getGroupManagementClient()) {
+            // TODO: but how do I specify the tenantId to search in?
+            Group findGroupsResponse = 
groupManagementClient.findGroup(clientId, PUBLIC_ACCESS_GROUP, null);
+        } catch (IOException e) {
+            throw new SharingException("Error occurred while resolving public 
group " + PUBLIC_ACCESS_GROUP
+                    + " tenant " + tenantId, e);
+        }
+    }
 }
diff --git 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImpl.java
 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImpl.java
index 05e26f6..8b98573 100644
--- 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImpl.java
+++ 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImpl.java
@@ -27,13 +27,11 @@ import 
org.apache.airavata.datacatalog.api.repository.sharing.simple.SimpleTenan
 import 
org.apache.airavata.datacatalog.api.repository.sharing.simple.SimpleUserRepository;
 import 
org.apache.airavata.datacatalog.api.repository.sharing.simple.SimpleUserSharingRepository;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
 import jakarta.persistence.EntityManager;
 import jakarta.persistence.PersistenceContext;
 import jakarta.persistence.Query;
 
-@Component("simpleSharingManager")
 public class SimpleSharingManagerImpl implements SharingManager {
 
     @Autowired
diff --git a/data-catalog-api/server/src/main/resources/application.properties 
b/data-catalog-api/server/src/main/resources/application.properties
index b559331..d56da73 100644
--- a/data-catalog-api/server/src/main/resources/application.properties
+++ b/data-catalog-api/server/src/main/resources/application.properties
@@ -4,15 +4,20 @@ spring.datasource.password=example
 spring.jpa.hibernate.ddl-auto=update
 spring.jpa.show-sql=true
 
-identity.server.hostname=
-identity.server.port=
-identity.server.clientId=
-identity.server.clientSec=
-
 # Run schema.sql after schema creation performed by Hibernate
 # 
https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.data-initialization.using-basic-sql-scripts
 spring.jpa.defer-datasource-initialization=true
 spring.sql.init.mode=always
 
-sharing.manager.bean=simpleSharingManager
-# sharing.manager.bean=custosSharingManager
+# Sharing configuration
+
+## Simple Sharing
+sharing.manager.class.name=org.apache.airavata.datacatalog.api.sharing.SimpleSharingManagerImpl
+
+## Custos Sharing
+# 
sharing.manager.class.name=org.apache.airavata.datacatalog.api.sharing.SharingManagerImpl
+
+# identity.server.hostname=
+# identity.server.port=0
+# identity.server.clientId=
+# identity.server.clientSec=

Reply via email to