in data-resource-management-service/drms-graph-impl/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java [299:392]
public void updateResource(ResourceUpdateRequest
request, StreamObserver<ResourceUpdateResponse> responseObserver) {
try {
AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
String type = request.getResource().getType();
Map<String, Object> userProps = new HashMap<>();
userProps.put("username", callUser.getUsername());
userProps.put("tenantId", callUser.getTenantId());
String parentId = request.getResource().getParentId();
String entityId = request.getResource().getResourceId();
Map<String, Object> serializedMap = GenericResourceSerializer.serializeToMap(request.getResource());
Optional<Entity> exEntity = CustosUtils.mergeResourceEntity(custosClientProvider, callUser.getTenantId(),
parentId, type, entityId,
request.getResource().getResourceName(), request.getResource().getResourceName(),
callUser.getUsername());
if (exEntity.isPresent()) {
serializedMap.put("description", exEntity.get().getDescription());
serializedMap.put("resourceName", exEntity.get().getName());
serializedMap.put("createdTime", String.valueOf(exEntity.get().getCreatedAt()));
serializedMap.put("tenantId", callUser.getTenantId());
serializedMap.put("entityId", exEntity.get().getId());
serializedMap.put("entityType", exEntity.get().getType());
serializedMap.put("lastModifiedTime", exEntity.get().getCreatedAt());
serializedMap.put("owner", exEntity.get().getOwnerId());
serializedMap.putAll(request.getResource().getPropertiesMap());
if (serializedMap.containsKey("properties") && serializedMap.get("properties") instanceof List) {
List propertiesList = (List) serializedMap.get("properties");
propertiesList.forEach(property -> {
MapEntry entry = (MapEntry) property;
serializedMap.put(entry.getKey().toString(), entry.getValue());
});
}
serializedMap.remove("properties");
if (!parentId.isEmpty()) {
this.neo4JConnector.mergeNodesWithParentChildRelationShip(serializedMap, new HashMap<>(),
request.getResource().getType(), StoragePreferenceConstants.STORAGE_PREFERENCE_LABEL,
callUser.getUsername(), entityId, parentId, callUser.getTenantId());
} else {
this.neo4JConnector.mergeNode(serializedMap, request.getResource().getType(),
callUser.getUsername(), entityId, callUser.getTenantId());
}
} else {
logger.error("Error occurred while creating resource entity in Custos {}", request.getResource().getResourceId());
String msg = "Error occurred while creating resource entity in Custos with id"
+ request.getResource().getResourceId();
responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
return;
}
Map<String, Object> exProps = new HashMap<>();
exProps.put("username", callUser.getUsername());
exProps.put("tenantId", callUser.getTenantId());
exProps.put("entityId", exEntity.get().getId());
String query = " MATCH (u:User) where u.username = $username AND u.tenantId = $tenantId with u " +
" Match (r:" + type + ") where r.entityId = $entityId AND r.tenantId = $tenantId with u, r" +
" OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u) " +
" OPTIONAL MATCH (cg:Group)-[:CHILD_OF]->(g)" +
" return case when exists((u)<-[:SHARED_WITH]-(r)) OR exists((g)<-[:SHARED_WITH]-(r)) OR " +
"exists((cg)<-[:SHARED_WITH]-(r)) then r else NULL end as value";
logger.debug("Update query {}", query);
List<Record> records = this.neo4JConnector.searchNodes(exProps, query);
List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
GenericResource genericResource = genericResourceList.get(0);
if (genericResource.getPropertiesMap().containsKey("name")) {
genericResource = genericResource.toBuilder()
.setResourceName(genericResource.getPropertiesMap().get("name")).build();
} else if (genericResource.getPropertiesMap().containsKey("resourceName")) {
genericResource = genericResource.toBuilder()
.setResourceName(genericResource.getPropertiesMap().get("resourceName")).build();
}
ResourceUpdateResponse response = ResourceUpdateResponse
.newBuilder()
.setResource(genericResource)
.build();
responseObserver.onNext(response);
responseObserver.onCompleted();
} catch (Exception ex) {
logger.error("Error occurred while creating resource {}", request.getResource().getResourceId(), ex);
String msg = "Error occurred while creating resource" + ex.getMessage();
responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
}
}