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=
