You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by is...@apache.org on 2021/06/14 20:12:15 UTC

[airavata-custos] branch develop updated: fix for #205

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

isjarana pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-custos.git


The following commit(s) were added to refs/heads/develop by this push:
     new b94c7c8  fix for #205
     new 5705412  Merge pull request #206 from isururanawaka/develop
b94c7c8 is described below

commit b94c7c8b172c02777e2068750402ecc2d2d3c9fc
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Mon Jun 14 16:11:25 2021 -0400

    fix for #205
---
 .../custos/sharing/client/SharingClient.java       |   4 ++
 .../custos/sharing/mapper/SharingMapper.java       |  35 +++++++++++-
 .../persistance/repository/SharingRepository.java  |  21 ++++----
 .../custos/sharing/service/SharingService.java     |  59 +++++++++++++++++++--
 .../custos/sharing/validator/InputValidator.java   |  15 +++---
 .../src/main/proto/SharingService.proto            |   5 ++
 .../protos/SharingManagementService.proto          |   9 ++++
 .../src/main/resources/protos/SharingService.proto |   5 ++
 .../main/resources/sharing-management-service.pb   | Bin 87361 -> 88031 bytes
 .../service/SharingManagementService.java          |  19 ++++++-
 .../src/main/proto/SharingManagementService.proto  |   9 ++++
 11 files changed, 159 insertions(+), 22 deletions(-)

diff --git a/custos-core-services-client-stubs/sharing-core-service-client-stub/src/main/java/org/apache/custos/sharing/client/SharingClient.java b/custos-core-services-client-stubs/sharing-core-service-client-stub/src/main/java/org/apache/custos/sharing/client/SharingClient.java
index fa9a88f..34d9551 100644
--- a/custos-core-services-client-stubs/sharing-core-service-client-stub/src/main/java/org/apache/custos/sharing/client/SharingClient.java
+++ b/custos-core-services-client-stubs/sharing-core-service-client-stub/src/main/java/org/apache/custos/sharing/client/SharingClient.java
@@ -191,5 +191,9 @@ public class SharingClient {
         return sharingServiceBlockingStub.getAllDirectSharings(request);
     }
 
+    public GetAllSharingsResponse getAllSharings(org.apache.custos.sharing.service.SharingRequest request){
+        return sharingServiceBlockingStub.getAllSharings(request);
+    }
+
 
 }
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/mapper/SharingMapper.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/mapper/SharingMapper.java
index fd1ac13..651bc17 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/mapper/SharingMapper.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/mapper/SharingMapper.java
@@ -23,11 +23,14 @@ import org.apache.custos.sharing.persistance.model.Entity;
 import org.apache.custos.sharing.persistance.model.PermissionType;
 import org.apache.custos.sharing.persistance.model.Sharing;
 import org.apache.custos.sharing.service.SharedOwners;
+import org.apache.custos.sharing.service.SharingMetadata;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 public class SharingMapper {
@@ -90,9 +93,39 @@ public class SharingMapper {
                     map(shr -> shr.getAssociatingId()).collect(Collectors.toList());
 
         }
-
         return builder.addAllOwnerIds(ownerIds).build();
 
     }
 
+    public static Optional<List<SharingMetadata>> getSharingMetadata(List<Sharing> sharingList) {
+        if (sharingList != null && !sharingList.isEmpty()) {
+
+            return Optional.ofNullable(sharingList.stream().
+                    map(shr -> {
+                        try {
+                            SharingMetadata metadata = SharingMetadata.newBuilder()
+                                    .setPermission(org.apache.custos.sharing.service.PermissionType.newBuilder().
+                                            setId(shr.getPermissionType().getExternalId())
+                                            .setName(shr.getPermissionType().getName()
+                                            ).setDescription(shr.getPermissionType().getDescription()).
+                                                    setCreatedAt(shr.getCreatedAt().getTime())
+                                            .setUpdatedAt(shr.getLastModifiedAt().getTime()).build())
+                                    .setOwnerType(shr.getAssociatingIdType())
+                                    .setOwnerId(shr.getAssociatingId())
+                                    .setEntity(EntityMapper.createEntity(shr.getEntity()))
+                                    .build();
+                            return metadata;
+                        } catch (SQLException throwables) {
+                            String msg = "Error occurred while creating metadata " + throwables.getMessage();
+                            LOGGER.error(msg, throwables);
+                        }
+                        ;
+                        return null;
+                    }).collect(Collectors.toList()));
+
+        }
+        return Optional.empty();
+
+    }
+
 }
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java
index 9fd258b..4604da4 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java
@@ -52,12 +52,17 @@ public interface SharingRepository extends JpaRepository<Sharing, String> {
             (long tenantId, String entityId, String permissionTypeId, String associatingIdType);
 
     @Query(value = "select * from sharing s where s.tenant_id = ?1 and s.entity_id = ?2 " +
+            " and s.associating_id_type = ?3", nativeQuery = true)
+    public List<Sharing> findAllByEntityAndOwnerType
+            (long tenantId, String entityId, String associatingIdType);
+
+
+    @Query(value = "select * from sharing s where s.tenant_id = ?1 and s.entity_id = ?2 " +
             "and s.permission_type_id = ?3 and s.associating_id_type = ?4 and s.sharing_type IN ?5", nativeQuery = true)
     public List<Sharing> findAllByEntityAndPermissionTypeAndOwnerTypeAndSharingType
             (long tenantId, String entityId, String permissionTypeId, String associatingIdType, List<String> sharingList);
 
 
-
     @Transactional
     public List<Sharing> deleteAllByInheritedParentIdAndPermissionTypeIdAndTenantIdAndSharingTypeAndAssociatingId(
             String inheritedParentId, String permissionTypeId, long tenantId, String sharingType, String associatedId);
@@ -69,18 +74,16 @@ public interface SharingRepository extends JpaRepository<Sharing, String> {
 
     @Query(value = "select * from sharing s where s.tenant_id = ?1 and s.entity_id = ?2 " +
             "and s.permission_type_id IN ?3 and s.associating_id IN  ?4", nativeQuery = true)
-    public List<Sharing>  findAllSharingOfEntityForGroupsUnderPermissions(long tenantId, String entityId,
-                                                                          List<String> permissionTypes,
-                                                                          List<String> associatedIds);
+    public List<Sharing> findAllSharingOfEntityForGroupsUnderPermissions(long tenantId, String entityId,
+                                                                         List<String> permissionTypes,
+                                                                         List<String> associatedIds);
 
 
     @Query(value = "select * from sharing s where s.tenant_id = ?1 and s.associating_id IN  ?2 " +
             "and s.entity_id  IN ?3", nativeQuery = true)
-    public List<Sharing>  findAllSharingEntitiesForUsers(long tenantId,
-                                                                          List<String> associatedIds,
-                                                                          List<String> entityIds);
-
-
+    public List<Sharing> findAllSharingEntitiesForUsers(long tenantId,
+                                                        List<String> associatedIds,
+                                                        List<String> entityIds);
 
 
 }
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java
index 14496a8..f2c63bc 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java
@@ -788,17 +788,17 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
         try {
             LOGGER.debug("Request received to getListOfSharedUsers " + request.getTenantId() + " for entity "
                     + request.getEntity().getId());
-
+            List<Sharing> sharings = null;
             long tenantId = request.getTenantId();
 
             String entityId = request.getEntity().getId();
 
             String internalEntityId = entityId + "@" + tenantId;
 
+
             String permisstionType = request.getPermissionType().getId();
 
             String internalPermissionTypeId = request.getPermissionType().getId() + "@" + tenantId;
-
             Optional<org.apache.custos.sharing.persistance.model.PermissionType> permissionType =
                     permissionTypeRepository.findById(internalPermissionTypeId);
 
@@ -821,7 +821,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
 
             Optional<org.apache.custos.sharing.persistance.model.PermissionType> optionalPermissionType =
                     permissionTypeRepository.findByExternalIdAndTenantId(Constants.OWNER, tenantId);
-            List<Sharing> sharings = null;
+
             if (optionalPermissionType.get().equals(internalPermissionTypeId)) {
                 List<String> sharingList = new ArrayList<>();
                 sharingList.add(Constants.DIRECT_CASCADING);
@@ -837,6 +837,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
                                 internalPermissionTypeId, Constants.USER);
 
             }
+
             org.apache.custos.sharing.service.SharedOwners owners = SharingMapper.getSharedOwners(sharings);
 
             responseObserver.onNext(owners);
@@ -923,6 +924,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
             String entityId = request.getEntity().getId();
 
             String internalEntityId = entityId + "@" + tenantId;
+            List<Sharing> sharings = null;
 
             String permisstionType = request.getPermissionType().getId();
 
@@ -948,7 +950,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
                 return;
             }
 
-            List<Sharing> sharings = sharingRepository.
+            sharings = sharingRepository.
                     findAllByEntityAndPermissionTypeAndOwnerType(tenantId, internalEntityId,
                             internalPermissionTypeId, Constants.GROUP);
 
@@ -1236,6 +1238,55 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
 
     }
 
+
+    @Override
+    public void getAllSharings(SharingRequest request, StreamObserver<GetAllSharingsResponse> responseObserver) {
+        try {
+            List<org.apache.custos.sharing.service.Entity> arrayList = new ArrayList<>();
+            List<org.apache.custos.sharing.persistance.model.Entity> entities = new ArrayList<>();
+            List<SharingMetadata> sharingMetadata = new ArrayList<>();
+            if (request.hasEntity() && !request.getEntity().getId().isEmpty()) {
+                arrayList.add(request.getEntity());
+                String entityId = request.getEntity().getId() + "@" + request.getTenantId();
+                Optional<org.apache.custos.sharing.persistance.model.Entity> entityOptional = entityRepository.findById(entityId);
+                if (entityOptional.isEmpty()) {
+                    String msg = "Entity " + request.getEntity().getId() + " not found ";
+                    LOGGER.error(msg);
+                    responseObserver.onError(io.grpc.Status.NOT_FOUND.withDescription(msg).asRuntimeException());
+                    return;
+                }
+                entities.add(entityOptional.get());
+            } else {
+                entities = entityRepository
+                        .findAllByTenantId(request.getTenantId());
+            }
+            entities.forEach(entity -> {
+                List<Sharing> userSharings = sharingRepository.
+                        findAllByEntityAndOwnerType(request.getTenantId(), entity.getId(), Constants.USER);
+                List<Sharing> groupSharings = sharingRepository.
+                        findAllByEntityAndOwnerType(request.getTenantId(), entity.getId(), Constants.GROUP);
+                Optional<List<SharingMetadata>> optionalUserSharings = SharingMapper.getSharingMetadata(userSharings);
+                Optional<List<SharingMetadata>> optionalGroupSharings = SharingMapper.getSharingMetadata(groupSharings);
+                if (optionalUserSharings.isPresent()) {
+                    sharingMetadata.addAll(optionalUserSharings.get());
+                }
+                if (optionalGroupSharings.isPresent()) {
+                    sharingMetadata.addAll(optionalGroupSharings.get());
+                }
+
+            });
+            GetAllSharingsResponse response = GetAllSharingsResponse
+                    .newBuilder().addAllSharedData(sharingMetadata).build();
+            responseObserver.onNext(response);
+            responseObserver.onCompleted();
+
+        } catch (Exception ex) {
+            String msg = "Error occurred while fetching all sharings " + request.getTenantId();
+            LOGGER.error(msg);
+            responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
+        }
+    }
+
     private boolean addCascadingPermissionForEntity
             (org.apache.custos.sharing.persistance.model.Entity entity, String internalParentId, long tenantId) {
         List<String> newSharingTypes = new ArrayList<>();
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/validator/InputValidator.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/validator/InputValidator.java
index 01463ef..2d2276b 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/validator/InputValidator.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/validator/InputValidator.java
@@ -94,6 +94,7 @@ public class InputValidator implements Validator {
                 validateCheckAccessRequest(obj, methodName);
                 break;
             case "getAllDirectSharings":
+            case "getAllSharings":
                 validateGetAllDirectSharings(obj, methodName);
                 break;
             default:
@@ -261,13 +262,13 @@ public class InputValidator implements Validator {
                 throw new MissingParameterException("Entity id is  not found ", null);
             }
 
-            if (entityRequest.getPermissionType() == null) {
-                throw new MissingParameterException("Permission Type is  not found ", null);
-            }
-
-            if (entityRequest.getPermissionType().getId() == null || entityRequest.getPermissionType().getId().equals("")) {
-                throw new MissingParameterException("Permission Type Id is  not found ", null);
-            }
+//            if (entityRequest.getPermissionType() == null) {
+//                throw new MissingParameterException("Permission Type is  not found ", null);
+//            }
+//
+//            if (entityRequest.getPermissionType().getId() == null || entityRequest.getPermissionType().getId().equals("")) {
+//                throw new MissingParameterException("Permission Type Id is  not found ", null);
+//            }
 
 
         } else {
diff --git a/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto b/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
index b61b738..ca7023b 100644
--- a/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
+++ b/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
@@ -168,6 +168,10 @@ message GetAllDirectSharingsResponse {
     repeated SharingMetadata  shared_data = 1;
 }
 
+message GetAllSharingsResponse {
+    repeated SharingMetadata  shared_data = 1;
+}
+
 message SharingMetadata {
     Entity entity = 1;
     string owner_id = 2;
@@ -204,6 +208,7 @@ service SharingService {
     rpc getListOfSharedGroups (SharingRequest) returns (SharedOwners);
     rpc getListOfDirectlySharedGroups (SharingRequest) returns (SharedOwners);
     rpc getAllDirectSharings (SharingRequest) returns (GetAllDirectSharingsResponse);
+    rpc getAllSharings (SharingRequest) returns (GetAllSharingsResponse);
 
     rpc shareEntityWithUsers (SharingRequest) returns (Status);
     rpc shareEntityWithGroups (SharingRequest) returns (Status);
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto
index 978e69b..961f1aa 100644
--- a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto
@@ -163,6 +163,13 @@ service SharingManagementService {
 
     }
 
+    rpc getAllSharings (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.GetAllSharingsResponse) {
+        option (google.api.http) = {
+           get: "/sharing-management/v1.0.0/share"
+        };
+
+    }
+
     rpc shareEntityWithUsers (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.Status) {
         option (google.api.http) = {
            post: "/sharing-management/v1.0.0/users/share"
@@ -194,4 +201,6 @@ service SharingManagementService {
 
     }
 
+
+
 }
\ No newline at end of file
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto
index b61b738..ca7023b 100644
--- a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto
@@ -168,6 +168,10 @@ message GetAllDirectSharingsResponse {
     repeated SharingMetadata  shared_data = 1;
 }
 
+message GetAllSharingsResponse {
+    repeated SharingMetadata  shared_data = 1;
+}
+
 message SharingMetadata {
     Entity entity = 1;
     string owner_id = 2;
@@ -204,6 +208,7 @@ service SharingService {
     rpc getListOfSharedGroups (SharingRequest) returns (SharedOwners);
     rpc getListOfDirectlySharedGroups (SharingRequest) returns (SharedOwners);
     rpc getAllDirectSharings (SharingRequest) returns (GetAllDirectSharingsResponse);
+    rpc getAllSharings (SharingRequest) returns (GetAllSharingsResponse);
 
     rpc shareEntityWithUsers (SharingRequest) returns (Status);
     rpc shareEntityWithGroups (SharingRequest) returns (Status);
diff --git a/custos-integration-services/sharing-management-service-parent/sharing-management-service-sidecar/src/main/resources/sharing-management-service.pb b/custos-integration-services/sharing-management-service-parent/sharing-management-service-sidecar/src/main/resources/sharing-management-service.pb
index 7274dd7..afb2520 100644
Binary files a/custos-integration-services/sharing-management-service-parent/sharing-management-service-sidecar/src/main/resources/sharing-management-service.pb and b/custos-integration-services/sharing-management-service-parent/sharing-management-service-sidecar/src/main/resources/sharing-management-service.pb differ
diff --git a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/java/org/apache/custos/sharing/management/service/SharingManagementService.java b/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/java/org/apache/custos/sharing/management/service/SharingManagementService.java
index 4809a61..50cc535 100644
--- a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/java/org/apache/custos/sharing/management/service/SharingManagementService.java
+++ b/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/java/org/apache/custos/sharing/management/service/SharingManagementService.java
@@ -347,7 +347,7 @@ public class SharingManagementService extends SharingManagementServiceImplBase {
             LOGGER.debug("Request received to deleteEntity in tenant " + request.getTenantId() +
                     "  with  entity Id " + request.getEntity().getId());
 
-            Entity exEntity  = sharingClient.getEntity(request);
+            Entity exEntity = sharingClient.getEntity(request);
             Status status = sharingClient.deleteEntity(request);
             Map<String, String> value = new HashMap<>();
             value.put("ENTITY_ID", request.getEntity().getId());
@@ -484,6 +484,23 @@ public class SharingManagementService extends SharingManagementServiceImplBase {
         }
     }
 
+
+    @Override
+    public void getAllSharings(SharingRequest request, StreamObserver<GetAllSharingsResponse> responseObserver) {
+        try {
+            LOGGER.debug("Request received to getAllSharings in tenant " + request.getTenantId());
+
+            GetAllSharingsResponse response = sharingClient.getAllSharings(request);
+            responseObserver.onNext(response);
+            responseObserver.onCompleted();
+
+        } catch (Exception ex) {
+            String msg = "Error occurred at getAllSharings " + ex.getMessage();
+            LOGGER.error(msg);
+            responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
+        }
+    }
+
     @Override
     public void shareEntityWithUsers(SharingRequest request, StreamObserver<Status> responseObserver) {
         try {
diff --git a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto b/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto
index 978e69b..961f1aa 100644
--- a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto
+++ b/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto
@@ -163,6 +163,13 @@ service SharingManagementService {
 
     }
 
+    rpc getAllSharings (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.GetAllSharingsResponse) {
+        option (google.api.http) = {
+           get: "/sharing-management/v1.0.0/share"
+        };
+
+    }
+
     rpc shareEntityWithUsers (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.Status) {
         option (google.api.http) = {
            post: "/sharing-management/v1.0.0/users/share"
@@ -194,4 +201,6 @@ service SharingManagementService {
 
     }
 
+
+
 }
\ No newline at end of file