Skip to content

Commit

Permalink
Merge b8e2bba into edfe882
Browse files Browse the repository at this point in the history
  • Loading branch information
jewzaam committed Sep 15, 2014
2 parents edfe882 + b8e2bba commit 596711d
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 48 deletions.
61 changes: 34 additions & 27 deletions core-api/src/main/java/com/redhat/lightblue/Response.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,17 @@
*/
package com.redhat.lightblue;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.redhat.lightblue.util.Error;
import com.redhat.lightblue.util.JsonObject;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* Response information from mediator APIs
*/
Expand All @@ -53,6 +54,20 @@ public class Response extends JsonObject {
private final List<DataError> dataErrors = new ArrayList<>();
private final List<Error> errors = new ArrayList<>();

private final JsonNodeFactory jsonNodeFactory;

/**
* @deprecated use Response(JsonNodeFactory)
*/
@Deprecated
public Response() {
jsonNodeFactory = JsonNodeFactory.withExactBigDecimals(true);
}

public Response(JsonNodeFactory jsonNodeFactory) {
this.jsonNodeFactory = jsonNodeFactory;
}

/**
* Status of the completed operation
*/
Expand Down Expand Up @@ -140,7 +155,14 @@ public JsonNode getEntityData() {
* Returns the entity data resulting from the call.
*/
public void setEntityData(JsonNode node) {
entityData = node;
// if the node is not an array then wrap it in an array
if (node != null && !node.isArray()) {
ArrayNode arrayNode = new ArrayNode(jsonNodeFactory);
arrayNode.add(node);
entityData = arrayNode;
} else {
entityData = node;
}
}

/**
Expand All @@ -157,24 +179,6 @@ public List<Error> getErrors() {
return errors;
}

/**
* Parses a response from a Json object
*/
public static Response fromJson(ObjectNode node) {
ResponseBuilder builder = new Response.ResponseBuilder();

builder.withStatus(node.get(PROPERTY_STATUS));
builder.withModifiedCount(node.get(PROPERTY_MOD_COUNT));
builder.withMatchCount(node.get(PROPERTY_MATCH_COUNT));
builder.withTaskHandle(node.get(PROPERTY_TASK_HANDLE));
builder.withSession(node.get(PROPERTY_SESSION));
builder.withEntityData(node.get(PROPERTY_PROCESSED));
builder.withDataErrors(node.get(PROPERTY_DATA_ERRORS));
builder.withErrors(node.get(PROPERTY_ERRORS));

return builder.buildResponse();
}

/**
* Returns JSON representation of this
*/
Expand Down Expand Up @@ -203,8 +207,10 @@ public static class ResponseBuilder {
private List<DataError> dataErrors = new ArrayList<>();
private List<Error> errors = new ArrayList<>();

public ResponseBuilder() {
private final JsonNodeFactory jsonNodeFactory;

public ResponseBuilder(JsonNodeFactory jsonNodeFactory) {
this.jsonNodeFactory = jsonNodeFactory;
}

public ResponseBuilder(Response response) {
Expand All @@ -216,6 +222,7 @@ public ResponseBuilder(Response response) {
entityData = response.getEntityData();
dataErrors = response.getDataErrors();
errors = response.getErrors();
jsonNodeFactory = response.jsonNodeFactory;
}

public ResponseBuilder withStatus(JsonNode node) {
Expand Down Expand Up @@ -265,7 +272,7 @@ public ResponseBuilder withEntityData(JsonNode node) {
public ResponseBuilder withDataErrors(JsonNode node) {
if (node instanceof ArrayNode) {
for (Iterator<JsonNode> itr = ((ArrayNode) node).elements();
itr.hasNext();) {
itr.hasNext(); ) {
dataErrors.add(DataError.fromJson((ObjectNode) itr.next()));
}
}
Expand All @@ -275,15 +282,15 @@ public ResponseBuilder withDataErrors(JsonNode node) {
public ResponseBuilder withErrors(JsonNode node) {
if (node instanceof ArrayNode) {
for (Iterator<JsonNode> itr = ((ArrayNode) node).elements();
itr.hasNext();) {
itr.hasNext(); ) {
errors.add(Error.fromJson(itr.next()));
}
}
return this;
}

public Response buildResponse() {
Response response = new Response();
Response response = new Response(jsonNodeFactory);

response.setStatus(status);
response.setModifiedCount(modifiedCount);
Expand Down
38 changes: 24 additions & 14 deletions core-api/src/test/java/com/redhat/lightblue/ResponseTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,21 @@
*/
package com.redhat.lightblue;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.redhat.lightblue.Response.ResponseBuilder;
import com.redhat.lightblue.util.Error;
import com.redhat.lightblue.util.JsonObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.*;

public class ResponseTest {

Expand All @@ -46,8 +43,9 @@ public class ResponseTest {

@Before
public void setUp() throws Exception {
response = new Response();
builder = new Response.ResponseBuilder();
JsonNodeFactory jnf = JsonNodeFactory.withExactBigDecimals(true);
response = new Response(jnf);
builder = new Response.ResponseBuilder(jnf);
}

@After
Expand Down Expand Up @@ -122,9 +120,21 @@ public void testWithSessionNull() {
}

@Test
public void testWithEntityData() {
public void testWithEntityDataObject() {
node = JsonNodeFactory.withExactBigDecimals(true).objectNode();
builder.withEntityData(node);
// note, entityData is treated as an array always. in this case we have to extract the first element of the array for validation
assertTrue(node.equals(builder.buildResponse().getEntityData().get(0)));
}

@Test
public void testWithEntityDataArray() {
node = JsonNodeFactory.withExactBigDecimals(true).arrayNode();
ArrayNode anode = (ArrayNode) node;
anode.add(anode.objectNode());
anode.add(anode.objectNode());
builder.withEntityData(node);
assertEquals(2, builder.buildResponse().getEntityData().size());
assertTrue(node.equals(builder.buildResponse().getEntityData()));
}

Expand Down
10 changes: 5 additions & 5 deletions crud/src/main/java/com/redhat/lightblue/mediator/Mediator.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public Mediator(Metadata md,
public Response insert(InsertionRequest req) {
LOGGER.debug("insert {}", req.getEntityVersion());
Error.push("insert(" + req.getEntityVersion().toString() + ")");
Response response = new Response();
Response response = new Response(factory.getNodeFactory());
try {
OperationContext ctx = OperationContext.getInstance(req, metadata, factory, Operation.INSERT);
EntityMetadata md = ctx.getTopLevelEntityMetadata();
Expand Down Expand Up @@ -149,7 +149,7 @@ public Response insert(InsertionRequest req) {
public Response save(SaveRequest req) {
LOGGER.debug("save {}", req.getEntityVersion());
Error.push("save(" + req.getEntityVersion().toString() + ")");
Response response = new Response();
Response response = new Response(factory.getNodeFactory());
try {
OperationContext ctx = OperationContext.getInstance(req, metadata, factory, Operation.SAVE);
EntityMetadata md = ctx.getTopLevelEntityMetadata();
Expand Down Expand Up @@ -215,7 +215,7 @@ public Response save(SaveRequest req) {
public Response update(UpdateRequest req) {
LOGGER.debug("update {}", req.getEntityVersion());
Error.push("update(" + req.getEntityVersion().toString() + ")");
Response response = new Response();
Response response = new Response(factory.getNodeFactory());
try {
OperationContext ctx = OperationContext.getInstance(req, metadata, factory, Operation.UPDATE);
EntityMetadata md = ctx.getTopLevelEntityMetadata();
Expand Down Expand Up @@ -264,7 +264,7 @@ public Response update(UpdateRequest req) {
public Response delete(DeleteRequest req) {
LOGGER.debug("delete {}", req.getEntityVersion());
Error.push("delete(" + req.getEntityVersion().toString() + ")");
Response response = new Response();
Response response = new Response(factory.getNodeFactory());
try {
OperationContext ctx = OperationContext.getInstance(req, metadata, factory, Operation.DELETE);
EntityMetadata md = ctx.getTopLevelEntityMetadata();
Expand Down Expand Up @@ -313,7 +313,7 @@ public Response delete(DeleteRequest req) {
public Response find(FindRequest req) {
LOGGER.debug("find {}", req.getEntityVersion());
Error.push("find(" + req.getEntityVersion().toString() + ")");
Response response = new Response();
Response response = new Response(factory.getNodeFactory());
response.setStatus(OperationStatus.ERROR);
try {
OperationContext ctx = OperationContext.getInstance(req, metadata, factory, Operation.FIND);
Expand Down
2 changes: 1 addition & 1 deletion crud/src/main/resources/json-schema/response.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
"additionalProperties": true,
"description": "Session information for the client. How this is used is implementation dependent, and TBD"
},
"response": {
"processed": {
"type": "array",
"items": {
"type": "object",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"session": {
"content": "TBD"
},
"response": [
"processed": [
{
"foo": "bar"
}
Expand Down

0 comments on commit 596711d

Please sign in to comment.