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/09/02 17:10:11 UTC
[airavata-data-lake] branch master updated: resource service handler
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 3556e29 resource service handler
new a9b89f2 Merge pull request #52 from isururanawaka/sharing_service_impl
3556e29 is described below
commit 3556e29ddbd21dae0ac6f4bae13458f1de7535bc
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Thu Sep 2 13:08:47 2021 -0400
resource service handler
---
.../drms/api/handlers/ResourceServiceHandler.java | 50 +++++++++++++++++-----
1 file changed, 40 insertions(+), 10 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 d362ed2..e666afd 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
@@ -16,6 +16,7 @@
*/
package org.apache.airavata.drms.api.handlers;
+import com.google.gson.Gson;
import com.google.protobuf.Empty;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.MapEntry;
@@ -257,11 +258,11 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
List<Record> records = this.neo4JConnector.searchNodes(userProps, query);
try {
- List keyList = new ArrayList();
+ List keyList = new ArrayList();
keyList.add("cr:crRel");
keyList.add("chgr:chgrRel");
keyList.add("chcgr:chcgrRel");
- List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records,keyList);
+ List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records, keyList);
ChildResourceFetchResponse.Builder builder = ChildResourceFetchResponse.newBuilder();
builder.addAllResources(genericResourceList);
responseObserver.onNext(builder.build());
@@ -528,8 +529,8 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
" OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u) " +
" OPTIONAL MATCH (s:Storage{entityId:'" + storageId + "'})<-[:CHILD_OF]-(r:" + value + ")-[relR:SHARED_WITH]->(u)" +
" OPTIONAL MATCH (sp:Storage{entityId:'" + storageId + "'})<-[:CHILD_OF]-(rg:" + value + ")-[relRG:SHARED_WITH]->(g)" +
- " OPTIONAL MATCH (s2:Storage{entityId:'" + storageId +"'})<-[:CHILD_OF*]-(r2:" + value + ")-[relR2:SHARED_WITH]->(u) where NOT r2.owner=$username"+
- " OPTIONAL MATCH (s3:Storage{entityId:'" + storageId + "'})<-[:CHILD_OF*]-(r3:" + value + ")-[relR3:SHARED_WITH]->(u) where NOT r3.owner=$username"+
+ " OPTIONAL MATCH (s2:Storage{entityId:'" + storageId + "'})<-[:CHILD_OF*]-(r2:" + value + ")-[relR2:SHARED_WITH]->(u) where NOT r2.owner=$username" +
+ " OPTIONAL MATCH (s3:Storage{entityId:'" + storageId + "'})<-[:CHILD_OF*]-(r3:" + value + ")-[relR3:SHARED_WITH]->(u) where NOT r3.owner=$username" +
" return distinct r,relR, rg,relRG, r2,relR2, r3,relR3 ";
keyList = new ArrayList();
keyList.add("r:relR");
@@ -750,6 +751,8 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
String parentResourceId = request.getResourceId();
String type = request.getType();
+
+
Struct struct = request.getMetadata();
String message = JsonFormat.printer().print(struct);
JSONObject json = new JSONObject(message);
@@ -760,15 +763,28 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
Map<String, Object> parameters = new HashMap<>();
Map<String, Object> properties = new HashMap<>();
- properties.put("metadata", message);
- parameters.put("props", properties);
+
+// parameters.put("props", properties);
parameters.put("parentResourceId", parentResourceId);
parameters.put("resourceId", UUID.randomUUID().toString());
parameters.put("tenantId", callUser.getTenantId());
- String query = " MATCH (r:" + type + ") where r.entityId= $parentResourceId AND r.tenantId= $tenantId " +
- " MERGE (cr:FULL_METADATA_NODE {entityId: $resourceId,tenantId: $tenantId})" +
- " MERGE (r)-[:HAS_FULL_METADATA]->(cr) SET cr += $props return cr";
+ if (type == null || type.isEmpty()) {
+ type = "";
+ } else {
+ type = ":" + type;
+ }
+ Optional<List<String>> jsonList = readMetadata(parentResourceId, type, callUser.getTenantId());
+
+ if (jsonList.isPresent() && !jsonList.get().isEmpty()) {
+
+ String oldJSON = jsonList.get().get(0);
+ message = mergeJSON(oldJSON, message);
+ }
+ parameters.put("metadata",message);
+ String query = " MATCH (r" + type + ") where r.entityId= $parentResourceId AND r.tenantId= $tenantId " +
+ " MERGE (r)-[:HAS_FULL_METADATA]->(cr:FULL_METADATA_NODE{tenantId: $tenantId}) ON CREATE SET cr.metadata= $metadata " +
+ " ON MATCH SET cr.metadata = $metadata";
this.neo4JConnector.runTransactionalQuery(parameters, query);
responseObserver.onNext(Empty.getDefaultInstance());
@@ -839,7 +855,7 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
String query = " MATCH (u:User), (r) where u.username = $username AND u.tenantId = $tenantId AND " +
" r.entityId = $entityId AND r.tenantId = $tenantId" +
" OPTIONAL MATCH (cg:Group)-[:CHILD_OF*]->(g:Group)<-[:MEMBER_OF]-(u)" +
- " OPTIONAL MATCH (l)<-[:CHILD_OF*]-(r)"+
+ " OPTIONAL MATCH (l)<-[:CHILD_OF*]-(r)" +
" return case when exists((u)<-[:SHARED_WITH]-(r)) OR exists((u)<-[:SHARED_WITH]-(l)) OR exists((g)<-[:SHARED_WITH]-(r)) OR " +
" exists((g)<-[:SHARED_WITH]-(l)) OR exists((cg)<-[:SHARED_WITH]-(r)) OR exists((cg)<-[:SHARED_WITH]-(l)) then r else NULL end as value";
@@ -996,4 +1012,18 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
}
}
+ private String mergeJSON(String oldJSON, String newJSON) {
+ Gson gson = new Gson();
+//read both jsons
+ Map<String, Object> json1 = gson.fromJson(oldJSON, Map.class);
+ Map<String, Object> json2 = gson.fromJson(newJSON, Map.class);
+//create combined json with contents of first json
+ Map<String, Object> combined = new HashMap<>(json1);
+//Add the contents of first json. It will overwrite the values of keys are
+//same. e.g. "foo" of json2 will take precedence if both json1 and json2 have "foo"
+ combined.putAll(json2);
+ return gson.toJson(combined);
+ }
+
+
}