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/07/10 15:49:22 UTC
[airavata-data-lake] branch master updated: Add sharedBy and
SharedWith functions
This is an automated email from the ASF dual-hosted git repository.
isjarana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-data-lake.git
The following commit(s) were added to refs/heads/master by this push:
new d13d211 Add sharedBy and SharedWith functions
new 4aa39f8 Merge pull request #22 from isururanawaka/workflow_invocation
d13d211 is described below
commit d13d211c9853027f1029874bc761e69cd5c72869
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Sat Jul 10 11:48:33 2021 -0400
Add sharedBy and SharedWith functions
---
.../drms/api/handlers/ResourceServiceHandler.java | 48 +++++++++++++++++++++-
.../org/apache/airavata/drms/api/utils/Utils.java | 31 ++++++++++++++
.../synchronizer/handlers/SharingHandler.java | 10 ++++-
.../src/main/resources/application.properties | 3 +-
.../main/proto/resource/DRMSResourceService.proto | 1 +
5 files changed, 89 insertions(+), 4 deletions(-)
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
index d97f29d..3be511a 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -363,6 +363,50 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
List<ResourceSearchQuery> resourceSearchQueries = request.getQueriesList();
int depth = request.getDepth();
String value = request.getType();
+
+ if (!resourceSearchQueries.isEmpty()) {
+ for (ResourceSearchQuery qry : resourceSearchQueries) {
+ if (qry.getField().equals("sharedBy")) {
+ String val = qry.getValue();
+ String query = " Match (m)-[r:SHARED_WITH]->(l) where r.sharedBy=$sharedBy AND m.tenantId=$tenantId and l.tenantId=$tenantId " +
+ "return (m) ";
+ Map<String, Object> objectMap = new HashMap<>();
+ objectMap.put("sharedBy", val);
+ objectMap.put("tenantId", callUser.getTenantId());
+ List<Record> records = this.neo4JConnector.searchNodes(objectMap, query);
+
+ List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
+ ResourceSearchResponse.Builder builder = ResourceSearchResponse.newBuilder();
+ builder.addAllResources(genericResourceList);
+ responseObserver.onNext(builder.build());
+ responseObserver.onCompleted();
+ return;
+ }
+
+ if (qry.getField().equals("sharedWith")) {
+ String val = qry.getValue();
+ String query = "MATCH (u:User) where u.username = $username AND u.tenantId = $tenantId " +
+ " OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u) " +
+ " OPTIONAL MATCH (u)<-[:SHARED_WITH]-(m)<-[:CHILD_OF*]-(rm) , (r)-[:SHARED_WITH]->(u) where NOT r.owner = '" + val + "'" +
+ " AND NOT rm.owner='" + val + "' " +
+ " OPTIONAL MATCH (g)<-[:SHARED_WITH]-(mg)<-[:CHILD_OF*]-(rmg), (rg)-[:SHARED_WITH]->(g) where NOT rg.owner = '" + val + "'" +
+ " AND NOT rmg.owner='" + val + "' " +
+ " return distinct r, rm, rmg, rg ";
+ Map<String, Object> objectMap = new HashMap<>();
+ objectMap.put("username", val);
+ objectMap.put("tenantId", callUser.getTenantId());
+ List<Record> records = this.neo4JConnector.searchNodes(objectMap, query);
+
+ List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
+ ResourceSearchResponse.Builder builder = ResourceSearchResponse.newBuilder();
+ builder.addAllResources(genericResourceList);
+ responseObserver.onNext(builder.build());
+ responseObserver.onCompleted();
+ return;
+ }
+ }
+ }
+
if (value == null || value.isEmpty()) {
logger.error("Errored while searching generic resources");
responseObserver
@@ -417,6 +461,7 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
ResourceSearchResponse.Builder builder = ResourceSearchResponse.newBuilder();
builder.addAllResources(allowedResourceList);
responseObserver.onNext(builder.build());
+ return;
} else {
Map<String, Object> userProps = new HashMap<>();
userProps.put("username", callUser.getUsername());
@@ -444,8 +489,9 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
ResourceSearchResponse.Builder builder = ResourceSearchResponse.newBuilder();
builder.addAllResources(genericResourceList);
responseObserver.onNext(builder.build());
+ responseObserver.onCompleted();
}
- responseObserver.onCompleted();
+
} catch (Exception e) {
logger.error("Errored while searching generic resources; Message: {}", e.getMessage(), e);
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java
index a1729e5..d651d75 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java
@@ -3,7 +3,9 @@ package org.apache.airavata.drms.api.utils;
import io.grpc.Context;
import org.apache.airavata.datalake.drms.storage.ResourceSearchQuery;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
@@ -57,5 +59,34 @@ public class Utils {
return Optional.empty();
}
+ public static Optional<String> getSharedByQuery(List<ResourceSearchQuery> resourceSearchQueries,
+ String tenantId) {
+ if (!resourceSearchQueries.isEmpty()) {
+ for (ResourceSearchQuery qry : resourceSearchQueries) {
+ if (qry.getField().equals("sharedBy")) {
+ String value = qry.getValue();
+ String query = " Match (m)-[r:SHARED_WITH]->(l) where r.sharedBy=$sharedBy AND m.tenantId=$tenantId and l.tenantId=$tenantId " +
+ "return (m) ";
+ Map<String, Object> objectMap = new HashMap<>();
+ objectMap.put("sharedBy", value);
+ objectMap.put("tenantId", tenantId);
+ return Optional.ofNullable(query);
+ }
+ }
+ }
+ return Optional.empty();
+ }
+
+ public static Optional<String> getSharedQueryExceptOwner(List<ResourceSearchQuery> resourceSearchQueries, String type) {
+ if (!resourceSearchQueries.isEmpty()) {
+ for (ResourceSearchQuery qry : resourceSearchQueries) {
+ String query = " MATCH (r:" + type +
+ ") where r." + qry.getField() + " contains '" + qry.getValue() + "' Return r ";
+ return Optional.ofNullable(query);
+ }
+ }
+ return Optional.empty();
+ }
+
}
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/SharingHandler.java b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/SharingHandler.java
index 75a739f..b07127c 100644
--- a/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/SharingHandler.java
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/SharingHandler.java
@@ -120,17 +120,18 @@ public class SharingHandler {
String permissionId = metadata.getPermission().getId();
String userId = metadata.getOwnerId();
String type = metadata.getOwnerType();
+ String sharedBy = metadata.getSharedBy();
userId = userId.replaceAll("'", "`'");
String query = null;
if (type.equalsIgnoreCase("USER")) {
query = "MATCH (a:" + entity.getType() + "), (b:User) WHERE a.entityId = $sourceId AND a.tenantId = $clientId" +
" AND b.username = $userId AND b.tenantId = $clientId " +
- "MERGE (a)-[r:SHARED_WITH]->(b) SET r.permission= $permissionId RETURN a, b";
+ "MERGE (a)-[r:SHARED_WITH]->(b) SET r += $props RETURN a, b";
} else if (type.equalsIgnoreCase("GROUP")) {
query = "MATCH (a:" + entity.getType() + "), (b:Group) WHERE a.entityId = $sourceId " +
" AND a.tenantId = $clientId AND b.groupId = $userId AND b.tenantId = $clientId " +
- "MERGE (a)-[r:SHARED_WITH]->(b) SET r.permission= $permissionId RETURN a, b";
+ "MERGE (a)-[r:SHARED_WITH]->(b) SET r += $props RETURN a, b";
}
if (query != null) {
Map<String, Object> map = new HashMap<>();
@@ -138,6 +139,11 @@ public class SharingHandler {
map.put("clientId", clientId);
map.put("permissionId", permissionId);
map.put("userId", userId);
+ map.put("sharedBy", sharedBy);
+ Map<String, Object> props = new HashMap<>();
+ props.put("sharedBy", sharedBy);
+ props.put("permission", permissionId);
+ map.put("props", props);
try {
Utils.getNeo4JConnector().runTransactionalQuery(map, query);
} catch (Exception ex) {
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/resources/application.properties b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/application.properties
index ba17f62..d343fdd 100644
--- a/data-resource-management-service/drms-custos-synchronizer/src/main/resources/application.properties
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/application.properties
@@ -1 +1,2 @@
-spring.main.web-application-type=none
\ No newline at end of file
+spring.main.web-application-type=none
+config.path=/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
index 1b2f0ec..08ca823 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
@@ -220,4 +220,5 @@ service ResourceService {
};
}
+
}
\ No newline at end of file