in data-resource-management-service/drms-graph-impl/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java [1044:1088]
private void mergeProperties(String parentResourceId, String parentType, String tenantId, String resourceId,
Map<String, Object> values) {
for (String key : values.keySet()) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("parentResourceId", parentResourceId);
parameters.put("tenantId", tenantId);
if (parentResourceId.equals(resourceId) && !(values.get(key) instanceof Map) && !(values.get(key) instanceof List)) {
Map<String, String> props = new HashMap<>();
parameters.put("resourceId", resourceId);
String value = String.valueOf(values.get(key));
props.put(key, value);
parameters.put("props", props);
String query = " MATCH (r:" + parentType + ") where r.entityId= $parentResourceId " +
"AND r.tenantId= $tenantId" +
" SET r += $props return r";
this.neo4JConnector.runTransactionalQuery(parameters, query);
} else if (values.get(key) instanceof Map) {
String newResourceId = UUID.randomUUID().toString();
parameters.put("resourceId", newResourceId);
String type = "METADATA_NODE";
Map<String, Object> hashMap = (Map<String, Object>) values.get(key);
Map<String, Object> newHashMap = new HashMap<>();
newHashMap.put(DATA_LAKE_JSON_IDENTIFIER, key);
newHashMap.putAll(hashMap);
String query = " MATCH (r:" + parentType + ") where r.entityId= $parentResourceId AND r.tenantId= $tenantId " +
" MERGE (cr:" + type + " {entityId: $resourceId,tenantId: $tenantId})" +
" MERGE (r)-[:HAS_METADATA]->(cr) return cr";
this.neo4JConnector.runTransactionalQuery(parameters, query);
mergeProperties(newResourceId, type, tenantId, newResourceId, newHashMap);
} else if (values.get(key) instanceof List) {
ArrayList arrayList = (ArrayList) values.get(key);
Map<String, Object[]> props = new HashMap<>();
parameters.put("resourceId", resourceId);
props.put(key, arrayList.toArray());
parameters.put("props", props);
String query = " MATCH (r:" + parentType + ") where r.entityId= $parentResourceId " +
"AND r.tenantId= $tenantId" +
" SET r += $props return r";
this.neo4JConnector.runTransactionalQuery(parameters, query);
}
}
}