/** * Called from org select or account listing. Checks for needed control list build, makes call to * build control list if necessary, and forwards to subfund or object code select page. */ public ActionForward start( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { OrganizationReportSelectionForm organizationReportSelectionForm = (OrganizationReportSelectionForm) form; String principalName = GlobalVariables.getUserSession().getPerson().getPrincipalId(); // retrieve report mode to determine how control list should be built and what select screen // should be rendered BudgetConstructionReportMode reportMode = BudgetConstructionReportMode.getBudgetConstructionReportModeByName( organizationReportSelectionForm.getReportMode()); if (reportMode == null) { LOG.error( "Invalid report mode passed to report select action: " + organizationReportSelectionForm.getReportMode()); throw new RuntimeException( "Invalid report mode passed to report select action: " + organizationReportSelectionForm.getReportMode()); } // retrieve build helper to determine if a control list rebuild is needed ReportControlListBuildHelper buildHelper = (ReportControlListBuildHelper) GlobalVariables.getUserSession() .retrieveObject(BCConstants.Report.CONTROL_BUILD_HELPER_SESSION_NAME); if (buildHelper == null) { // session timeout, need to rebuild build request buildHelper = new ReportControlListBuildHelper(); Collection<BudgetConstructionPullup> selectedOrganizations = SpringContext.getBean(BudgetReportsControlListService.class) .retrieveSelectedOrganziations(principalName); buildHelper.addBuildRequest( organizationReportSelectionForm.getCurrentPointOfViewKeyCode(), selectedOrganizations, reportMode.reportBuildMode); GlobalVariables.getUserSession() .addObject(BCConstants.Report.CONTROL_BUILD_HELPER_SESSION_NAME, buildHelper); } // do list builds buildControlLists( principalName, organizationReportSelectionForm.getUniversityFiscalYear(), buildHelper, reportMode.reportSelectMode); // a few reports go just against the account control table, therefore we are ready to run the // report if (ReportSelectMode.ACCOUNT.equals(reportMode.reportSelectMode)) { // fixed null point exception of operationgModeTitle. organizationReportSelectionForm.setOperatingModeTitle( BCConstants.Report.NONE_SELECTION_TITLE); return performReport(mapping, form, request, response); } // setup action form if (ReportSelectMode.SUBFUND.equals(reportMode.reportSelectMode)) { organizationReportSelectionForm.setSubFundPickList( (List) SpringContext.getBean(BudgetReportsControlListService.class) .retrieveSubFundList(principalName)); organizationReportSelectionForm.setOperatingModeTitle( BCConstants.Report.SUB_FUND_SELECTION_TITLE); } else if (ReportSelectMode.OBJECT_CODE.equals(reportMode.reportSelectMode) || ReportSelectMode.REASON.equals(reportMode.reportSelectMode)) { organizationReportSelectionForm.setObjectCodePickList( (List) SpringContext.getBean(BudgetReportsControlListService.class) .retrieveObjectCodeList(principalName)); organizationReportSelectionForm.setOperatingModeTitle( BCConstants.Report.OBJECT_CODE_SELECTION_TITLE); organizationReportSelectionForm .getBudgetConstructionReportThresholdSettings() .setLockThreshold(reportMode.lockThreshold); } return mapping.findForward(KFSConstants.MAPPING_BASIC); }
/** Generates the Budget Report and returns pdf. */ public ActionForward performReport( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { OrganizationReportSelectionForm organizationReportSelectionForm = (OrganizationReportSelectionForm) form; String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId(); BudgetConstructionReportMode reportMode = BudgetConstructionReportMode.getBudgetConstructionReportModeByName( organizationReportSelectionForm.getReportMode()); if (!storeCodeSelections(organizationReportSelectionForm, reportMode, principalId)) { return mapping.findForward(KFSConstants.MAPPING_BASIC); } // validate threshold settings if needed if (reportMode == BudgetConstructionReportMode.REASON_STATISTICS_REPORT || reportMode == BudgetConstructionReportMode.REASON_SUMMARY_REPORT || reportMode == BudgetConstructionReportMode.SALARY_SUMMARY_REPORT) { if (!this.validThresholdSettings( organizationReportSelectionForm.getBudgetConstructionReportThresholdSettings())) { return mapping.findForward(KFSConstants.MAPPING_BASIC); } } // for report exports foward to export action to display formatting screen if (reportMode.export) { String exportUrl = this.buildReportExportForwardURL(organizationReportSelectionForm, mapping); return new ActionForward(exportUrl, true); } // build report data and populate report objects for rendering Collection reportSet = buildReportData( reportMode, organizationReportSelectionForm.getUniversityFiscalYear(), principalId, organizationReportSelectionForm.isReportConsolidation(), organizationReportSelectionForm.getBudgetConstructionReportThresholdSettings()); // build pdf and stream back ByteArrayOutputStream baos = new ByteArrayOutputStream(); // output the report or a message if empty if (reportSet.isEmpty()) { List<String> messageList = new ArrayList<String>(); messageList.add(BCConstants.Report.MSG_REPORT_NO_DATA); SpringContext.getBean(BudgetConstructionReportsServiceHelper.class) .generatePdf(messageList, baos); WebUtils.saveMimeOutputStreamAsFile( response, ReportGeneration.PDF_MIME_TYPE, baos, reportMode.jasperFileName + ReportGeneration.PDF_FILE_EXTENSION); } else { ResourceBundle resourceBundle = ResourceBundle.getBundle( BCConstants.Report.REPORT_MESSAGES_CLASSPATH, Locale.getDefault()); Map<String, Object> reportData = new HashMap<String, Object>(); reportData.put(JRParameter.REPORT_RESOURCE_BUNDLE, resourceBundle); SpringContext.getBean(ReportGenerationService.class) .generateReportToOutputStream( reportData, reportSet, BCConstants.Report.REPORT_TEMPLATE_CLASSPATH + reportMode.jasperFileName, baos); WebUtils.saveMimeOutputStreamAsFile( response, ReportGeneration.PDF_MIME_TYPE, baos, reportMode.jasperFileName + ReportGeneration.PDF_FILE_EXTENSION); } return null; }