public void fetchParentResources()

in data-resource-management-service/drms-graph-impl/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java [833:890]


    public void fetchParentResources(ParentResourcesFetchRequest
                                             request, StreamObserver<ParentResourcesFetchResponse> responseObserver) {
        try {
            AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
            String resourseId = request.getResourceId();
            String type = request.getType();
            int depth = request.getDepth();
            if (depth == 0) {
                depth = 1;
            }
            if (type == null || type.isEmpty()) {
                type = "";
            } else {
                type = ":" + type;
            }

            if (hasAccessForResource(callUser.getUsername(), callUser.getTenantId(), resourseId)) {
                Map<String, Object> userProps = new HashMap<>();
                userProps.put("tenantId", callUser.getTenantId());
                userProps.put("entityId", resourseId);
                String query = "MATCH  (r" + type + ")  where  r.entityId = $entityId AND r.tenantId = $tenantId  with r" +
                        " MATCH (r)-[ch:CHILD_OF*1.." + depth + "]->(m) return distinct m";
                List<Record> records = this.neo4JConnector.searchNodes(userProps, query);
                if (!records.isEmpty()) {
                    List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
                    Map<String, GenericResource> genericResourceMap = new HashMap<>();
                    AtomicInteger count = new AtomicInteger();
                    genericResourceList.forEach(resource -> {
                        try {
                            if (hasAccessForResource(callUser.getUsername(), callUser.getTenantId(), resource.getResourceId(), "COLLECTION")) {
                                genericResourceMap.put(String.valueOf(count.get()), resource);
                                count.getAndIncrement();
                            }
                        } catch (Exception exception) {
                            logger.error(" Error occurred while fetching  parent resources: {}", resource.getResourceId());
                        }
                    });

                    ParentResourcesFetchResponse.Builder builder = ParentResourcesFetchResponse.newBuilder();
                    builder.putAllProperties(genericResourceMap);
                    responseObserver.onNext(builder.build());
                    responseObserver.onCompleted();
                } else {
                    ParentResourcesFetchResponse.Builder builder = ParentResourcesFetchResponse.newBuilder();
                    responseObserver.onNext(builder.build());
                    responseObserver.onCompleted();
                }
            } else {
                String msg = " Don't have access to fetch resource " + resourseId;
                responseObserver.onError(Status.PERMISSION_DENIED.withDescription(msg).asRuntimeException());
                return;
            }
        } catch (Exception ex) {
            String msg = " Error occurred while fetching  parent resources " + ex.getMessage();
            logger.error(" Error occurred while fetching  parent resources: Messages {} ", ex.getMessage(), ex);
            responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
        }
    }