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