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