diff options
Diffstat (limited to 'src/main/java/org/onap/crud')
-rw-r--r-- | src/main/java/org/onap/crud/service/AbstractGraphDataService.java | 30 | ||||
-rw-r--r-- | src/main/java/org/onap/crud/service/CrudRestService.java | 8 |
2 files changed, 34 insertions, 4 deletions
diff --git a/src/main/java/org/onap/crud/service/AbstractGraphDataService.java b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java index 654ebfb..60241cc 100644 --- a/src/main/java/org/onap/crud/service/AbstractGraphDataService.java +++ b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java @@ -155,6 +155,23 @@ public abstract class AbstractGraphDataService { Vertex outgoingVertex = OxmModelValidator.validateOutgoingPayload(version, persistedVertex); vertices.put(item.getKey(), outgoingVertex); } + + // Patch vertex + else if (opr.getValue().getAsString().equalsIgnoreCase("patch")) { + if ( (vertexPayload.getId() == null) || (vertexPayload.getType() == null) ) { + throw new CrudException("id and type must be specified for patch request", Status.BAD_REQUEST); + } + + vertexPayload.setProperties(CrudServiceUtil.mergeHeaderInFoToPayload(vertexPayload.getProperties(), + headers, false)); + + Vertex existingVertex = dao.getVertex(vertexPayload.getId(), OxmModelValidator.resolveCollectionType(version, vertexPayload.getType())); + Vertex validatedVertex = OxmModelValidator.validateIncomingPatchPayload(vertexPayload.getId(), + version, vertexPayload.getType(), vertexPayload.getProperties(), existingVertex); + Vertex persistedVertex = updateBulkVertex(validatedVertex, vertexPayload.getId(), version, txId); + Vertex outgoingVertex = OxmModelValidator.validateOutgoingPayload(version, persistedVertex); + vertices.put(item.getKey(), outgoingVertex); + } } // Step 4: Handle edge add/modify @@ -171,7 +188,8 @@ public abstract class AbstractGraphDataService { // Add/Update edge if (opr.getValue().getAsString().equalsIgnoreCase("add") - || opr.getValue().getAsString().equalsIgnoreCase("modify")) { + || opr.getValue().getAsString().equalsIgnoreCase("modify") + || opr.getValue().getAsString().equalsIgnoreCase("patch")) { Edge validatedEdge; Edge persistedEdge; if (opr.getValue().getAsString().equalsIgnoreCase("add")) { @@ -197,11 +215,19 @@ public abstract class AbstractGraphDataService { validatedEdge = RelationshipSchemaValidator.validateIncomingAddPayload(version, edgePayload.getType(), edgePayload); persistedEdge = addBulkEdge(validatedEdge, version, txId); - } else { + } else if (opr.getValue().getAsString().equalsIgnoreCase("modify")) { Edge edge = dao.getEdge(edgePayload.getId(), edgePayload.getType(), txId); validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, edgePayload); persistedEdge = updateBulkEdge(validatedEdge, version, txId); + } else { + if ( (edgePayload.getId() == null) || (edgePayload.getType() == null) ) { + throw new CrudException("id and type must be specified for patch request", Status.BAD_REQUEST); + } + Edge existingEdge = dao.getEdge(edgePayload.getId(), edgePayload.getType(), txId); + Edge patchedEdge = RelationshipSchemaValidator.validateIncomingPatchPayload(existingEdge, version, edgePayload); + persistedEdge = updateBulkEdge(patchedEdge, version, txId); } + Edge outgoingEdge = RelationshipSchemaValidator.validateOutgoingPayload(version, persistedEdge); edges.put(item.getKey(), outgoingEdge); diff --git a/src/main/java/org/onap/crud/service/CrudRestService.java b/src/main/java/org/onap/crud/service/CrudRestService.java index d00323e..0ea07f0 100644 --- a/src/main/java/org/onap/crud/service/CrudRestService.java +++ b/src/main/java/org/onap/crud/service/CrudRestService.java @@ -451,11 +451,13 @@ public class CrudRestService { if (!opr.getValue().getAsString().equalsIgnoreCase("add") && !opr.getValue().getAsString().equalsIgnoreCase("modify") + && !opr.getValue().getAsString().equalsIgnoreCase("patch") && !opr.getValue().getAsString().equalsIgnoreCase("delete")) { throw new CrudException("Invalid operation at item: " + item.getKey(), Status.BAD_REQUEST); } - // check if ID is populate for modify/delete operation + // check if ID is populate for modify/patch/delete operation if ((opr.getValue().getAsString().equalsIgnoreCase("modify") + || opr.getValue().getAsString().equalsIgnoreCase("patch") || opr.getValue().getAsString().equalsIgnoreCase("delete")) && (vertexPayload.getId() == null)) { throw new CrudException("Mising ID at item: " + item.getKey(), Status.BAD_REQUEST); @@ -491,11 +493,13 @@ public class CrudRestService { if (!opr.getValue().getAsString().equalsIgnoreCase("add") && !opr.getValue().getAsString().equalsIgnoreCase("modify") + && !opr.getValue().getAsString().equalsIgnoreCase("patch") && !opr.getValue().getAsString().equalsIgnoreCase("delete")) { throw new CrudException("Invalid operation at item: " + item.getKey(), Status.BAD_REQUEST); } - // check if ID is populate for modify/delete operation + // check if ID is populate for modify/patch/delete operation if ((edgePayload.getId() == null) && (opr.getValue().getAsString().equalsIgnoreCase("modify") + || opr.getValue().getAsString().equalsIgnoreCase("patch") || opr.getValue().getAsString().equalsIgnoreCase("delete"))) { throw new CrudException("Mising ID at item: " + item.getKey(), Status.BAD_REQUEST); |