This is an automated email from the ASF dual-hosted git repository. dimuthuupe pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/airavata-data-lake.git
commit f3683725276e410fb0c55ff5096a71c773375b3d Author: Dimuthu Wannipurage <[email protected]> AuthorDate: Wed Mar 24 13:52:43 2021 -0400 Fetching resource level metadata --- .../drms/api/handlers/ResourceServiceHandler.java | 19 +++++++- .../drms/core/constants/MetadataConstants.java | 22 +++++++++ .../core/deserializer/MetadataDeserializer.java | 54 ++++++++++++++++++++++ .../main/proto/resource/DRMSResourceService.proto | 6 ++- 4 files changed, 99 insertions(+), 2 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 34efc05..9917ee8 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 @@ -32,6 +32,7 @@ import org.apache.airavata.drms.core.constants.ResourceConstants; import org.apache.airavata.drms.core.constants.StorageConstants; import org.apache.airavata.drms.core.deserializer.AnyStoragePreferenceDeserializer; import org.apache.airavata.drms.core.deserializer.GenericResourceDeserializer; +import org.apache.airavata.drms.core.deserializer.MetadataDeserializer; import org.lognet.springboot.grpc.GRpcService; import org.neo4j.driver.Record; import org.slf4j.Logger; @@ -140,6 +141,22 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI @Override public void fetchResourceMetadata(FetchResourceMetadataRequest request, StreamObserver<FetchResourceMetadataResponse> responseObserver) { - super.fetchResourceMetadata(request, responseObserver); + User callUser = getUser(request.getAuthToken()); + List<Record> records = neo4JConnector.searchNodes("match (u:User)-[MEMBER_OF]->(g:Group)<-[SHARED_WITH]-(res:Resource)-[r:HAS_METADATA]->(m:Metadata) " + + "where u.userId ='" + callUser.getUserId()+ "' and res.resourceId = '" + request.getResourceId() + "' return distinct m"); + try { + List<MetadataNode> metadataNodes = MetadataDeserializer.deserializeList(records); + if (metadataNodes.size() == 1) { + responseObserver.onNext(FetchResourceMetadataResponse.newBuilder().setMetadataNode(metadataNodes.get(0)).build()); + responseObserver.onCompleted(); + } else { + logger.error("No metadata entry for resource {}", request.getResourceId()); + responseObserver.onError(new Exception("No metadata entry for resource " + request.getResourceId())); + } + } catch (Exception e) { + logger.error("Errored while fetching metadata for resource with id {}", request.getResourceId(), e); + responseObserver.onError(new Exception("Errored while fetching metadata for resource with id " + + request.getResourceId() + ". Msg " + e.getMessage())); + } } } diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java new file mode 100644 index 0000000..da573e8 --- /dev/null +++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.airavata.drms.core.constants; + +public final class MetadataConstants { + public static final String METADATA_LABEL = "Metadata"; +} diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java new file mode 100644 index 0000000..e87d4f6 --- /dev/null +++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.airavata.drms.core.deserializer; + +import org.apache.airavata.datalake.drms.storage.Metadata; +import org.apache.airavata.datalake.drms.storage.MetadataNode; +import org.apache.airavata.drms.core.constants.MetadataConstants; +import org.neo4j.driver.Record; +import org.neo4j.driver.Value; +import org.neo4j.driver.internal.InternalRecord; +import org.neo4j.driver.types.Node; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class MetadataDeserializer { + + public static List<MetadataNode> deserializeList(List<Record> neo4jRecords) throws Exception { + List<MetadataNode> metadataNodeList = new ArrayList<>(); + for (Record record : neo4jRecords) { + InternalRecord internalRecord = (InternalRecord) record; + List<Value> values = internalRecord.values(); + + if (values.size() == 1) { + Value metadataValue = values.get(0); + Node metadataNode = metadataValue.asNode(); + if (metadataNode.hasLabel(MetadataConstants.METADATA_LABEL)) { + MetadataNode.Builder metadataNodeBuilder = MetadataNode.newBuilder(); + Map<String, Object> propertiesMap = metadataNode.asMap(); + propertiesMap.forEach((key, val) -> + metadataNodeBuilder.addMetadata(Metadata.newBuilder().setKey(key).setValue(val.toString()).build())); + metadataNodeList.add(metadataNodeBuilder.build()); + } + } + } + return metadataNodeList; + } +} 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 7251f12..fa3a24a 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 @@ -91,10 +91,14 @@ message FetchResourceMetadataRequest { string resourceId = 2; } -message FetchResourceMetadataResponse { +message MetadataNode { repeated Metadata metadata = 1; } +message FetchResourceMetadataResponse { + MetadataNode metadataNode = 1; +} + service ResourceService {
