/** * Формирует отчет на основании его модели и указанных пользователем в контексте параметров. * * @param report модель формируемого отчета. * @param ctx данные необходимые для формирования данного отчета. * @return сформированный отчет. * @throws ReportProcessingException в случае каких-либо проблем. */ public HSSFWorkbook process(Report report, final ELContext ctx) throws ReportProcessingException { ExecutionContext ectx = null; try { report = new Report( null, report); // копируем модель отчета, т.к. в процессе формирования отчета она может // измениться. final HSSFWorkbook wb = makeWorkbook(report, ctx); final Map<Short, HSSFCellStyle> styles = applyStyles(report, wb); ectx = new ExecutionContext(report, ctx, wb, styles); ctx.getVariables().put(VAR_CONTEXT, ectx); final String user = report.getUser() != null ? (String) report.getUser().getValue(ctx) : null; final String password = report.getPassword() != null ? (String) report.getPassword().getValue(ctx) : null; if (user != null && password != null) { wb.writeProtectWorkbook(password, user); } for (final ReportEventListener listener : ectx.listeners) { listener.beforeReport(ectx); } for (final Sheet sheet : report.getSheets()) { processSheet(ectx, sheet); } boolean activeSheetSpecified = false; for (int i = 0, cnt = wb.getNumberOfSheets(); i < cnt; i++) { if (!wb.isSheetHidden(i) && !wb.isSheetVeryHidden(i)) { wb.setActiveSheet(i); wb.setSelectedTab(i); activeSheetSpecified = true; break; } } if (!activeSheetSpecified) { final HSSFSheet sheet = wb.createSheet(); final int index = wb.getSheetIndex(sheet); wb.setActiveSheet(index); wb.setSelectedTab(index); } for (final ReportEventListener listener : ectx.listeners) { listener.afterReport(ectx); } return wb; } catch (Exception e) { throw new ReportProcessingException(e.getMessage() + "\n" + ectx, e, ectx); } }
/** {@inheritDoc} */ @Override public void generate( IProgressMonitor monitor, HSSFWorkbook workbook, int sheetNo, boolean useLogicalNameAsSheetName, Map<String, Integer> sheetNameMap, Map<String, ObjectModel> sheetObjectMap, ERDiagram diagram, Map<String, LoopDefinition> loopDefinitionMap) { this.clear(); List<ERTable> nodeSet = null; if (diagram.getCurrentCategory() != null) { nodeSet = diagram.getCurrentCategory().getTableContents(); } else { nodeSet = diagram.getDiagramContents().getContents().getTableSet().getList(); } for (ERTable table : nodeSet) { String name = null; if (useLogicalNameAsSheetName) { name = table.getLogicalName(); } else { name = table.getPhysicalName(); } HSSFSheet newSheet = createNewSheet(workbook, sheetNo, name, sheetNameMap); sheetObjectMap.put(workbook.getSheetName(workbook.getSheetIndex(newSheet)), table); this.setTableData(workbook, newSheet, table); monitor.worked(1); } }