jackson, HTTP codes and JSON responses, xICIC/RRMConfig fix
diff --git a/src/main/java/org.onosproject.xran/rest/CellWebResource.java b/src/main/java/org.onosproject.xran/rest/CellWebResource.java
index 25825a9..ac2806d 100644
--- a/src/main/java/org.onosproject.xran/rest/CellWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/CellWebResource.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.xran.rest;
+import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.commons.lang.exception.ExceptionUtils;
@@ -23,6 +24,7 @@
import org.onosproject.xran.annotations.Patch;
import org.onosproject.xran.controller.XranController;
import org.onosproject.xran.entities.RnibCell;
+import org.onosproject.xran.rest.ResponseHelper.statusCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,7 +35,6 @@
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
@@ -47,6 +48,9 @@
private static final Logger log =
LoggerFactory.getLogger(CellWebResource.class);
+ public CellWebResource() {
+ }
+
/**
* test.
*
@@ -61,20 +65,34 @@
if (cell != null) {
try {
- ObjectNode rootNode = mapper().createObjectNode();
+ JsonNode jsonNode = mapper().valueToTree(cell);
- JsonNode jsonNode = mapper().readTree(cell.toString());
- rootNode.put("cell", jsonNode);
- } catch (IOException e) {
- log.error(ExceptionUtils.getFullStackTrace(e));
+ return ResponseHelper.getResponse(
+ mapper(),
+ statusCode.OK,
+ jsonNode
+ );
+
+ } catch (Exception e) {
+ String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+ log.error(fullStackTrace);
e.printStackTrace();
- return Response.serverError()
- .entity(ExceptionUtils.getFullStackTrace(e))
- .build();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ statusCode.INTERNAL_SERVER_ERROR,
+ "Exception",
+ fullStackTrace
+ );
}
}
- return Response.serverError().entity("cell not found").build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ statusCode.NOT_FOUND,
+ "Not Found",
+ "Cell with " + eciHex + " was not found"
+ );
}
/**
@@ -87,6 +105,7 @@
@Patch
@Path("{cellid}")
@Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
public Response patchCell(@PathParam("cellid") String eciHex, InputStream stream) {
RnibCell cell = get(XranStore.class).getCell(eciHex);
@@ -104,27 +123,41 @@
String poll = queue[0].poll(5, TimeUnit.SECONDS);
if (poll != null) {
- return Response.ok()
- .entity(poll)
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ statusCode.OK,
+ "Handoff Response",
+ poll
+ );
} else {
- return Response.serverError()
- .entity("did not receive response in time")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ statusCode.REQUEST_TIMEOUT,
+ "Handoff Timeout",
+ "eNodeB did not send a HOComplete/HOFailure on time"
+ );
}
}
} catch (Exception e) {
- log.error(ExceptionUtils.getFullStackTrace(e));
+ String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+ log.error(fullStackTrace);
e.printStackTrace();
- return Response.serverError()
- .entity(ExceptionUtils.getFullStackTrace(e))
- .build();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ statusCode.INTERNAL_SERVER_ERROR,
+ "Exception",
+ fullStackTrace
+ );
}
}
- return Response.serverError()
- .entity("cell not found")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ statusCode.NOT_FOUND,
+ "Not Found",
+ "Cell " + eciHex + " was not found"
+ );
}
}
diff --git a/src/main/java/org.onosproject.xran/rest/LinkWebResource.java b/src/main/java/org.onosproject.xran/rest/LinkWebResource.java
index 8a85941..4d8dc11 100644
--- a/src/main/java/org.onosproject.xran/rest/LinkWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/LinkWebResource.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.xran.rest;
+import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Lists;
@@ -26,14 +27,20 @@
import org.onosproject.xran.entities.RnibCell;
import org.onosproject.xran.entities.RnibLink;
import org.onosproject.xran.entities.RnibUe;
-import org.openmuc.jasn1.ber.types.BerInteger;
+import org.onosproject.xran.codecs.ber.types.BerInteger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.ws.rs.*;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Optional;
@@ -49,6 +56,10 @@
private static final Logger log =
LoggerFactory.getLogger(LinkWebResource.class);
+ public LinkWebResource() {
+
+ }
+
/**
* test.
*
@@ -74,18 +85,35 @@
list.addAll(get(XranStore.class).getLinks());
}
- try {
- ObjectNode rootNode = mapper().createObjectNode();
- JsonNode jsonNode = mapper().readTree(list.toString());
- rootNode.put("links", jsonNode);
- return Response.ok(rootNode.toString()).build();
- } catch (IOException e) {
- log.error(ExceptionUtils.getFullStackTrace(e));
- e.printStackTrace();
- return Response.serverError()
- .entity(ExceptionUtils.getFullStackTrace(e))
- .build();
+ if (list.size() > 0) {
+ try {
+ JsonNode jsonNode = mapper().valueToTree(list);
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ jsonNode
+ );
+ } catch (Exception e) {
+ String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+ log.error(fullStackTrace);
+ e.printStackTrace();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+ "Exception",
+ fullStackTrace
+ );
+ }
}
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_FOUND,
+ "Not Found",
+ "Specified links not found"
+ );
}
/**
@@ -99,6 +127,7 @@
@Patch
@Path("{src},{dst}")
@Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
public Response patchLinks(@PathParam("src") String src, @PathParam("dst") long dst, InputStream stream) {
RnibLink link = get(XranStore.class).getLinkBetweenCellIdUeId(src, dst);
if (link != null) {
@@ -122,12 +151,25 @@
}
} catch (Exception e) {
- log.error(ExceptionUtils.getFullStackTrace(e));
+ String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+ log.error(fullStackTrace);
e.printStackTrace();
- return Response.serverError().entity(ExceptionUtils.getFullStackTrace(e)).build();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+ "Exception",
+ fullStackTrace
+ );
}
}
- return Response.serverError().entity("link not found use POST request").build();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_FOUND,
+ "Not Found",
+ "Link not found use POST request"
+ );
}
/**
@@ -141,26 +183,36 @@
@POST
@Path("{src},{dst}")
@Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
public Response postLinks(@PathParam("src") String src, @PathParam("dst") long dst, InputStream stream) {
RnibCell cell = get(XranStore.class).getCell(src);
RnibUe ue = get(XranStore.class).getUe(dst);
if (cell == null) {
- return Response.serverError()
- .entity("cell not found")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_FOUND,
+ "Not Found",
+ "Cell " + src + " was not found"
+ );
}
if (ue == null) {
- return Response.serverError()
- .entity("ue not found")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_FOUND,
+ "Not Found",
+ "Ue with " + dst + " was not found"
+ );
}
if (get(XranStore.class).getLink(cell.getEcgi(), ue.getMmeS1apId()) != null) {
- return Response.serverError()
- .entity("link exists use PATCH request")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.BAD_REQUEST,
+ "Bad Request",
+ "Link already exists use PATCH to modify"
+ );
}
try {
@@ -186,16 +238,24 @@
}
} catch (Exception e) {
- log.error(ExceptionUtils.getFullStackTrace(e));
+ String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+ log.error(fullStackTrace);
e.printStackTrace();
- return Response.serverError()
- .entity(ExceptionUtils.getFullStackTrace(e))
- .build();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+ "Exception",
+ fullStackTrace
+ );
}
- return Response.serverError()
- .entity("unreachable code")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_IMPLEMENTED,
+ "Not Implemented",
+ "This request is not implemented"
+ );
}
private Response handleTypeChange(RnibLink link, RnibLink.Type newType) throws InterruptedException {
@@ -204,9 +264,12 @@
if (newType.equals(RnibLink.Type.SERVING_PRIMARY)) {
switch (link.getType()) {
case SERVING_PRIMARY: {
- return Response.serverError()
- .entity("link already a primary")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.BAD_REQUEST,
+ "Bad Request",
+ "Link is already a primary link"
+ );
}
case SERVING_SECONDARY_CA:
case SERVING_SECONDARY_DC:
@@ -221,73 +284,109 @@
String poll = queue[0].poll(5, TimeUnit.SECONDS);
if (poll != null) {
- return Response.ok()
- .entity(poll)
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ "Handoff Response",
+ poll
+ );
} else {
- return Response.serverError()
- .entity("did not receive response in time")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.REQUEST_TIMEOUT,
+ "Handoff Timeout",
+ "eNodeB did not send a HOComplete/HOFailure on time"
+ );
}
} else {
link.setType(RnibLink.Type.SERVING_PRIMARY);
- return Response.ok()
- .entity("there was not another primary link")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ "OK",
+ "Link set to primary"
+ );
}
}
}
} else if (newType.equals(RnibLink.Type.NON_SERVING)) {
switch (link.getType()) {
case NON_SERVING:
- return Response.ok()
- .entity("It's already a non serving link!" + link)
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.BAD_REQUEST,
+ "Bad Request",
+ "Link is already a primary link"
+ );
case SERVING_PRIMARY:
- return Response.serverError()
- .entity("Cannot change a Primary link.")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.BAD_REQUEST,
+ "Bad Request",
+ "Cannot modify a primary link"
+ );
case SERVING_SECONDARY_CA:
case SERVING_SECONDARY_DC:
if (get(XranController.class).sendScellDelete(link)) {
- return Response.ok()
- .entity("Successfully changed link type to " + link.getType())
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ "OK",
+ "Link set to non-serving"
+ );
} else {
- return Response.serverError()
- .entity("Could not change link type.")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_FOUND,
+ "Not Found",
+ "Could not find cell config report to construct Scell Delete"
+ );
}
}
} else if (newType.equals(RnibLink.Type.SERVING_SECONDARY_CA)) {
switch (link.getType()) {
case SERVING_PRIMARY:
- return Response.serverError()
- .entity("Cannot change a Primary link.")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.BAD_REQUEST,
+ "Bad Request",
+ "Cannot modify a primary link"
+ );
case SERVING_SECONDARY_DC:
case NON_SERVING:
queue[0] = get(XranController.class).sendScellAdd(link);
String poll = queue[0].poll(5, TimeUnit.SECONDS);
if (poll != null) {
- return Response.ok()
- .entity("Successfully changed link type to " + link.getType())
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ "ScellAdd Response",
+ poll
+ );
} else {
- return Response.serverError()
- .entity("did not receive response in time")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.REQUEST_TIMEOUT,
+ "ScellAdd Timeout",
+ "eNodeB did not send a ScellAddStatus on time"
+ );
}
case SERVING_SECONDARY_CA:
- return Response.ok()
- .entity("It's already a service secondary ca link!")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.BAD_REQUEST,
+ "Bad Request",
+ "Link is already a secondary CA link"
+ );
}
}
- return Response.serverError()
- .entity("Unknown type")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_IMPLEMENTED,
+ "Not Implemented",
+ "This request is not implemented"
+ );
}
private Response handleTrafficChange(RnibLink link, JsonNode trafficpercent) {
@@ -301,7 +400,12 @@
link.getTrafficPercent().setTrafficPercentUl(new BerInteger(jsonNode.asInt()));
}
- return Response.ok("trafficpercent changed successfully").build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ "OK",
+ "Traffic Percent changed"
+ );
}
private Response handleRRMChange(RnibLink link, JsonNode rrmConf) throws InterruptedException {
@@ -312,13 +416,19 @@
String poll = queue[0].poll(5, TimeUnit.SECONDS);
if (poll != null) {
- return Response.ok()
- .entity(poll)
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ "RRMConfig Response",
+ poll
+ );
} else {
- return Response.serverError()
- .entity("did not receive response in time")
- .build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.REQUEST_TIMEOUT,
+ "RRMConfig Timeout",
+ "eNodeB did not send a RRMConfingStatus on time"
+ );
}
}
}
diff --git a/src/main/java/org.onosproject.xran/rest/NodeWebResource.java b/src/main/java/org.onosproject.xran/rest/NodeWebResource.java
index 7b54177..2b9124c 100644
--- a/src/main/java/org.onosproject.xran/rest/NodeWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/NodeWebResource.java
@@ -15,8 +15,9 @@
*/
package org.onosproject.xran.rest;
+import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.onosproject.rest.AbstractWebResource;
@@ -34,7 +35,6 @@
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import java.io.IOException;
import java.util.List;
/**
@@ -46,6 +46,10 @@
private static final Logger log =
LoggerFactory.getLogger(NodeWebResource.class);
+ public NodeWebResource() {
+
+ }
+
/**
* test.
*
@@ -55,40 +59,52 @@
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getNodes(@DefaultValue("") @QueryParam("type") String type) {
- ObjectNode rootNode = mapper().createObjectNode();
-
+ JsonNode jsonNode;
try {
+ List<Object> nodes;
if (StringUtils.isBlank(type)) {
- List<Object> nodes = get(XranStore.class).getNodes();
-
- JsonNode jsonNode = mapper().readTree(nodes.get(0).toString());
- JsonNode jsonNode2 = mapper().readTree(nodes.get(1).toString());
-
- ObjectNode arrayNode = rootNode.putObject("nodes");
- arrayNode.put("cells", jsonNode);
- arrayNode.put("ues", jsonNode2);
+ nodes = get(XranStore.class).getNodes();
} else if (type.equals("cell")) {
- List<RnibCell> cellNodes = get(XranStore.class).getCellNodes();
- JsonNode jsonNode = mapper().readTree(cellNodes.toString());
-
- ObjectNode arrayNode = rootNode.putObject("nodes");
- arrayNode.put("cells", jsonNode);
+ nodes = get(XranStore.class).getCellNodes();
} else if (type.equals("ue")) {
- List<RnibUe> ueNodes = get(XranStore.class).getUeNodes();
- JsonNode jsonNode = mapper().readTree(ueNodes.toString());
-
- ObjectNode arrayNode = rootNode.putObject("nodes");
- arrayNode.put("ues", jsonNode);
+ nodes = get(XranStore.class).getUeNodes();
+ } else {
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_FOUND,
+ "Not Found",
+ "Type of node was not found"
+ );
}
- } catch (IOException e) {
- log.error(ExceptionUtils.getFullStackTrace(e));
+
+ if (nodes.size() == 0) {
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_FOUND,
+ "Not Found",
+ "No nodes found"
+ );
+ }
+
+ jsonNode = mapper().valueToTree(nodes);
+ } catch (Exception e) {
+ String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+ log.error(fullStackTrace);
e.printStackTrace();
- return Response.serverError()
- .entity(ExceptionUtils.getFullStackTrace(e))
- .build();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+ "Exception",
+ fullStackTrace
+ );
}
- return ok(rootNode.toString()).build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ jsonNode
+ );
}
/**
@@ -105,20 +121,33 @@
if (node != null) {
try {
- ObjectNode rootNode = mapper().createObjectNode();
- JsonNode jsonNode = mapper().readTree(node.toString());
- rootNode.put("node", jsonNode);
- return ok(rootNode.toString()).build();
- } catch (IOException e) {
- log.error(ExceptionUtils.getFullStackTrace(e));
+ JsonNode jsonNode = mapper().valueToTree(node);
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ jsonNode
+ );
+ } catch (Exception e) {
+ String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+ log.error(fullStackTrace);
e.printStackTrace();
- return Response.serverError()
- .entity(ExceptionUtils.getFullStackTrace(e))
- .build();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+ "Exception",
+ fullStackTrace
+ );
}
}
- return Response.serverError().entity("node not found").build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_FOUND,
+ "Not Found",
+ "Node " + nodeid + " was not found"
+ );
}
}
diff --git a/src/main/java/org.onosproject.xran/rest/ResponseHelper.java b/src/main/java/org.onosproject.xran/rest/ResponseHelper.java
new file mode 100644
index 0000000..826adc1
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/rest/ResponseHelper.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2015-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.xran.rest;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import javax.ws.rs.core.Response;
+
+public class ResponseHelper {
+
+ public static Response getResponse(ObjectMapper mapper, statusCode status, String title, String detail) {
+ ObjectNode rootNode = mapper.createObjectNode();
+
+ switch (status) {
+ case OK:
+ case BAD_REQUEST:
+ case NOT_IMPLEMENTED:
+ case REQUEST_TIMEOUT:
+ case INTERNAL_SERVER_ERROR:
+ case NOT_FOUND: {
+ ArrayNode errors = rootNode.putArray("errors");
+ ObjectNode addObject = errors.addObject();
+ addObject.put("status", status.status);
+ addObject.put("title", title);
+ addObject.put("detail", detail);
+ return Response.status(status.status)
+ .entity(rootNode.toString())
+ .build();
+ }
+ default:
+ return Response.noContent().build();
+ }
+ }
+
+ public static Response getResponse(ObjectMapper mapper, statusCode status, JsonNode node) {
+ ObjectNode rootNode = mapper.createObjectNode();
+
+ switch (status) {
+ case OK:
+ case BAD_REQUEST:
+ case NOT_IMPLEMENTED:
+ case REQUEST_TIMEOUT:
+ case INTERNAL_SERVER_ERROR:
+ case NOT_FOUND: {
+ ArrayNode data = rootNode.putArray("data");
+ data.add(node);
+ return Response.status(status.status)
+ .entity(rootNode.toString())
+ .build();
+ }
+ default:
+ return Response.noContent().build();
+ }
+ }
+
+ public enum statusCode {
+ OK(200),
+ BAD_REQUEST(400),
+ NOT_FOUND(404),
+ REQUEST_TIMEOUT(408),
+ INTERNAL_SERVER_ERROR(500),
+ NOT_IMPLEMENTED(501);
+
+ public int status;
+
+ statusCode(int status) {
+ this.status = status;
+ }
+ }
+}
diff --git a/src/main/java/org.onosproject.xran/rest/SliceWebResource.java b/src/main/java/org.onosproject.xran/rest/SliceWebResource.java
index e895d55..58b4bef 100644
--- a/src/main/java/org.onosproject.xran/rest/SliceWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/SliceWebResource.java
@@ -15,8 +15,8 @@
*/
package org.onosproject.xran.rest;
+import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.onosproject.rest.AbstractWebResource;
import org.onosproject.xran.XranStore;
@@ -44,6 +44,10 @@
private static final Logger log =
LoggerFactory.getLogger(SliceWebResource.class);
+ public SliceWebResource() {
+
+ }
+
/**
* test.
*
@@ -58,20 +62,33 @@
if (slice != null) {
try {
- ObjectNode rootNode = mapper().createObjectNode();
- JsonNode jsonNode = mapper().readTree(slice.toString());
- rootNode.put("slice", jsonNode);
- return ok(rootNode.toString()).build();
- } catch (IOException e) {
- log.error(ExceptionUtils.getFullStackTrace(e));
+ JsonNode jsonNode = mapper().valueToTree(slice);
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.OK,
+ jsonNode
+ );
+ } catch (Exception e) {
+ String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+ log.error(fullStackTrace);
e.printStackTrace();
- return Response.serverError()
- .entity(ExceptionUtils.getFullStackTrace(e))
- .build();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+ "Exception",
+ fullStackTrace
+ );
}
}
- return Response.serverError().entity("slice not found").build();
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_FOUND,
+ "Not Found",
+ "Slice " + sliceid + " not found"
+ );
}
/**
@@ -82,19 +99,30 @@
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
public Response postSlice(InputStream stream) {
try {
- boolean b;
- ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+// ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+// get(XranStore.class).createSlice(jsonTree);
- b = get(XranStore.class).createSlice(jsonTree);
- return ok(b).build();
+ // FIXME: change when implemented
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.NOT_IMPLEMENTED,
+ "Not Implemented",
+ "POST Slice not implemented"
+ );
} catch (Exception e) {
- log.error(ExceptionUtils.getFullStackTrace(e));
+ String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
+ log.error(fullStackTrace);
e.printStackTrace();
- return Response.serverError()
- .entity(ExceptionUtils.getFullStackTrace(e))
- .build();
+
+ return ResponseHelper.getResponse(
+ mapper(),
+ ResponseHelper.statusCode.INTERNAL_SERVER_ERROR,
+ "Exception",
+ fullStackTrace
+ );
}
}