public void searchResource()

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

    }