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 5fbb51088f359d3b3a7800faebc01a28cd5b9dce
Author: Isuru Ranawaka <[email protected]>
AuthorDate: Tue Feb 14 15:01:30 2023 -0500

    implement sharing logic
---
 .gitignore                                         |  4 ++
 .../datacatalog/api/sharing/SharingManager.java    | 17 +++---
 .../api/sharing/SharingManagerImpl.java            | 61 +++++++++++++++++-----
 .../stubs/src/main/proto/DataCatalogAPI.proto      |  1 +
 4 files changed, 61 insertions(+), 22 deletions(-)

diff --git a/.gitignore b/.gitignore
index 79edcba..a78af18 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,7 @@
 target
 .vscode
 logs
+.idea
+.iml
+.ipr
+.iws
diff --git 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManager.java
 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManager.java
index cbe470e..65c61df 100644
--- 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManager.java
+++ 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManager.java
@@ -5,6 +5,7 @@ import org.apache.airavata.datacatalog.api.GroupInfo;
 import org.apache.airavata.datacatalog.api.Permission;
 import org.apache.airavata.datacatalog.api.UserInfo;
 import org.apache.airavata.datacatalog.api.model.UserEntity;
+import org.apache.custos.sharing.core.exceptions.CustosSharingException;
 
 public interface SharingManager {
 
@@ -25,7 +26,7 @@ public interface SharingManager {
      * @param permission
      * @return
      */
-    boolean userHasAccess(UserInfo userInfo, DataProduct dataProduct, 
Permission permission);
+    boolean userHasAccess(UserInfo userInfo, DataProduct dataProduct, 
Permission permission) throws Exception;
 
     /**
      * Return the name of the database view that includes sharing information
@@ -44,7 +45,7 @@ public interface SharingManager {
      * @param dataProduct
      * @param permission
      */
-    void grantPermissionToUser(UserInfo userInfo, DataProduct dataProduct, 
Permission permission);
+    void grantPermissionToUser(UserInfo userInfo, DataProduct dataProduct, 
Permission permission) throws Exception;
 
     /**
      * Revoke permission from the user for the given data product.
@@ -53,7 +54,7 @@ public interface SharingManager {
      * @param dataProduct
      * @param permission
      */
-    void revokePermissionFromUser(UserInfo userInfo, DataProduct dataProduct, 
Permission permission);
+    void revokePermissionFromUser(UserInfo userInfo, DataProduct dataProduct, 
Permission permission) throws Exception;
 
     /**
      * Grant permission to the group for the given data product.
@@ -62,7 +63,7 @@ public interface SharingManager {
      * @param dataProduct
      * @param permission
      */
-    void grantPermissionToGroup(GroupInfo groupInfo, DataProduct dataProduct, 
Permission permission);
+    void grantPermissionToGroup(GroupInfo groupInfo, DataProduct dataProduct, 
Permission permission) throws Exception;
 
     /**
      * Revoke permission from the group for the given data product.
@@ -71,7 +72,7 @@ public interface SharingManager {
      * @param dataProduct
      * @param permission
      */
-    void revokePermissionFromGroup(GroupInfo groupInfo, DataProduct 
dataProduct, Permission permission);
+    void revokePermissionFromGroup(GroupInfo groupInfo, DataProduct 
dataProduct, Permission permission) throws Exception;
 
     /**
      * Return true if public access at the given permission is granted for the
@@ -82,7 +83,7 @@ public interface SharingManager {
      * @param permission
      * @return
      */
-    boolean hasPublicAccess(DataProduct dataProduct, Permission permission);
+    boolean hasPublicAccess(DataProduct dataProduct, Permission permission) 
throws Exception;
 
     /**
      * Grant public access to the given data product.
@@ -90,7 +91,7 @@ public interface SharingManager {
      * @param dataProduct
      * @param permission
      */
-    void grantPublicAccess(DataProduct dataProduct, Permission permission);
+    void grantPublicAccess(DataProduct dataProduct, Permission permission) 
throws Exception;
 
     /**
      * Revoke public access from the given data product.
@@ -98,5 +99,5 @@ public interface SharingManager {
      * @param dataProduct
      * @param permission
      */
-    void revokePublicAccess(DataProduct dataProduct, Permission permission);
+    void revokePublicAccess(DataProduct dataProduct, Permission permission) 
throws Exception;
 }
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 051bc35..7eab638 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
@@ -5,17 +5,23 @@ import org.apache.airavata.datacatalog.api.GroupInfo;
 import org.apache.airavata.datacatalog.api.Permission;
 import org.apache.airavata.datacatalog.api.UserInfo;
 import org.apache.airavata.datacatalog.api.model.UserEntity;
-
+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.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Component
-public class SharingManagerImpl  implements SharingManager {
+public class SharingManagerImpl implements SharingManager {
 
     @Autowired
     SharingImpl custosSharingImpl;
 
+    private static final String PUBLIC_ACCESS_GROUP = "public_access_group";
+
 
     @Override
     public UserEntity resolveUser(UserInfo userInfo) {
@@ -23,8 +29,9 @@ public class SharingManagerImpl  implements SharingManager {
     }
 
     @Override
-    public boolean userHasAccess(UserInfo userInfo, DataProduct dataProduct, 
Permission permission) {
-        return false;
+    public boolean userHasAccess(UserInfo userInfo, DataProduct dataProduct, 
Permission permission) throws CustosSharingException {
+        return custosSharingImpl.userHasAccess(userInfo.getTenantId(), 
dataProduct.getDataProductId(), permission.name(),
+                userInfo.getUserId());
     }
 
     @Override
@@ -33,37 +40,63 @@ public class SharingManagerImpl  implements SharingManager {
     }
 
     @Override
-    public void grantPermissionToUser(UserInfo userInfo, DataProduct 
dataProduct, Permission permission) {
+    public void grantPermissionToUser(UserInfo userInfo, DataProduct 
dataProduct, Permission permission) throws CustosSharingException {
 
+        List<String> userIds = new ArrayList<>();
+        userIds.add(userInfo.getUserId());
+        custosSharingImpl.shareEntity(userInfo.getTenantId(),
+                dataProduct.getDataProductId(), permission.name(), userIds, 
true, Constants.USER, null);
     }
 
     @Override
-    public void revokePermissionFromUser(UserInfo userInfo, DataProduct 
dataProduct, Permission permission) {
+    public void revokePermissionFromUser(UserInfo userInfo, DataProduct 
dataProduct, Permission permission) throws CustosSharingException {
+
+        List<String> userIds = new ArrayList<>();
+        userIds.add(userInfo.getUserId());
+        custosSharingImpl.revokePermission(userInfo.getTenantId(),
+                dataProduct.getDataProductId(), permission.name(), userIds);
 
     }
 
     @Override
-    public void grantPermissionToGroup(GroupInfo groupInfo, DataProduct 
dataProduct, Permission permission) {
+    public void grantPermissionToGroup(GroupInfo groupInfo, DataProduct 
dataProduct, Permission permission) throws CustosSharingException {
 
+        List<String> userIds = new ArrayList<>();
+        userIds.add(groupInfo.getGroupId());
+        custosSharingImpl.shareEntity(groupInfo.getTenantId(),
+                dataProduct.getDataProductId(), permission.name(), userIds, 
true, Constants.GROUP, null);
     }
 
     @Override
-    public void revokePermissionFromGroup(GroupInfo groupInfo, DataProduct 
dataProduct, Permission permission) {
-
+    public void revokePermissionFromGroup(GroupInfo groupInfo, DataProduct 
dataProduct, Permission permission) throws CustosSharingException {
+        List<String> userIds = new ArrayList<>();
+        userIds.add(groupInfo.getGroupId());
+        custosSharingImpl.revokePermission(groupInfo.getTenantId(),
+                dataProduct.getDataProductId(), permission.name(), userIds);
     }
 
     @Override
-    public boolean hasPublicAccess(DataProduct dataProduct, Permission 
permission) {
-        return false;
+    public boolean hasPublicAccess(DataProduct dataProduct, Permission 
permission) throws CustosSharingException{
+        return custosSharingImpl.userHasAccess(dataProduct.getTenantId(), 
dataProduct.getDataProductId(), permission.name(),
+                PUBLIC_ACCESS_GROUP);
     }
 
     @Override
-    public void grantPublicAccess(DataProduct dataProduct, Permission 
permission) {
+    public void grantPublicAccess(DataProduct dataProduct, Permission 
permission) throws CustosSharingException{
+
+        //TODO: create PUBLIC GROUP If not exists
+        List<String> userIds = new ArrayList<>();
+        userIds.add(PUBLIC_ACCESS_GROUP);
+        custosSharingImpl.shareEntity(dataProduct.getTenantId(),
+                dataProduct.getDataProductId(), permission.name(), userIds, 
true, Constants.GROUP, null);
 
     }
 
     @Override
-    public void revokePublicAccess(DataProduct dataProduct, Permission 
permission) {
-
+    public void revokePublicAccess(DataProduct dataProduct, Permission 
permission) throws CustosSharingException{
+        List<String> userIds = new ArrayList<>();
+        userIds.add(PUBLIC_ACCESS_GROUP);
+        custosSharingImpl.revokePermission(dataProduct.getTenantId(),
+                dataProduct.getDataProductId(), permission.name(), userIds);
     }
 }
diff --git a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto 
b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
index 779002c..476fb1a 100644
--- a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
+++ b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
@@ -62,6 +62,7 @@ message DataProduct {
     optional string parent_data_product_id = 2;
     string name = 3;
     optional string metadata = 4;
+    string tenant_id = 5;
 }
 
 message DataProductCreateRequest {

Reply via email to