public static List getMetadataSearchQueryForSharedWithMe()

in data-resource-management-service/drms-graph-impl/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java [133:182]


    public static List<GenericResource> getMetadataSearchQueryForSharedWithMe(String type, String key, String value, String storageId,
                                                                              String sharedWith, String tenantId, Neo4JConnector neo4JConnector) throws Exception {
        String preRegex = "'(?i).*";
        String postRegex = ".*'";
        String finalSearchStr = preRegex + value + postRegex;
        String query = "";

        if ((type.equals("FILE") || type.equals("COLLECTION")) && !storageId.isEmpty()) {
            query = " MATCH (u:User) where u.username = $username AND u.tenantId = $tenantId " +
                    " OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u)  " +
                    " OPTIONAL MATCH (u)<-[pRel:SHARED_WITH]-(p:COLLECTION)<-[:CHILD_OF*] -(x:" + type + ")-[relR:SHARED_WITH]->(u)," +
                    " (s:Storage{entityId:'" + storageId + "'})<-[:CHILD_OF*]-(x)-[:HAS_METADATA*]->(m)" +
                    " where NOT  x.owner  = $sharedWith AND m." + key + "=~ " + finalSearchStr +
                    " OPTIONAL MATCH (g)<-[pxRel:SHARED_WITH]-(pr:COLLECTION)<-[:CHILD_OF*] -(px:" + type + ")-[relR:SHARED_WITH]->(g)," +
                    " (s:Storage{entityId:'" + storageId + "'})<-[:CHILD_OF*]-(px)-[:HAS_METADATA*]->(m)" +
                    " where NOT  px.owner  = $sharedWith AND m." + key + "=~ " + finalSearchStr +
                    " return distinct  p,pRel, px,pxRel";
        } else {
            query = " MATCH (u:User) where u.username = $username AND u.tenantId = $tenantId " +
                    " OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u)  " +
                    " OPTIONAL MATCH (u)<-[pRel:SHARED_WITH]-(p:COLLECTION)<-[:CHILD_OF*] -(x:" + type + ")-[relR:SHARED_WITH]->(u), " +
                    " (x)-[:HAS_METADATA*]->(m)" +
                    " where NOT  x.owner  = $sharedWith AND m." + key + "=~ " + finalSearchStr +
                    " OPTIONAL MATCH (g)<-[pxRel:SHARED_WITH]-(pr:COLLECTION)<-[:CHILD_OF*] -(px:" + type + ")-[relR:SHARED_WITH]->(g), " +
                    " (px)-[:HAS_METADATA*]->(m) " +
                    " where NOT  px.owner  = $sharedWith AND m." + key + "=~ " + finalSearchStr +
                    " return distinct  p,pRel, px,pxRel";
        }

        if (key.contains(" ")) {
            query = "MATCH (u:User) where u.username = $username AND u.tenantId = $tenantId " +
                    " OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u)  " +
                    " OPTIONAL MATCH (u)<-[pRel:SHARED_WITH]-(p:COLLECTION)<-[:CHILD_OF*] -(x:" + type + ")-[relR:SHARED_WITH]->(u), " +
                    " (x)-[:HAS_METADATA*]->(m:METADATA_NODE{`" + key + "`: '" + value + "'})" +
                    " where NOT  x.owner  = $sharedWith" +
                    " OPTIONAL MATCH (g)<-[pxRel:SHARED_WITH]-(pr:COLLECTION)<-[:CHILD_OF*] -(px:" + value + ")-[relR:SHARED_WITH]->(g)" +
                    " (px)-[:HAS_METADATA*]->(m:METADATA_NODE{`" + key + "`: '" + value + "'})" +
                    " where NOT  px.owner  = $sharedWith" +
                    " return distinct  p,pRel, px,pxRel";
        }
        Map<String, Object> objectMap = new HashMap<>();
        objectMap.put("sharedWith", sharedWith);
        objectMap.put("username", sharedWith);
        objectMap.put("tenantId", tenantId);
        List<Record> records = neo4JConnector.searchNodes(objectMap, query);
        List<String> keyList = new ArrayList<>();
        keyList.add("p:pRel");
        keyList.add("px:pxRel");
        return GenericResourceDeserializer.deserializeList(records, keyList);
    }