@RequestMapping(method = RequestMethod.GET)
  @PreAuthorize(Permission.SECURITY_REPORT_READ)
  public @ResponseBody void getEarlyAlertCaseCountsReport(
      final HttpServletResponse response,
      final @RequestParam(required = false) UUID campusId,
      final @RequestParam(required = false) String rosterStatus,
      final @RequestParam(required = false) List<String> termCodes,
      final @RequestParam(required = false, defaultValue = DEFAULT_REPORT_TYPE) String reportType)
      throws ObjectNotFoundException, IOException {

    Campus campus = SearchParameters.getCampus(campusId, campusService);

    final List<EarlyAlertTermCaseCountsTO> caseLoads = new ArrayList<EarlyAlertTermCaseCountsTO>();
    final List<String> cleanTermCodes = SearchParameters.cleanStringListOfNulls(termCodes);
    final List<Term> terms = SearchParameters.getTerms(cleanTermCodes, termService);
    if (terms.size() > 0) {
      for (Term term : terms) {
        EarlyAlertTermCaseCountsTO caseCounts =
            new EarlyAlertTermCaseCountsTO(
                term.getCode(),
                term.getName(),
                earlyAlertService.getStudentCountForEarlyAlertCreatedDateRange(
                    term.getStartDate(), term.getEndDate(), campus, rosterStatus),
                earlyAlertService.getEarlyAlertCountForCreatedDateRange(
                    term.getStartDate(), term.getEndDate(), campus, rosterStatus),
                earlyAlertResponseService
                    .getRespondedToEarlyAlertCountForEarlyAlertCreatedDateRange(
                        term.getStartDate(), term.getEndDate(), campus, rosterStatus),
                earlyAlertService.getClosedEarlyAlertsCountForEarlyAlertCreatedDateRange(
                    term.getStartDate(), term.getEndDate(), campus, rosterStatus));

        caseLoads.add(caseCounts);
      }

    } else {

      EarlyAlertTermCaseCountsTO caseCounts =
          new EarlyAlertTermCaseCountsTO(
              "All",
              "All",
              earlyAlertService.getStudentCountForEarlyAlertCreatedDateRange(
                  null, null, campus, rosterStatus),
              earlyAlertService.getEarlyAlertCountForCreatedDateRange(
                  null, null, campus, rosterStatus),
              earlyAlertResponseService.getRespondedToEarlyAlertCountForEarlyAlertCreatedDateRange(
                  null, null, campus, rosterStatus),
              earlyAlertService.getClosedEarlyAlertsCountForEarlyAlertCreatedDateRange(
                  null, null, campus, rosterStatus));
      caseLoads.add(caseCounts);
    }

    final Map<String, Object> parameters = Maps.newHashMap();
    SearchParameters.addCampusToParameters(campus, parameters);

    SearchParameters.addTermsToMap(terms, parameters);
    renderReport(
        response,
        parameters,
        caseLoads,
        reportType.equals("csv") ? REPORT_URL_CSV : REPORT_URL,
        reportType,
        REPORT_FILE_TITLE);
  }