@Override
 public void handleRequest(
     final RestRequest request, final RestChannel channel, final NodeClient client)
     throws Exception {
   boolean helpWanted = request.paramAsBoolean("help", false);
   if (helpWanted) {
     Table table = getTableWithHeader(request);
     int[] width = buildHelpWidths(table, request);
     BytesStreamOutput bytesOutput = channel.bytesOutput();
     UTF8StreamWriter out = new UTF8StreamWriter().setOutput(bytesOutput);
     for (Table.Cell cell : table.getHeaders()) {
       // need to do left-align always, so create new cells
       pad(new Table.Cell(cell.value), width[0], request, out);
       out.append(" | ");
       pad(
           new Table.Cell(cell.attr.containsKey("alias") ? cell.attr.get("alias") : ""),
           width[1],
           request,
           out);
       out.append(" | ");
       pad(
           new Table.Cell(cell.attr.containsKey("desc") ? cell.attr.get("desc") : "not available"),
           width[2],
           request,
           out);
       out.append("\n");
     }
     out.close();
     channel.sendResponse(
         new BytesRestResponse(
             RestStatus.OK, BytesRestResponse.TEXT_CONTENT_TYPE, bytesOutput.bytes()));
   } else {
     doRequest(request, channel, client);
   }
 }
  public static RestResponse buildTextPlainResponse(Table table, RestChannel channel)
      throws IOException {
    RestRequest request = channel.request();
    boolean verbose = request.paramAsBoolean("v", false);

    List<DisplayHeader> headers = buildDisplayHeaders(table, request);
    int[] width = buildWidths(table, request, verbose, headers);

    BytesStreamOutput bytesOut = channel.bytesOutput();
    UTF8StreamWriter out = new UTF8StreamWriter().setOutput(bytesOut);
    int lastHeader = headers.size() - 1;
    if (verbose) {
      for (int col = 0; col < headers.size(); col++) {
        DisplayHeader header = headers.get(col);
        boolean isLastColumn = col == lastHeader;
        pad(
            new Table.Cell(header.display, table.findHeaderByName(header.name)),
            width[col],
            request,
            out,
            isLastColumn);
        if (!isLastColumn) {
          out.append(" ");
        }
      }
      out.append("\n");
    }
    for (int row = 0; row < table.getRows().size(); row++) {
      for (int col = 0; col < headers.size(); col++) {
        DisplayHeader header = headers.get(col);
        boolean isLastColumn = col == lastHeader;
        pad(table.getAsMap().get(header.name).get(row), width[col], request, out, isLastColumn);
        if (!isLastColumn) {
          out.append(" ");
        }
      }
      out.append("\n");
    }
    out.close();
    return new BytesRestResponse(
        RestStatus.OK, BytesRestResponse.TEXT_CONTENT_TYPE, bytesOut.bytes());
  }