package de.pbauerochse.worklogviewer.excel.columns; import de.pbauerochse.worklogviewer.excel.ExcelColumnRenderer; import de.pbauerochse.worklogviewer.fx.tabs.domain.DisplayRow; import de.pbauerochse.worklogviewer.util.FormattingUtil; import javafx.scene.control.TreeItem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** * @author Patrick Bauerochse * @since 07.07.15 */ public class TaskStatusExcelColumn extends ExcelColumnRenderer { @Override public void renderCells(int columnIndex, Sheet sheet, List<TreeItem<DisplayRow>> displayResult, boolean isGrouped) { AtomicInteger currentRowIndex = new AtomicInteger(0); if (!isGrouped) { renderHeadline(currentRowIndex, sheet, columnIndex); } for (TreeItem<DisplayRow> taskWithWorklogsTreeItem : displayResult) { renderTreeItem(taskWithWorklogsTreeItem, sheet, currentRowIndex, columnIndex); } } private void renderTreeItem(TreeItem<DisplayRow> item, Sheet sheet, AtomicInteger rowIndex, int columnIndex) { DisplayRow displayRow = item.getValue(); Row row = getOrCreateRow(rowIndex.getAndIncrement(), sheet); Cell cell = row.createCell(columnIndex); if (displayRow.isGroupContainer()) { cell.setCellStyle(getGroupHeadlineCellStyle(sheet)); cell.setCellValue(displayRow.getLabel()); adjustRowHeight(cell); rowIndex.getAndIncrement(); // spacing // headline and a bit of spacing renderHeadline(rowIndex, sheet, columnIndex); item.getChildren().forEach(Child -> renderTreeItem(Child, sheet, rowIndex, columnIndex)); // add summary at the end rowIndex.getAndAdd(5); } else if (!displayRow.isGrandTotalSummary() && displayRow.getResolvedDate().isPresent()) { cell.setCellValue(FormattingUtil.formatDateTime(displayRow.getResolvedDate().get())); } } private void renderHeadline(AtomicInteger rowIndex, Sheet sheet, int columnIndex) { Row row = getOrCreateRow(rowIndex.getAndAdd(2), sheet); Cell cell = row.createCell(columnIndex); cell.setCellStyle(getHeadlineCellStyle(sheet)); adjustRowHeight(cell); cell.setCellValue(FormattingUtil.getFormatted("view.main.resolved")); } }