public void fetchResource()

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());
        }

    }