summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsblimkie <steven.blimkie@amdocs.com>2018-01-12 14:50:36 -0500
committersblimkie <steven.blimkie@amdocs.com>2018-01-12 14:52:01 -0500
commitf4c0fb22527af010761fee9955504bac72ca55db (patch)
tree6fc4d9a4798caea9857f6decbc46b5ab1745507e
parent4141124d43da1503193416a7d23fc07cec308049 (diff)
Allow patch operation in bulk request
Support the patch operation in a bulk request. Change-Id: I10054f60315632812bed18997272a5c9728a3f67 Issue-ID: AAI-482 Signed-off-by: sblimkie <steven.blimkie@amdocs.com>
-rw-r--r--BULK.md4
-rw-r--r--src/main/java/org/onap/crud/service/AbstractGraphDataService.java30
-rw-r--r--src/main/java/org/onap/crud/service/CrudRestService.java8
3 files changed, 36 insertions, 6 deletions
diff --git a/BULK.md b/BULK.md
index f5dc68c..ba94846 100644
--- a/BULK.md
+++ b/BULK.md
@@ -1,8 +1,8 @@
## Bulk API
-The bulk API allows a client to add/update/delete mutliple verticies and/or edges within a single request. This request will be treated as an atomic transaction in that all operations within the bulk request will either fail or succeed together.
+The bulk API allows a client to add/modify/patch/delete multiple vertexes and/or edges within a single request. This request will be treated as an atomic transaction in that all operations within the bulk request will either fail or succeed together.
-This is often useful when attempting to add an entire subgraph. The following example shows how a client could create 2 verticies (pserver and vserver) and link them with an edge.
+This is often useful when attempting to add an entire subgraph. The following example shows how a client could create 2 vertexes (pserver and vserver) and link them with an edge.
URL: https://<host>:9520/services/inventory/v11/bulk
Method: POST
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);