You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2023/05/03 14:12:03 UTC
[airavata-data-catalog] 02/09: Class name based configuration of sharing manager
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 <ma...@apache.org>
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=