in data-resource-management-service/drms-graph-impl/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/SharingHandler.java [121:162]
private void mergeEntitySharings(SharingMetadata metadata, String clientId) {
try {
Entity entity = metadata.getEntity();
String sourceId = metadata.getEntity().getId();
String permissionId = metadata.getPermission().getId();
String userId = metadata.getOwnerId();
String type = metadata.getOwnerType();
String sharedBy = metadata.getSharedBy();
userId = userId.replaceAll("'", "`'");
String query = null;
if (type.equalsIgnoreCase("USER")) {
query = "MATCH (a:" + entity.getType() + "), (b:User) WHERE a.entityId = $sourceId AND a.tenantId = $clientId" +
" AND b.username = $userId AND b.tenantId = $clientId " +
"MERGE (a)-[r:SHARED_WITH]->(b) SET r += $props RETURN a, b";
} else if (type.equalsIgnoreCase("GROUP")) {
query = "MATCH (a:" + entity.getType() + "), (b:Group) WHERE a.entityId = $sourceId " +
" AND a.tenantId = $clientId AND b.groupId = $userId AND b.tenantId = $clientId " +
"MERGE (a)-[r:SHARED_WITH]->(b) SET r += $props RETURN a, b";
}
if (query != null) {
Map<String, Object> map = new HashMap<>();
map.put("sourceId", sourceId);
map.put("clientId", clientId);
map.put("permissionId", permissionId);
map.put("userId", userId);
map.put("sharedBy", sharedBy);
Map<String, Object> props = new HashMap<>();
props.put("sharedBy", sharedBy);
props.put("permission", permissionId);
map.put("props", props);
Utils.getNeo4JConnector().runTransactionalQuery(map, query);
}
} catch (UnsupportedOperationException exception) {
LOGGER.debug("Error occurred while merging", exception);
} catch (Exception ex) {
String msg = "Error occurred while merging sharings, " + ex.getMessage();
LOGGER.error(msg, ex);
}
}