public void searchStoragePreference()

in data-resource-management-service/drms-graph-impl/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java [254:326]


    public void searchStoragePreference(StoragePreferenceSearchRequest request, StreamObserver<StoragePreferenceSearchResponse> responseObserver) {
        try {

            System.out.println(request);
            AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();

            Map<String, Object> userProps = new HashMap<>();
            userProps.put("username", callUser.getUsername());
            userProps.put("tenantId", callUser.getTenantId());

            String query = " MATCH (u:User) where u.username = $username AND u.tenantId = $tenantId" +
                    " OPTIONAL MATCH (u)<-[:SHARED_WITH]-(s1:Storage)<-[:CHILD_OF]-(sp1:StoragePreference)" +
                    " OPTIONAL MATCH (cg:Group)-[:CHILD_OF *0..]->(g:Group)<-[:MEMBER_OF]-(u)" +
                    " OPTIONAL MATCH (sp2:StoragePreference)-[:CHILD_OF]->(s2:Storage)-[:SHARED_WITH]->(cg) " +
                    " OPTIONAL MATCH (sp3:StoragePreference)-[:CHILD_OF]->(s3:Storage)-[:SHARED_WITH]->(g) " +
                    " OPTIONAL MATCH (s4:Storage)<-[:CHILD_OF]-(sp4:StoragePreference)-[:SHARED_WITH]->(u)" +
                    " OPTIONAL MATCH (s5:Storage)<-[:CHILD_OF]-(sp5:StoragePreference)-[:SHARED_WITH]->(cg)" +
                    " OPTIONAL MATCH (s6:Storage)<-[:CHILD_OF]-(sp6:StoragePreference)-[:SHARED_WITH]->(g)" +
                    " return distinct s1, sp1, s2, sp2,s3,sp3, s4,sp4, s5,sp5, s6,sp6";


            String storageId = null;
            List<StoragePreferenceSearchQuery> storagePreferenceSearchQueries = request.getQueriesList();

            for (StoragePreferenceSearchQuery searchQuery : storagePreferenceSearchQueries) {
                if (searchQuery.getField().equals("storageId")) {
                    storageId = searchQuery.getValue();
                }
            }

            if (storageId != null) {
                query = " MATCH (u:User) where u.username = $username AND u.tenantId = $tenantId" +
                        " OPTIONAL MATCH (u)<-[:SHARED_WITH]-(s1:Storage{storageId:'" + storageId + "'})<-[:CHILD_OF]->(sp1:StoragePreference)" +
                        " OPTIONAL MATCH (cg:Group)-[:CHILD_OF *0..]->(g:Group)<-[:MEMBER_OF]-(u)" +
                        " OPTIONAL MATCH (sp2:StoragePreference)-[:CHILD_OF]->(s2:Storage{storageId:'" + storageId + "'})-[:SHARED_WITH]->(cg) " +
                        " OPTIONAL MATCH (sp3:StoragePreference)-[:CHILD_OF]->(s3:Storage{storageId:'" + storageId + "'})-[:SHARED_WITH]->(g)" +
                        " OPTIONAL MATCH (s4:Storage{storageId:'" + storageId + "'})<-[:CHILD_OF]-(sp4:StoragePreference)-[:SHARED_WITH]->(u)" +
                        " OPTIONAL MATCH (s5:Storage{storageId:'" + storageId + "'})<-[:CHILD_OF]-(sp5:StoragePreference)-[:SHARED_WITH]->(cg)" +
                        " OPTIONAL MATCH (s6:Storage{storageId:'" + storageId + "'})<-[:CHILD_OF]-(sp6:StoragePreference)-[:SHARED_WITH]->(g)" +
                        " return distinct s1, sp1, s2, sp2, s3, sp3, s4,sp4, s5,sp5, s6,sp6";
            }

            List<Record> records = this.neo4JConnector.searchNodes(userProps, query);

            if (!records.isEmpty()) {
                try {
                    List keyList = new ArrayList();
                    keyList.add("s1:sp1");
                    keyList.add("s2:sp2");
                    keyList.add("s3:sp3");
                    keyList.add("s4:sp4");
                    keyList.add("s5:sp5");
                    keyList.add("s6:sp6");
                    List<AnyStoragePreference> storagePrefList = AnyStoragePreferenceDeserializer.deserializeList(records, keyList);
                    StoragePreferenceSearchResponse.Builder builder = StoragePreferenceSearchResponse.newBuilder();
                    builder.addAllStoragesPreference(storagePrefList);
                    responseObserver.onNext(builder.build());
                    responseObserver.onCompleted();
                } catch (Exception e) {
                    String msg = "Errored while searching storage preferences; Message:" + e.getMessage();
                    logger.error("Errored while searching storage preferences; Message: {}", e.getMessage(), e);
                    responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
                }
            } else {
                responseObserver.onNext(StoragePreferenceSearchResponse.newBuilder().build());
                responseObserver.onCompleted();
            }
        } catch (Exception e) {
            String msg = "Errored while searching storage preferences; Message:" + e.getMessage();
            logger.error("Errored while searching storage preferences; Message: {}", e.getMessage(), e);
            responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
        }
    }