in data-resource-management-service/drms-graph-impl/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java [66:127]
public void fetchResource(ResourceFetchRequest request, StreamObserver<ResourceFetchResponse> responseObserver) {
try {
AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
String resourceId = request.getResourceId();
String type = request.getType();
if (type == null || type.isEmpty()) {
type = "";
} else {
type = ":" + type;
}
Map<String, Object> userProps = new HashMap<>();
userProps.put("username", callUser.getUsername());
userProps.put("tenantId", callUser.getTenantId());
userProps.put("entityId", resourceId);
String query = " MATCH (u:User) where u.username = $username AND u.tenantId = $tenantId with u " +
" Match (r" + type + ") where r.entityId = $entityId AND r.tenantId = $tenantId with u, r" +
" OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u) " +
" OPTIONAL MATCH (cg:Group)-[:CHILD_OF]->(g)" +
" OPTIONAL MATCH (r)-[:CHILD_OF*]->(x:COLLECTION)" +
" return case when exists((u)<-[:SHARED_WITH]-(r)) OR exists((g)<-[:SHARED_WITH]-(r)) OR " +
"exists((cg)<-[:SHARED_WITH]-(r)) OR exists((u)<-[:SHARED_WITH]-(x)) OR exists((g)<-[:SHARED_WITH]-(x)) OR exists((cg)<-[:SHARED_WITH]-(x))" +
"then r else NULL end as value";
logger.debug("Fetch resource query {}", query);
List<Record> records = this.neo4JConnector.searchNodes(userProps, query);
try {
List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
ResourceFetchResponse.Builder builder = ResourceFetchResponse.newBuilder();
if (!genericResourceList.isEmpty()) {
Optional<AnyStorage> anyStorage = findStorage(resourceId, type, callUser.getTenantId());
GenericResource resource = genericResourceList.get(0);
if (anyStorage.isPresent()) {
if (anyStorage.get().getStorageCase().equals(AnyStorage.StorageCase.SSH_STORAGE)) {
resource = resource.toBuilder().setSshStorage(anyStorage.get().getSshStorage()).build();
} else {
resource = resource.toBuilder().setS3Storage(anyStorage.get().getS3Storage()).build();
}
}
builder.setResource(resource);
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
} catch (Exception e) {
logger.error("Errored while searching generic child resources; Message: {}", e.getMessage(), e);
String msg = "Errored while searching generic child resources " + e.getMessage();
responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
}
} catch (
Exception ex) {
logger.error("Error occurred while fetching child resource {}", request.getResourceId(), ex);
String msg = "Error occurred while fetching child resource with id" + request.getResourceId();
responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
}
}