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