@RequestMapping(
      method = RequestMethod.POST,
      value = "/durable-clients/{durable-client-id}/cqs/{durable-cq-name}",
      params = "op=close")
  @ResponseBody
  public String closeDurableContinuousQuery(
      @PathVariable("durable-client-id") final String durableClientId,
      @PathVariable("durable-cq-name") final String durableCqName,
      @RequestParam(value = CliStrings.CLOSE_DURABLE_CQS__MEMBER, required = false)
          final String memberNameId,
      @RequestParam(value = CliStrings.CLOSE_DURABLE_CQS__GROUP, required = false)
          final String[] groups) {
    final CommandStringBuilder command = new CommandStringBuilder(CliStrings.CLOSE_DURABLE_CQS);

    command.addOption(CliStrings.CLOSE_DURABLE_CQS__DURABLE__CLIENT__ID, decode(durableClientId));
    command.addOption(CliStrings.CLOSE_DURABLE_CQS__NAME, decode(durableCqName));

    if (hasValue(memberNameId)) {
      command.addOption(CliStrings.CLOSE_DURABLE_CQS__MEMBER, memberNameId);
    }

    if (hasValue(groups)) {
      command.addOption(
          CliStrings.CLOSE_DURABLE_CQS__GROUP,
          StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
    }

    return processCommand(command.toString());
  }
  protected String internalCountDurableClientContinuousQueryEvents(
      final String durableClientId,
      final String cqName,
      final String memberNameId,
      final String[] groups) {
    final CommandStringBuilder command =
        new CommandStringBuilder(CliStrings.COUNT_DURABLE_CQ_EVENTS);

    command.addOption(CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CLIENT__ID, durableClientId);

    if (hasValue(cqName)) {
      command.addOption(CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CQ__NAME, cqName);
    }

    if (hasValue(memberNameId)) {
      command.addOption(CliStrings.COUNT_DURABLE_CQ_EVENTS__MEMBER, memberNameId);
    }

    if (hasValue(groups)) {
      command.addOption(
          CliStrings.COUNT_DURABLE_CQ_EVENTS__GROUP,
          StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
    }

    return processCommand(command.toString());
  }
  @RequestMapping(method = RequestMethod.GET, value = "/durable-clients/{durable-client-id}/cqs")
  @ResponseBody
  public String listDurableClientContinuousQueries(
      @PathVariable("durable-client-id") final String durableClientId,
      @RequestParam(value = CliStrings.LIST_DURABLE_CQS__MEMBER, required = false)
          final String memberNameId,
      @RequestParam(value = CliStrings.LIST_DURABLE_CQS__GROUP, required = false)
          final String[] groups) {
    final CommandStringBuilder command = new CommandStringBuilder(CliStrings.LIST_DURABLE_CQS);

    command.addOption(CliStrings.LIST_DURABLE_CQS__DURABLECLIENTID, decode(durableClientId));

    if (hasValue(memberNameId)) {
      command.addOption(CliStrings.LIST_DURABLE_CQS__MEMBER, memberNameId);
    }

    if (hasValue(groups)) {
      command.addOption(
          CliStrings.LIST_DURABLE_CQS__GROUP,
          StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
    }

    return processCommand(command.toString());
  }