in data-resource-management-service/drms-rdbms-impl/drms-server/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java [323:424]
public void searchResource(ResourceSearchRequest
request, StreamObserver<ResourceSearchResponse> responseObserver) {
AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
invokeUnVerifiedResourceRegistrationWorkflow(callUser.getUsername());
List<ResourceSearchQuery> resourceSearchQueries = request.getQueriesList();
SearchRequest.Builder searchRequestBuilder = SearchRequest.newBuilder();
Map<String, String> searchMap = new HashMap<>();
for (ResourceSearchQuery searchQuery : resourceSearchQueries) {
if (searchQuery.getField().equalsIgnoreCase("sharedBy")) {
SearchCriteria searchCriteria = SearchCriteria.newBuilder()
.setSearchField(EntitySearchField.SHARED_BY)
.setCondition(SearchCondition.EQUAL)
.setValue(searchQuery.getValue()).build();
searchRequestBuilder = searchRequestBuilder.addSearchCriteria(searchCriteria);
} else if (searchQuery.getField().equalsIgnoreCase("sharedWith")) {
SearchCriteria searchCriteria = SearchCriteria.newBuilder()
.setSearchField(EntitySearchField.SHARED_WITH)
.setCondition(SearchCondition.EQUAL)
.setValue(searchQuery.getValue()).build();
searchRequestBuilder = searchRequestBuilder.addSearchCriteria(searchCriteria);
} else {
searchMap.put(searchQuery.getField(), searchQuery.getValue());
}
}
// if (resourceSearchQueries.isEmpty()) {
String type = request.getType();
Optional<TransferMapping> transferMappingOptional = transferMappingRepository.
findTransferMappingByScope(TransferScope.GLOBAL.name());
if (transferMappingOptional.isPresent() && searchMap.isEmpty() && !type.equalsIgnoreCase("COLLECTION_GROUP")) {
TransferMapping transferMapping = transferMappingOptional.get();
String sourceId = transferMapping.getSource().getId();
searchRequestBuilder = searchRequestBuilder.addSearchCriteria(SearchCriteria.newBuilder()
.setSearchField(EntitySearchField.PARENT_ID)
.setCondition(SearchCondition.EQUAL)
.setValue(sourceId).build());
searchRequestBuilder.setSearchPermBottomUp(true);
}
// }
SearchRequest searchRequest = searchRequestBuilder.addSearchCriteria(SearchCriteria.newBuilder()
.setSearchField(EntitySearchField.ENTITY_TYPE_ID)
.setCondition(SearchCondition.EQUAL)
.setValue(type).build())
.setOwnerId(callUser.getUsername())
.setClientId(callUser.getTenantId())
.build();
try (SharingManagementClient sharingManagementClient = custosClientProvider.getSharingManagementClient()) {
Entities entities = sharingManagementClient.searchEntities(callUser.getTenantId(), searchRequest);
List<GenericResource> metadataList = new ArrayList<>();
entities.getEntityArrayList().stream().filter(en -> en.getType().equals(type)).forEach(shrMetadata -> {
if (!searchMap.isEmpty()) {
searchMap.forEach((key, val) -> {
List<ResourceProperty> resourceProperties = resourcePropertyRepository
.findByPropertyKeyAndPropertyValueAndResourceId(key, val, shrMetadata.getId());
resourceProperties.forEach(rp -> {
metadataList.add(ResourceMapper.map(rp.getResource(), shrMetadata));
});
});
} else {
Optional<Resource> resourceOptional = resourceRepository.findById(shrMetadata.getId());
if (resourceOptional.isPresent()) {
metadataList.add(ResourceMapper.map(resourceOptional.get(), shrMetadata));
}
}
});
ResourceSearchResponse resourceSearchResponse = ResourceSearchResponse
.newBuilder()
.addAllResources(metadataList)
.build();
responseObserver.onNext(resourceSearchResponse);
responseObserver.onCompleted();
} catch (
Exception e) {
logger.error("Errored while searching generic resources; Message: {}", e.getMessage(), e);
responseObserver.onError(Status.INTERNAL.withDescription("Errored while searching generic resources "
+ e.getMessage()).asRuntimeException());
}
}