@POST
  @Produces(MediaType.APPLICATION_JSON)
  public Response addNode(Node node) {
    Response response = null;
    try {
      org.nikhil.webapp.nodeadmin.entity.Node newNode = getJPANodeFromJSONNode(node);
      nodeOperation.addNode(newNode);
      response =
          NodeAdminUtils.buildStandardRESTHTTPResponse(
              201, "Node " + node.getName() + " Added Successfully", null, null);

    } catch (Exception e) {
      e.printStackTrace();
      response =
          NodeAdminUtils.buildStandardRESTHTTPResponse(500, "Server Error Adding Node", null, null);
    }
    return response;
  }
 @GET
 @Produces(MediaType.APPLICATION_JSON)
 @Path("{nodeName}/stop")
 public Response stop(@PathParam("nodeName") String nodeName) {
   Response response = null;
   try {
     nodeOperation.reStartNode(nodeName);
     response =
         NodeAdminUtils.buildStandardRESTHTTPResponse(
             200, "Node " + nodeName + " Stopped Successfully", null, null);
   } catch (Exception e) {
     e.printStackTrace();
     response =
         NodeAdminUtils.buildStandardRESTHTTPResponse(
             500, "Server Error Stopping the Node " + nodeName, null, null);
   }
   return response;
 }
 @GET
 @Produces(MediaType.APPLICATION_JSON)
 @Path("{nodeName}/status")
 public Response getStatus(@PathParam("nodeName") String nodeName) {
   Response response = null;
   try {
     org.nikhil.webapp.nodeadmin.entity.Node fetchedNode = nodeOperation.getNode(nodeName);
     String status = nodeOperation.getNodeStatus(nodeName, true);
     Object jsonObj = NodeAdminUtils.createObjectFromRawData("status", status, null);
     response =
         NodeAdminUtils.buildStandardRESTHTTPResponse(
             200, "Node " + nodeName + " Status Retrieved Successfully", status, null);
   } catch (Exception e) {
     e.printStackTrace();
     response =
         NodeAdminUtils.buildStandardRESTHTTPResponse(
             500, "Server Error getting the status of the Node " + nodeName, null, null);
   }
   return response;
 }
  @DELETE
  @Produces(MediaType.APPLICATION_JSON)
  @Path("/{nodeName}")
  public Response deleteNode(@PathParam("nodeName") String nodeName) {
    Response response = null;
    try {
      nodeOperation.deleteNode(nodeName);
      response =
          NodeAdminUtils.buildStandardRESTHTTPResponse(
              200, "Node " + nodeName + " Deleted Successfully", null, null);

    } catch (Exception e) {
      e.printStackTrace();
      response =
          NodeAdminUtils.buildStandardRESTHTTPResponse(
              500, "Server Error Deleting Node", null, null);
    }

    return response;
  }
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public Response getNodes() {
    Response response = null;

    try {
      List<Node> flattenedNodeList = new ArrayList<>();
      List<org.nikhil.webapp.nodeadmin.entity.Node> list = nodeOperation.listNodes();
      for (org.nikhil.webapp.nodeadmin.entity.Node node : list) {
        flattenedNodeList.add(getNodeJSONFromNodeEntity(node));
      }
      response =
          NodeAdminUtils.buildStandardRESTHTTPResponseForCollection(
              200, "Node List Retrieved Successfully", flattenedNodeList, null);
    } catch (Exception e) {
      e.printStackTrace();
      response =
          NodeAdminUtils.buildStandardRESTHTTPResponse(
              500, "Server Error Retrieving Node List", null, null);
    }
    return response;
  }
 @GET
 @Produces(MediaType.APPLICATION_JSON)
 @Path("/{nodeName}")
 public Response getANode(@PathParam("nodeName") String nodeName) {
   Response response = null;
   try {
     org.nikhil.webapp.nodeadmin.entity.Node fetchedNode = nodeOperation.getNode(nodeName);
     if (fetchedNode == null) {
       response = NodeAdminUtils.buildStandardRESTHTTPResponse(404, "No Such Node", null, null);
     } else {
       Node flattenedNode = getNodeJSONFromNodeEntity(fetchedNode);
       response =
           NodeAdminUtils.buildStandardRESTHTTPResponse(
               200, "Node Retrieved Successfully", flattenedNode, null);
     }
   } catch (Exception e) {
     e.printStackTrace();
     response =
         NodeAdminUtils.buildStandardRESTHTTPResponse(
             500, "Server Error Retrieving Node " + nodeName, null, null);
   }
   return response;
 }