jackson, HTTP codes and JSON responses, xICIC/RRMConfig fix
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"
+ );
}
}
}