package net.rrm.ehour.ui.common.panel.entryselector; import net.rrm.ehour.ui.common.report.excel.ExcelWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.WorkbookUtil; import org.apache.wicket.model.ResourceModel; import java.io.Serializable; import java.util.List; public class EntrySelectorExcelGenerator { public ExcelWorkbook create(EntrySelectorData entrySelectorData, String sheetName) { ExcelWorkbook workbook = new ExcelWorkbook(); Sheet sheet = workbook.createSheet(WorkbookUtil.createSafeSheetName(sheetName)); short rowIndex = createHeader(entrySelectorData, sheet, (short) 0); List<EntrySelectorData.EntrySelectorRow> rows = entrySelectorData.getRows(); for (EntrySelectorData.EntrySelectorRow entrySelectorRow : rows) { Row row = sheet.createRow(rowIndex++); List<? extends Serializable> cells = entrySelectorRow.getCells(); for (int columnIndex = 0; columnIndex < cells.size(); columnIndex++) { Cell cell = row.createCell(columnIndex); EntrySelectorData.Header header = entrySelectorData.getColumnHeaders().get(columnIndex); Serializable rawCellValue = cells.get(columnIndex); if (rawCellValue != null) { String cellValue = rawCellValue.toString().replaceAll("∞", "infinite"); EntrySelectorData.ColumnType columnType = header.getColumnType(); if (columnType == EntrySelectorData.ColumnType.NUMERIC) { cell.setCellValue(Float.parseFloat(cellValue)); } else { cell.setCellValue(cellValue); } } } } return workbook; } private short createHeader(EntrySelectorData entrySelectorData, Sheet sheet, short rowIndex) { Row row = sheet.createRow(rowIndex++); List<EntrySelectorData.Header> columnHeaders = entrySelectorData.getColumnHeaders(); short columnIndex = 0; for (EntrySelectorData.Header columnHeader : columnHeaders) { Cell cell = row.createCell(columnIndex++); String resourceLabel = columnHeader.getResourceLabel(); cell.setCellValue(new ResourceModel(resourceLabel).getObject()); } return rowIndex; } }