@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); }