/* * Copyright 2002-2005 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package info.jtrac.util; import info.jtrac.domain.AbstractItem; import info.jtrac.domain.ColumnHeading; import info.jtrac.domain.ColumnHeading.Name; import info.jtrac.domain.Field; import info.jtrac.domain.History; import info.jtrac.domain.ItemSearch; import java.util.Date; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * Excel Sheet generation helper utility */ public class ExcelUtils { private HSSFSheet sheet; private List<AbstractItem> items; private ItemSearch itemSearch; private HSSFCellStyle csBold; private HSSFCellStyle csDate; private HSSFWorkbook wb; public ExcelUtils(List items, ItemSearch itemSearch) { this.wb = new HSSFWorkbook(); this.sheet = wb.createSheet("jtrac"); this.sheet.setDefaultColumnWidth((short) 12); HSSFFont fBold = wb.createFont(); fBold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); this.csBold = wb.createCellStyle(); this.csBold.setFont(fBold); this.csDate = wb.createCellStyle(); this.csDate.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy")); this.items = items; this.itemSearch = itemSearch; } private HSSFCell getCell(int row, int col) { HSSFRow sheetRow = sheet.getRow(row); if (sheetRow == null) { sheetRow = sheet.createRow(row); } HSSFCell cell = sheetRow.getCell((short) col); if (cell == null) { cell = sheetRow.createCell((short) col); } return cell; } private void setText(int row, int col, String text) { HSSFCell cell = getCell(row, col); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(text); } private void setDate(int row, int col, Date date) { if (date == null) { return; } HSSFCell cell = getCell(row, col); cell.setCellValue(date); cell.setCellStyle(csDate); } private void setDouble(int row, int col, Double value) { if (value == null) { return; } HSSFCell cell = getCell(row, col); cell.setCellValue(value); } private void setHeader(int row, int col, String text) { HSSFCell cell = getCell(row, col); cell.setCellStyle(csBold); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(text); } public HSSFWorkbook exportToExcel(Map<Name, String> localizedLabels) { boolean showHistory = itemSearch.isShowHistory(); List<ColumnHeading> columnHeadings = itemSearch.getColumnHeadingsToRender(); int row = 0; int col = 0; // begin header row for(ColumnHeading ch : columnHeadings) { setHeader(row, col++, ch.isField() ? ch.getLabel() : localizedLabels.get(ch.getName())); } // iterate over list for(AbstractItem item : items) { row++; col = 0; for(ColumnHeading ch : columnHeadings) { if(ch.isField()) { Field field = ch.getField(); switch(field.getName().getType()) { case 4: // double setDouble(row, col++, (Double) item.getValue(field.getName())); break; case 6: // date setDate(row, col++, (Date) item.getValue(field.getName())); break; default: setText(row, col++, item.getCustomValue(field.getName())); } } else { switch(ch.getName()) { case ID: if (showHistory) { int index = ((History) item).getIndex(); if (index > 0) { setText(row, col++, item.getRefId() + " (" + index + ")"); } else { setText(row, col++, item.getRefId()); } } else { setText(row, col++, item.getRefId()); } break; case SUMMARY: setText(row, col++, item.getSummary()); break; case DETAIL: if (showHistory) { History h = (History) item; if(h.getIndex() > 0) { setText(row, col++, h.getComment()); } else { setText(row, col++, h.getDetail()); } } else { setText(row, col++, item.getDetail()); } break; case LOGGED_BY: setText(row, col++, item.getLoggedBy().getName()); break; case STATUS: setText(row, col++, item.getStatusValue()); break; case ASSIGNED_TO: setText(row, col++, (item.getAssignedTo() == null ? "" : item.getAssignedTo().getName())); break; case TIME_STAMP: setDate(row, col++, item.getTimeStamp()); break; case SPACE: setText(row, col++, item.getSpace().getName()); break; default: throw new RuntimeException("Unexpected name: '" + ch.getName() + "'"); } } } } return wb; } }