in data-resource-management-service/drms-rdbms-impl/drms-server/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java [199:264]
public void fetchChildResources(ChildResourceFetchRequest request,
StreamObserver<ChildResourceFetchResponse> responseObserver) {
try {
AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
String resourceId = request.getResourceId();
String type = request.getType();
int offset = request.getOffset();
int limit = request.getLimit();
if (limit == 0) {
limit = -1;
}
boolean access = CustosUtils.userHasAccess(custosClientProvider, callUser.getTenantId(),
callUser.getUsername(), resourceId, new String[]{SharingConstants.PERMISSION_TYPE_VIEWER,
SharingConstants.PERMISSION_TYPE_EDITOR, SharingConstants.PERMISSION_TYPE_OWNER});
if (access) {
try (SharingManagementClient sharingManagementClient = custosClientProvider.getSharingManagementClient()) {
List<GenericResource> genericResources = new ArrayList<>();
List<Resource> resources;
if (limit > 0) {
resources = resourceRepository.findAllByParentResourceIdAndTenantIdAndResourceTypeWithPagination(resourceId
, callUser.getTenantId(), limit, offset);
} else {
resources = resourceRepository.findAllByParentResourceIdAndTenantId(resourceId,
callUser.getTenantId());
}
resources.forEach(resource -> {
String id = resource.getId();
SearchRequest searchRequest = SearchRequest.newBuilder().setOwnerId(callUser
.getUsername())
.setClientId(callUser.getTenantId())
.addSearchCriteria(SearchCriteria.newBuilder()
.setSearchField(EntitySearchField.ID)
.setCondition(SearchCondition.EQUAL)
.setValue(id))
.build();
Entities entities = sharingManagementClient.searchEntities(callUser.getTenantId(), searchRequest);
if (entities != null && !entities.getEntityArrayList().isEmpty()) {
genericResources.add(ResourceMapper.map(resource, entities.getEntityArray(0)));
}
});
ChildResourceFetchResponse childResourceFetchResponse =
ChildResourceFetchResponse
.newBuilder()
.addAllResources(genericResources)
.build();
responseObserver.onNext(childResourceFetchResponse);
responseObserver.onCompleted();
return;
}
}
//TODO:Error
} catch (Exception ex) {
logger.error("Error occurred while fetching child resource {}", request.getResourceId(), ex);
responseObserver.onError(Status.INTERNAL.withDescription("Error occurred while fetching child resource"
+ ex.getMessage()).asRuntimeException());
}
}