changed API ID order, added xICIC support, added config fields for adm and bearer requests
diff --git a/src/main/java/org.onosproject.xran/rest/CellWebResource.java b/src/main/java/org.onosproject.xran/rest/CellWebResource.java
index 336f67a..c62cd0e 100644
--- a/src/main/java/org.onosproject.xran/rest/CellWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/CellWebResource.java
@@ -21,8 +21,6 @@
 import org.onosproject.rest.AbstractWebResource;
 import org.onosproject.xran.XranStore;
 import org.onosproject.xran.annotations.Patch;
-import org.onosproject.xran.codecs.api.ECGI;
-import org.onosproject.xran.codecs.api.EUTRANCellIdentifier;
 import org.onosproject.xran.controller.XranController;
 import org.onosproject.xran.entities.RnibCell;
 import org.slf4j.Logger;
@@ -37,8 +35,8 @@
 import javax.ws.rs.core.Response;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Optional;
 import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Cell web resource.
@@ -59,25 +57,24 @@
     @Path("{cellid}")
     @Produces(MediaType.APPLICATION_JSON)
     public Response getCell(@PathParam("cellid") String eciHex) {
-        log.debug("GET CELLID {}", eciHex);
-
         RnibCell cell = get(XranStore.class).getCell(eciHex);
 
-        ObjectNode rootNode = mapper().createObjectNode();
-
         if (cell != null) {
             try {
+                ObjectNode rootNode = mapper().createObjectNode();
+
                 JsonNode jsonNode = mapper().readTree(cell.toString());
                 rootNode.put("cell", jsonNode);
             } catch (IOException e) {
                 log.error(ExceptionUtils.getFullStackTrace(e));
                 e.printStackTrace();
+                return Response.serverError()
+                        .entity(ExceptionUtils.getFullStackTrace(e))
+                        .build();
             }
-        } else {
-            rootNode.put("error", "not found");
         }
 
-        return ok(rootNode.toString()).build();
+        return Response.serverError().entity("cell not found").build();
     }
 
     /**
@@ -91,31 +88,41 @@
     @Path("{cellid}")
     @Consumes(MediaType.APPLICATION_JSON)
     public Response patchCell(@PathParam("cellid") String eciHex, InputStream stream) {
-        log.debug("PATCH CELLID {}", eciHex);
-
-        boolean b;
-
         RnibCell cell = get(XranStore.class).getCell(eciHex);
-        // Check if a cell with that ECI exists. If it does, then modify its contents.
 
-        try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+        if (cell != null) {
+            try {
+                ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
 
-            JsonNode rrmConf = jsonTree.get("RRMConf");
-            if (rrmConf != null) {
-                final SynchronousQueue<String>[] queue = new SynchronousQueue[1];
-                b = get(XranStore.class).modifyCellRrmConf(cell, rrmConf);
-                if (b) {
-                    queue[0] = get(XranController.class).sendModifiedRRMConf(cell);
-                    return Response.ok().entity(queue[0].take()).build();
+                JsonNode rrmConf = jsonTree.get("RRMConf");
+                if (rrmConf != null) {
+                    final SynchronousQueue<String>[] queue = new SynchronousQueue[1];
+                    get(XranStore.class).modifyCellRrmConf(cell, rrmConf);
+
+                    queue[0] = get(XranController.class).sendModifiedRRMConf(cell.getRrmConfig(),
+                            cell.getVersion().equals("3"));
+                    String poll = queue[0].poll(5, TimeUnit.SECONDS);
+
+                    if (poll != null) {
+                        return Response.ok()
+                                .entity(poll)
+                                .build();
+                    } else {
+                        return Response.serverError()
+                                .entity("did not receive response in time")
+                                .build();
+                    }
                 }
+            } catch (Exception e) {
+                log.error(ExceptionUtils.getFullStackTrace(e));
+                e.printStackTrace();
+                return Response.serverError()
+                        .entity(ExceptionUtils.getFullStackTrace(e))
+                        .build();
             }
-        } catch (Exception e) {
-            log.error(ExceptionUtils.getFullStackTrace(e));
-            e.printStackTrace();
-            return Response.serverError().entity(ExceptionUtils.getFullStackTrace(e)).build();
         }
-        return Response.noContent().build();
+
+        return Response.serverError().entity("cell not found").build();
     }
 
 }
diff --git a/src/main/java/org.onosproject.xran/rest/LinkWebResource.java b/src/main/java/org.onosproject.xran/rest/LinkWebResource.java
index 370755f..3640a1d 100644
--- a/src/main/java/org.onosproject.xran/rest/LinkWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/LinkWebResource.java
@@ -43,6 +43,7 @@
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Link web resource.
@@ -63,9 +64,7 @@
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public Response getLinksBetween(@DefaultValue("") @QueryParam("cell") String eciHex,
-                             @DefaultValue("-1") @QueryParam("ue") long ue) {
-        log.debug("GET LINKS CELL {} AND UE {}", eciHex, ue);
-
+                                    @DefaultValue("-1") @QueryParam("ue") long ue) {
         List<RnibLink> list = Lists.newArrayList();
         if (!eciHex.isEmpty() && ue != -1) {
             RnibLink link = get(XranStore.class).getLinkBetweenCellIdUeId(eciHex, ue);
@@ -80,17 +79,18 @@
             list.addAll(get(XranStore.class).getLinks());
         }
 
-        ObjectNode rootNode = mapper().createObjectNode();
-
         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();
         }
-
-        return ok(rootNode.toString()).build();
     }
 
     /**
@@ -105,12 +105,9 @@
     @Path("{src},{dst}")
     @Consumes(MediaType.APPLICATION_JSON)
     public Response patchLinks(@PathParam("src") String src, @PathParam("dst") long dst, InputStream stream) {
-        log.debug("Patch LINKS FROM {} to {}", src, dst);
-
-        try {
-            RnibLink link = get(XranStore.class).getLinkBetweenCellIdUeId(src, dst);
-            if (link != null) {
-
+        RnibLink link = get(XranStore.class).getLinkBetweenCellIdUeId(src, dst);
+        if (link != null) {
+            try {
                 ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
 
                 JsonNode type = jsonTree.get("type");
@@ -124,7 +121,17 @@
                                 .findFirst();
                         if (primary.isPresent()) {
                             queue[0] = get(XranController.class).sendHORequest(link, primary.get());
-                            return Response.ok().entity(queue[0].take()).build();
+                            String poll = queue[0].poll(5, TimeUnit.SECONDS);
+
+                            if (poll != null) {
+                                return Response.ok()
+                                        .entity(poll)
+                                        .build();
+                            } else {
+                                return Response.serverError()
+                                        .entity("did not receive response in time")
+                                        .build();
+                            }
                         }
                     }
                 }
@@ -139,16 +146,35 @@
                     if (jsonNode != null) {
                         link.getTrafficPercent().setTrafficPercentUl(new BerInteger(jsonNode.asInt()));
                     }
-                    return Response.ok().build();
+                    return Response.ok("trafficpercent changed successfully").build();
                 }
-            }
-        } catch (Exception e) {
-            log.error(ExceptionUtils.getFullStackTrace(e));
-            e.printStackTrace();
-            return Response.serverError().entity(ExceptionUtils.getFullStackTrace(e)).build();
-        }
 
-        return Response.noContent().build();
+                JsonNode rrmConf = jsonTree.get("RRMConf");
+                if (rrmConf != null) {
+                    final SynchronousQueue<String>[] queue = new SynchronousQueue[1];
+                    get(XranStore.class).modifyLinkRrmConf(link, rrmConf);
+                    queue[0] = get(XranController.class).sendModifiedRRMConf(link.getRrmParameters(),
+                            link.getLinkId().getCell().getVersion().equals("3"));
+                    String poll = queue[0].poll(5, TimeUnit.SECONDS);
+
+                    if (poll != null) {
+                        return Response.ok()
+                                .entity(poll)
+                                .build();
+                    } else {
+                        return Response.serverError()
+                                .entity("did not receive response in time")
+                                .build();
+                    }
+                }
+
+            } catch (Exception e) {
+                log.error(ExceptionUtils.getFullStackTrace(e));
+                e.printStackTrace();
+                return Response.serverError().entity(ExceptionUtils.getFullStackTrace(e)).build();
+            }
+        }
+        return Response.serverError().entity("link not found").build();
     }
 
     /**
@@ -163,23 +189,25 @@
     @Path("{src},{dst}")
     @Consumes(MediaType.APPLICATION_JSON)
     public Response postLinks(@PathParam("src") String src, @PathParam("dst") long dst, InputStream stream) {
-        log.debug("POST LINKS FROM {} to {}", src, dst);
-
-        boolean b = false;
         try {
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
 
             JsonNode type = jsonTree.get("type");
 
             if (type != null) {
+                boolean b;
                 b = get(XranStore.class).createLinkBetweenCellIdUeId(src, dst, type.asText());
+                return ok(b).build();
             }
         } catch (Exception e) {
             log.error(ExceptionUtils.getFullStackTrace(e));
             e.printStackTrace();
+            return Response.serverError()
+                    .entity(ExceptionUtils.getFullStackTrace(e))
+                    .build();
         }
 
-        return ok(b).build();
+        return Response.serverError().entity("unreachable code").build();
     }
 
 }
diff --git a/src/main/java/org.onosproject.xran/rest/NodeWebResource.java b/src/main/java/org.onosproject.xran/rest/NodeWebResource.java
index 1a70ccc..7b54177 100644
--- a/src/main/java/org.onosproject.xran/rest/NodeWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/NodeWebResource.java
@@ -55,8 +55,6 @@
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public Response getNodes(@DefaultValue("") @QueryParam("type") String type) {
-        log.debug("GET NODES " + type);
-
         ObjectNode rootNode = mapper().createObjectNode();
 
         try {
@@ -85,6 +83,9 @@
         } catch (IOException e) {
             log.error(ExceptionUtils.getFullStackTrace(e));
             e.printStackTrace();
+            return Response.serverError()
+                    .entity(ExceptionUtils.getFullStackTrace(e))
+                    .build();
         }
 
         return ok(rootNode.toString()).build();
@@ -100,25 +101,24 @@
     @Path("{nodeid}")
     @Produces(MediaType.APPLICATION_JSON)
     public Response getNodeid(@PathParam("nodeid") String nodeid) {
-        log.debug("GET NODEID {}", nodeid);
-
         Object node = get(XranStore.class).getByNodeId(nodeid);
 
-        ObjectNode rootNode = mapper().createObjectNode();
-
         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));
                 e.printStackTrace();
+                return Response.serverError()
+                        .entity(ExceptionUtils.getFullStackTrace(e))
+                        .build();
             }
-        } else {
-            rootNode.put("error", "not found");
         }
 
-        return ok(rootNode.toString()).build();
+        return Response.serverError().entity("node not found").build();
     }
 
 }
diff --git a/src/main/java/org.onosproject.xran/rest/SliceWebResource.java b/src/main/java/org.onosproject.xran/rest/SliceWebResource.java
index 2fe8385..e895d55 100644
--- a/src/main/java/org.onosproject.xran/rest/SliceWebResource.java
+++ b/src/main/java/org.onosproject.xran/rest/SliceWebResource.java
@@ -54,25 +54,24 @@
     @Path("{sliceid}")
     @Produces(MediaType.APPLICATION_JSON)
     public Response getSlice(@PathParam("sliceid") long sliceid) {
-        log.debug("GET SLICE {}", sliceid);
-
         RnibSlice slice = get(XranStore.class).getSlice(sliceid);
 
-        ObjectNode rootNode = mapper().createObjectNode();
-
         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));
                 e.printStackTrace();
+                return Response.serverError()
+                        .entity(ExceptionUtils.getFullStackTrace(e))
+                        .build();
             }
-        } else {
-            rootNode.put("error", "not found");
         }
 
-        return ok(rootNode.toString()).build();
+        return Response.serverError().entity("slice not found").build();
     }
 
     /**
@@ -84,19 +83,19 @@
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
     public Response postSlice(InputStream stream) {
-        log.debug("POST SLICE");
-
-        boolean b = false;
         try {
+            boolean b;
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
 
             b = get(XranStore.class).createSlice(jsonTree);
+            return ok(b).build();
         } catch (Exception e) {
             log.error(ExceptionUtils.getFullStackTrace(e));
             e.printStackTrace();
+            return Response.serverError()
+                    .entity(ExceptionUtils.getFullStackTrace(e))
+                    .build();
         }
-
-        return ok(b).build();
     }
 
 }