Index: lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeController.java =================================================================== diff -u -r8ed3b25f15a9ea80cc6f1c3d92210429404501df -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeController.java (.../OutcomeController.java) (revision 8ed3b25f15a9ea80cc6f1c3d92210429404501df) +++ lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeController.java (.../OutcomeController.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -51,11 +51,11 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.factory.annotation.Autowired; Index: lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java (.../IOutcomeService.java) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java (.../IOutcomeService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -9,7 +9,7 @@ import org.lamsfoundation.lams.outcome.OutcomeMapping; import org.lamsfoundation.lams.outcome.OutcomeResult; import org.lamsfoundation.lams.outcome.OutcomeScale; -import org.lamsfoundation.lams.util.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelCell; import org.springframework.web.multipart.MultipartFile; public interface IOutcomeService { Index: lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java =================================================================== diff -u -r889868fbf109f9d5fa9da31d15ee8d5028772a22 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java (.../OutcomeService.java) (revision 889868fbf109f9d5fa9da31d15ee8d5028772a22) +++ lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java (.../OutcomeService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -24,9 +24,9 @@ import org.lamsfoundation.lams.outcome.dao.IOutcomeDAO; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; -import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.excel.ExcelCell; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.web.multipart.MultipartFile; Fisheye: Tag 757ceb570a6d7b9ac11df60ef4de581848c79ba0 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/util/ExcelCell.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 757ceb570a6d7b9ac11df60ef4de581848c79ba0 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/util/ExcelUtil.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelCell.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelCell.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelCell.java (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -0,0 +1,134 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.util.excel; + +import org.apache.poi.ss.usermodel.IndexedColors; + +/** + * Bean object holding necessary data for excel export. + */ +public class ExcelCell { + + public final static int BORDER_STYLE_LEFT_THIN = 1; + public final static int BORDER_STYLE_LEFT_THICK = 4; + public final static int BORDER_STYLE_RIGHT_THICK = 2; + public final static int BORDER_STYLE_BOTTOM_THIN = 3; + + public final static int ALIGN_GENERAL = 1; + public final static int ALIGN_LEFT = 2; + public final static int ALIGN_CENTER = 3; + public final static int ALIGN_RIGHT = 4; + + public final static int CELL_FORMAT_DEFAULT = 0; + public final static int CELL_FORMAT_DATE = 1; + public final static int CELL_FORMAT_TIME = 2; + public final static int CELL_FORMAT_PERCENTAGE = 3; + + private Object cellValue; + private int cellFormat = ExcelCell.CELL_FORMAT_DEFAULT;//default format is 0 + private Boolean isBold = false; + private IndexedColors color; + private int borderStyle = 0; + private int alignment = 0; + + public ExcelCell() { + } + + public ExcelCell(Object cellValue) { + this.cellValue = cellValue; + } + + public ExcelCell(Object cellValue, Boolean isBold) { + this.cellValue = cellValue; + this.isBold = isBold; + } + + public ExcelCell(Object cellValue, IndexedColors color) { + this.cellValue = cellValue; + this.isBold = false; + this.color = color; + } + + public ExcelCell(Object cellValue, int borderStyle) { + this.cellValue = cellValue; + this.isBold = false; + this.borderStyle = borderStyle; + } + + public ExcelCell(Object cellValue, Boolean isBold, int borderStyle) { + this.cellValue = cellValue; + this.isBold = isBold; + this.borderStyle = borderStyle; + } + + public Object getCellValue() { + return cellValue; + } + + public void setCellValue(Object cellValue) { + this.cellValue = cellValue; + } + + public int getCellFormat() { + return cellFormat; + } + + public void setCellFormat(int cellFormat) { + this.cellFormat = cellFormat; + } + + public Boolean isBold() { + return isBold; + } + + public void setIsBold(Boolean isBold) { + this.isBold = isBold; + } + + public IndexedColors getColor() { + return color; + } + + public void setColor(IndexedColors color) { + this.color = color; + } + + public int getBorderStyle() { + return borderStyle; + } + + public void setBorderStyle(int borderStyle) { + this.borderStyle = borderStyle; + } + + public int getAlignment() { + return alignment; + } + + // return the current cell to allow chaining. + public ExcelCell setAlignment(int alignment) { + this.alignment = alignment; + return this; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelRow.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelRow.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelRow.java (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -0,0 +1,56 @@ +package org.lamsfoundation.lams.util.excel; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.poi.ss.usermodel.IndexedColors; + +/** + * Excel row, containing Excel cells. + * + * @author Andrey Balan + */ +public class ExcelRow { + private List cells = new ArrayList<>(); + + public ExcelCell addCell(Object cellValue) { + ExcelCell cell = new ExcelCell(cellValue); + cells.add(cell); + return cell; + } + + public ExcelCell addCell(Object cellValue, Boolean isBold) { + ExcelCell cell = new ExcelCell(cellValue, isBold); + cells.add(cell); + return cell; + } + + public void addCell(Object cellValue, IndexedColors color) { + ExcelCell cell = new ExcelCell(cellValue, color); + cells.add(cell); + } + + public void addCell(Object cellValue, int borderStyle) { + ExcelCell cell = new ExcelCell(cellValue, borderStyle); + cells.add(cell); + } + + public void addCell(Object cellValue, Boolean isBold, int borderStyle) { + ExcelCell cell = new ExcelCell(cellValue, isBold, borderStyle); + cells.add(cell); + } + + public void addEmptyCells(int numberEmptyCells) { + for (int i = 0; i < numberEmptyCells; i++) { + ExcelCell cell = new ExcelCell(""); + cells.add(cell); + } + } + + public List getCells() { + return cells; + } + public void setCells(List cells) { + this.cells = cells;; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelSheet.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelSheet.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelSheet.java (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -0,0 +1,38 @@ +package org.lamsfoundation.lams.util.excel; + +import java.util.ArrayList; +import java.util.List; + +/** + * Excel sheet, containing Excel rows. + * + * @author Andrey + */ +public class ExcelSheet { + private String sheetName = ""; + private List rows = new ArrayList<>(); + + public ExcelSheet() {} + + public ExcelSheet(String sheetName) { + this.sheetName = sheetName; + } + + public void addRow(ExcelRow row) { + rows.add(row); + } + + public List getRows() { + return rows; + } + public void setRows(List rows) { + this.rows = rows;; + } + + public String getSheetName() { + return sheetName; + } + public void setSheetName(String sheetName) { + this.sheetName = sheetName;; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelUtil.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelUtil.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/util/excel/ExcelUtil.java (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -0,0 +1,482 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.util.excel; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.TimeZone; + +import javax.servlet.http.HttpSession; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.util.CellUtil; +import org.apache.poi.ss.util.WorkbookUtil; +import org.apache.poi.util.LocaleUtil; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.FileUtil; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; + +/** + * Utilities for producing .xlsx files. + */ +public class ExcelUtil { + //other built in formats https://poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/BuiltinFormats.html + private static final String FORMAT_PERCENTAGE = "0.00%"; + + private static CellStyle defaultStyle; + private static CellStyle numberStyle; + private static CellStyle floatStyle; + private static CellStyle dateStyle; + private static CellStyle timeStyle; + private static CellStyle percentageStyle; + + private static CellStyle boldStyle; + + private static CellStyle greenColor; + private static CellStyle blueColor; + private static CellStyle redColor; + private static CellStyle yellowColor; + + private static CellStyle borderStyleLeftThin; + private static CellStyle borderStyleLeftThinPercentage; + private static CellStyle borderStyleLeftThick; + private static CellStyle borderStyleRightThick; + private static CellStyle borderStyleLeftThinBoldFont; + private static CellStyle borderStyleLeftThinBoldFontPercentage; + private static CellStyle borderStyleLeftThickBoldFont; + private static CellStyle borderStyleRightThickBoldFont; + private static CellStyle borderStyleBottomThin; + private static CellStyle borderStyleBottomThinBoldFont; + private static CellStyle borderStyleRightThickPercentage; + private static CellStyle borderStyleRightThickBoldFontPercentage; + + public final static String DEFAULT_FONT_NAME = "Calibri-Regular"; + + + /** + * Create .xls file out of provided data and then write out it to an OutputStream. It should be saved with the .xls extension. + * Only use if you want to read the file back in again afterwards. + * + * Warning: The styling is untested with this option and may fail. If you want full styling look at createExcel() + * + * @param out + * output stream to which the file written; usually taken from HTTP response + * @param dataToExport + * array of data to print out; first index of array describes a row, second a column + * @param dateHeader + * text describing current date; if NULL then no date is printed; if not NULL + * then text is written out along with current date in the cell; the date is formatted according to + * {@link #EXPORT_TO_SPREADSHEET_TITLE_DATE_FORMAT} + * @param displaySheetTitle + * whether to display title (printed in the first (0,0) cell) + * @throws IOException + */ + public static void createExcelXLS(OutputStream out, LinkedHashMap dataToExport, + String dateHeader, boolean displaySheetTitle) throws IOException { + Workbook workbook = new HSSFWorkbook(); + ExcelUtil.create(workbook, out, dataToExport, dateHeader, displaySheetTitle); + } + + /** + * Create .xlsx file out of provided data and then write out it to an OutputStream. It should be saved with the .xlsx extension. + * + * @param out + * output stream to which the file written; usually taken from HTTP response + * @param dataToExport + * array of data to print out; first index of array describes a row, second a column + * @param dateHeader + * text describing current date; if NULL then no date is printed; if not NULL + * then text is written out along with current date in the cell; the date is formatted according to + * {@link #EXPORT_TO_SPREADSHEET_TITLE_DATE_FORMAT} + * @param displaySheetTitle + * whether to display title (printed in the first (0,0) cell) + * @throws IOException + */ + public static void createExcel(OutputStream out, LinkedHashMap dataToExport, + String dateHeader, boolean displaySheetTitle) throws IOException { + //set user time zone, which is required for outputting cells of time format + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + TimeZone userTimeZone = user.getTimeZone(); + LocaleUtil.setUserTimeZone(userTimeZone); + + Workbook workbook = new SXSSFWorkbook(100); // keep 100 rows in memory, exceeding rows will be flushed to disk + ExcelUtil.create(workbook, out, dataToExport, dateHeader, displaySheetTitle); + } + + /** + * Temporary wrapper method. + */ + public static void createExcel(OutputStream out, List sheets, String dateHeader, + boolean displaySheetTitle) throws IOException { + LinkedHashMap dataToExport = new LinkedHashMap<>(); + for (ExcelSheet sheet : sheets) { + List rowList = new LinkedList<>(); + for (ExcelRow row : sheet.getRows()) { + rowList.add(row.getCells().toArray(new ExcelCell[] {})); + } + dataToExport.put(sheet.getSheetName(), rowList.toArray(new ExcelCell[][] {})); + } + ExcelUtil.createExcel(out, dataToExport, dateHeader, displaySheetTitle); + } + + private static void create(Workbook workbook, OutputStream out, LinkedHashMap dataToExport, + String dateHeader, boolean displaySheetTitle) throws IOException { + + Font defaultFont = workbook.createFont(); + defaultFont.setFontName(DEFAULT_FONT_NAME); + + //create default style with default font name + defaultStyle = workbook.createCellStyle(); + defaultStyle.setFont(defaultFont); + + //create bold style + boldStyle = workbook.createCellStyle(); + Font boldFont = workbook.createFont(); + boldFont.setBold(true); + boldFont.setFontName(DEFAULT_FONT_NAME); + boldStyle.setFont(boldFont); + + //create color style + blueColor = workbook.createCellStyle(); + blueColor.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); + blueColor.setFillPattern(FillPatternType.SOLID_FOREGROUND); + blueColor.setFont(defaultFont); + redColor = workbook.createCellStyle(); + redColor.setFillForegroundColor(IndexedColors.RED.getIndex()); + redColor.setFillPattern(FillPatternType.SOLID_FOREGROUND); + redColor.setFont(defaultFont); + greenColor = workbook.createCellStyle(); + greenColor.setFillForegroundColor(IndexedColors.LIME.getIndex()); + greenColor.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font whiteFont = workbook.createFont(); + whiteFont.setColor(IndexedColors.WHITE.getIndex()); + whiteFont.setFontName(DEFAULT_FONT_NAME); + greenColor.setFont(whiteFont); + yellowColor = workbook.createCellStyle(); + yellowColor.setFillForegroundColor(IndexedColors.GOLD.getIndex()); + yellowColor.setFillPattern(FillPatternType.SOLID_FOREGROUND); + yellowColor.setFont(defaultFont); + + // create number style + floatStyle = workbook.createCellStyle(); + floatStyle.setDataFormat(workbook.createDataFormat().getFormat("0.00")); + + numberStyle = workbook.createCellStyle(); + numberStyle.setDataFormat(workbook.createDataFormat().getFormat("0")); + + // create date style + dateStyle = workbook.createCellStyle(); + dateStyle.setDataFormat((short)14);// built-in 0xe format - "m/d/yy" + + // create time style + timeStyle = workbook.createCellStyle(); + timeStyle.setDataFormat((short)19);// built-in 0x13 format - "h:mm:ss AM/PM" + + // create percentage style + percentageStyle = workbook.createCellStyle(); + short percentageDataFormatId = workbook.createDataFormat().getFormat(FORMAT_PERCENTAGE); + percentageStyle.setDataFormat(percentageDataFormatId); + + //create border style + borderStyleLeftThin = workbook.createCellStyle(); + borderStyleLeftThin.setBorderLeft(BorderStyle.THIN); + borderStyleLeftThin.setFont(defaultFont); + borderStyleLeftThick = workbook.createCellStyle(); + borderStyleLeftThick.setBorderLeft(BorderStyle.THICK); + borderStyleLeftThick.setFont(defaultFont); + borderStyleRightThick = workbook.createCellStyle(); + borderStyleRightThick.setBorderRight(BorderStyle.THICK); + borderStyleRightThick.setFont(defaultFont); + borderStyleLeftThinBoldFont = workbook.createCellStyle(); + borderStyleLeftThinBoldFont.setBorderLeft(BorderStyle.THIN); + borderStyleLeftThinBoldFont.setFont(boldFont); + borderStyleLeftThickBoldFont = workbook.createCellStyle(); + borderStyleLeftThickBoldFont.setBorderLeft(BorderStyle.THICK); + borderStyleLeftThickBoldFont.setFont(boldFont); + borderStyleRightThickBoldFont = workbook.createCellStyle(); + borderStyleRightThickBoldFont.setBorderRight(BorderStyle.THICK); + borderStyleRightThickBoldFont.setFont(boldFont); + borderStyleBottomThin = workbook.createCellStyle(); + borderStyleBottomThin.setBorderBottom(BorderStyle.THIN); + borderStyleBottomThin.setFont(defaultFont); + borderStyleBottomThinBoldFont = workbook.createCellStyle(); + borderStyleBottomThinBoldFont.setBorderBottom(BorderStyle.THIN); + borderStyleBottomThinBoldFont.setFont(boldFont); + + borderStyleLeftThinPercentage = workbook.createCellStyle(); + borderStyleLeftThinPercentage.setBorderLeft(BorderStyle.THIN); + borderStyleLeftThinPercentage.setFont(defaultFont); + borderStyleLeftThinPercentage.setDataFormat(percentageDataFormatId); + borderStyleLeftThinBoldFontPercentage = workbook.createCellStyle(); + borderStyleLeftThinBoldFontPercentage.setBorderLeft(BorderStyle.THIN); + borderStyleLeftThinBoldFontPercentage.setFont(boldFont); + borderStyleLeftThinBoldFontPercentage.setDataFormat(percentageDataFormatId); + + borderStyleRightThickPercentage = workbook.createCellStyle(); + borderStyleRightThickPercentage.setBorderRight(BorderStyle.THICK); + borderStyleRightThickPercentage.setDataFormat(percentageDataFormatId); + borderStyleRightThickBoldFontPercentage = workbook.createCellStyle(); + borderStyleRightThickBoldFontPercentage.setBorderRight(BorderStyle.THICK); + borderStyleRightThickBoldFontPercentage.setFont(boldFont); + borderStyleRightThickBoldFontPercentage.setDataFormat(percentageDataFormatId); + + int i = 0; + for (String sheetName : dataToExport.keySet()) { + if (dataToExport.get(sheetName) != null) { + String sheetTitle = (displaySheetTitle) ? sheetName : null; + ExcelUtil.createSheet(workbook, sheetName, sheetTitle, i, dateHeader, dataToExport.get(sheetName)); + i++; + } + } + + workbook.write(out); + out.close(); + } + + public static void createSheet(Workbook workbook, String sheetName, String sheetTitle, int sheetIndex, + String dateHeader, ExcelCell[][] data) throws IOException { + // Modify sheet name if required. It should contain only allowed letters and sheets are not allowed with + // the same names (case insensitive) + sheetName = WorkbookUtil.createSafeSheetName(sheetName); + while (workbook.getSheet(sheetName) != null) { + sheetName += " "; + } + + Sheet sheet = workbook.createSheet(sheetName); + //make sure columns are tracked prior to auto-sizing them + if (workbook instanceof SXSSFWorkbook) { + ((SXSSFSheet)sheet).trackAllColumnsForAutoSizing(); + } + + // Print title in bold, if needed + if (!StringUtils.isBlank(sheetTitle)) { + Row row = sheet.createRow(0); + ExcelUtil.createCell(new ExcelCell(sheetTitle, true), 0, row, workbook); + } + + // Print current date, if needed + if (!StringUtils.isBlank(dateHeader)) { + Row row = sheet.createRow(1); + ExcelUtil.createCell(new ExcelCell(dateHeader, false), 0, row, workbook); + + ExcelUtil.createCell(new ExcelCell(FileUtil.EXPORT_TO_SPREADSHEET_TITLE_DATE_FORMAT.format(new Date()), false), 1, row, workbook); + } + + if (data != null) { + int maxColumnSize = 0; + + // Print data + for (int rowIndex = 0; rowIndex < data.length; rowIndex++) { + + // in case there is a sheet title or dateHeader available start from 4th row + int rowIndexOffset = (StringUtils.isBlank(sheetTitle) && StringUtils.isBlank(dateHeader)) ? 0 : 4; + + Row row = sheet.createRow(rowIndex + rowIndexOffset); + + int columnSize = data[rowIndex].length; + for (int columnIndex = 0; columnIndex < columnSize; columnIndex++) { + ExcelCell excelCell = data[rowIndex][columnIndex]; + ExcelUtil.createCell(excelCell, columnIndex, row, workbook); + } + + //calculate max column size + if (columnSize > maxColumnSize) { + maxColumnSize = columnSize; + } + } + + //autoSizeColumns + for (int i = 0; i < maxColumnSize; i++) { + sheet.autoSizeColumn(i); + } + } + } + + public static void createCell(ExcelCell excelCell, int cellnum, Row row, Workbook workbook) { + if (excelCell != null) { + Cell cell = row.createCell(cellnum); + Object excelCellValue = excelCell.getCellValue(); + + //cast excelCell's value + if (excelCellValue != null) { + if (excelCell.getCellFormat() == ExcelCell.CELL_FORMAT_TIME && excelCellValue instanceof Date) { + cell.setCellValue((Date) excelCellValue); + + } else if (excelCellValue instanceof Date) { + cell.setCellValue(FileUtil.EXPORT_TO_SPREADSHEET_CELL_DATE_FORMAT.format(excelCellValue)); + + } else if (excelCellValue instanceof java.lang.Float) { + cell.setCellValue((Float) excelCellValue); + + } else if (excelCellValue instanceof java.lang.Double) { + cell.setCellValue((Double) excelCellValue); + + } else if (excelCellValue instanceof java.lang.Long) { + cell.setCellValue(((Long) excelCellValue).doubleValue()); + + } else if (excelCellValue instanceof java.lang.Integer) { + cell.setCellValue(((Integer) excelCellValue).doubleValue()); + + } else { + cell.setCellValue(excelCellValue.toString()); + } + } + + //figure out cell's style + CellStyle cellStyle = defaultStyle; + if (excelCellValue != null + && (excelCellValue instanceof java.lang.Integer || excelCellValue instanceof java.lang.Long)) { + cellStyle = numberStyle; + } else if (excelCellValue != null + && (excelCellValue instanceof java.lang.Float || excelCellValue instanceof java.lang.Double)) { + cellStyle = floatStyle; + } + if (excelCell.isBold()) { + cellStyle = boldStyle; + } + switch (excelCell.getCellFormat()) { + case 0: + //default - do nothing + break; + case ExcelCell.CELL_FORMAT_DATE: + cellStyle = dateStyle; + break; + case ExcelCell.CELL_FORMAT_TIME: + cellStyle = timeStyle; + break; + case ExcelCell.CELL_FORMAT_PERCENTAGE: + cellStyle = percentageStyle; + break; + } + if (excelCell.getColor() != null) { + switch (excelCell.getColor()) { + case BLUE: + cellStyle = blueColor; + break; + case GREEN: + cellStyle = greenColor; + break; + case RED: + cellStyle = redColor; + break; + case YELLOW: + cellStyle = yellowColor; + break; + default: + break; + } + } + if (excelCell.getBorderStyle() != 0) { + boolean isPercentageFormat = excelCell.getCellFormat() == ExcelCell.CELL_FORMAT_PERCENTAGE; + + switch (excelCell.getBorderStyle()) { + case ExcelCell.BORDER_STYLE_LEFT_THIN: + if (excelCell.isBold() && isPercentageFormat) { + cellStyle = borderStyleLeftThinBoldFontPercentage; + } else if (excelCell.isBold()) { + cellStyle = borderStyleLeftThinBoldFont; + } else if (isPercentageFormat) { + cellStyle = borderStyleLeftThinPercentage; + } else { + cellStyle = borderStyleLeftThin; + } + break; + case ExcelCell.BORDER_STYLE_LEFT_THICK: + if (excelCell.isBold()) { + cellStyle = borderStyleLeftThickBoldFont; + } else { + cellStyle = borderStyleLeftThick; + } + break; + case ExcelCell.BORDER_STYLE_RIGHT_THICK: + if (excelCell.isBold() && isPercentageFormat ) { + cellStyle = borderStyleRightThickBoldFontPercentage; + } else if (excelCell.isBold() ) { + cellStyle = borderStyleRightThickBoldFont; + } else if (isPercentageFormat ) { + cellStyle = borderStyleRightThickPercentage; + } else { + cellStyle = borderStyleRightThick; + } + break; + case ExcelCell.BORDER_STYLE_BOTTOM_THIN: + if (excelCell.isBold()) { + cellStyle = borderStyleBottomThinBoldFont; + } else { + cellStyle = borderStyleBottomThin; + } + break; + default: + break; + } + } + cell.setCellStyle(cellStyle); + if (excelCellValue != null + && (excelCellValue instanceof java.lang.Float || (excelCellValue instanceof java.lang.Double))) { + //only float and double will have this style. int will have "General" style + //cell.getCellStyle().setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##")); +// cell.getCellStyle().setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0")); + } + + if (excelCell.getAlignment() != 0) { + switch (excelCell.getAlignment()) { + case ExcelCell.ALIGN_GENERAL: + CellUtil.setCellStyleProperty(cell, CellUtil.ALIGNMENT, HorizontalAlignment.GENERAL); + break; + case ExcelCell.ALIGN_LEFT: + CellUtil.setCellStyleProperty(cell, CellUtil.ALIGNMENT, HorizontalAlignment.LEFT); + break; + case ExcelCell.ALIGN_CENTER: + CellUtil.setCellStyleProperty(cell, CellUtil.ALIGNMENT, HorizontalAlignment.CENTER); + break; + case ExcelCell.ALIGN_RIGHT: + CellUtil.setCellStyleProperty(cell, CellUtil.ALIGNMENT, HorizontalAlignment.RIGHT); + break; + default: + break; + } + } + } + } + +} Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r66cee69cb7746aa2567532847ae9743a82f8f24c -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 66cee69cb7746aa2567532847ae9743a82f8f24c) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -95,10 +95,10 @@ import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.DateUtil; -import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.web.context.WebApplicationContext; Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookFullService.java =================================================================== diff -u -r679782834f99e7e2699f9f34ae8bf1c75abc7bb5 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookFullService.java (.../IGradebookFullService.java) (revision 679782834f99e7e2699f9f34ae8bf1c75abc7bb5) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookFullService.java (.../IGradebookFullService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -38,7 +38,7 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; -import org.lamsfoundation.lams.util.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelCell; public interface IGradebookFullService extends IGradebookService { Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookUtil.java =================================================================== diff -u -r00528c91be5dfb45899641f6e1cc6f06e2559da9 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookUtil.java (.../GradebookUtil.java) (revision 00528c91be5dfb45899641f6e1cc6f06e2559da9) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookUtil.java (.../GradebookUtil.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -48,8 +48,8 @@ import org.lamsfoundation.lams.gradebook.dto.comparators.GBStartDateComparator; import org.lamsfoundation.lams.gradebook.dto.comparators.GBTimeTakenComparator; import org.lamsfoundation.lams.util.CommonConstants; -import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; import org.w3c.dom.Document; import org.w3c.dom.Element; Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/controller/GradebookMonitoringController.java =================================================================== diff -u -r679782834f99e7e2699f9f34ae8bf1c75abc7bb5 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/controller/GradebookMonitoringController.java (.../GradebookMonitoringController.java) (revision 679782834f99e7e2699f9f34ae8bf1c75abc7bb5) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/controller/GradebookMonitoringController.java (.../GradebookMonitoringController.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -49,11 +49,11 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.factory.annotation.Autowired; Index: lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/KumaliveController.java =================================================================== diff -u -r4b281aa2685bb05bee4c6d7573dc785e406df5dc -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/KumaliveController.java (.../KumaliveController.java) (revision 4b281aa2685bb05bee4c6d7573dc785e406df5dc) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/KumaliveController.java (.../KumaliveController.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -21,11 +21,11 @@ import org.lamsfoundation.lams.util.CommonConstants; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.factory.annotation.Autowired; Index: lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/service/IKumaliveService.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/service/IKumaliveService.java (.../IKumaliveService.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/service/IKumaliveService.java (.../IKumaliveService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -30,7 +30,7 @@ import org.lamsfoundation.lams.learning.kumalive.model.Kumalive; import org.lamsfoundation.lams.learning.kumalive.model.KumalivePoll; import org.lamsfoundation.lams.learning.kumalive.model.KumaliveRubric; -import org.lamsfoundation.lams.util.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelCell; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; Index: lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/service/KumaliveService.java =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/service/KumaliveService.java (.../KumaliveService.java) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/service/KumaliveService.java (.../KumaliveService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -54,9 +54,9 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.util.LastNameAlphabeticComparator; import org.lamsfoundation.lams.util.CommonConstants; -import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.excel.ExcelCell; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.JsonNodeFactory; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringFullService.java =================================================================== diff -u -rddb049f146b313155b63bfd2459132df4d57a452 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringFullService.java (.../IMonitoringFullService.java) (revision ddb049f146b313155b63bfd2459132df4d57a452) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringFullService.java (.../IMonitoringFullService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -18,8 +18,8 @@ import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException; -import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.excel.ExcelCell; /** * Contains methods intended for internal usage by lams_monitoring. Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -rad2a44cf5737f17483ecb2a732b0d6adcaad8078 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision ad2a44cf5737f17483ecb2a732b0d6adcaad8078) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -111,10 +111,10 @@ import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.usermanagement.util.LastNameAlphabeticComparator; import org.lamsfoundation.lams.util.DateUtil; -import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.NumberUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.quartz.JobBuilder; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsController.java =================================================================== diff -u -rf2ad75cef0c507a64877942631fee13efbc6ed50 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsController.java (.../EmailNotificationsController.java) (revision f2ad75cef0c507a64877942631fee13efbc6ed50) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsController.java (.../EmailNotificationsController.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -64,10 +64,10 @@ import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.CommonConstants; import org.lamsfoundation.lams.util.DateUtil; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.quartz.JobBuilder; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingUploadAJAXController.java =================================================================== diff -u -r29a37489a63e5a95f42a5ef5fd8a7daeb65c53c5 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingUploadAJAXController.java (.../GroupingUploadAJAXController.java) (revision 29a37489a63e5a95f42a5ef5fd8a7daeb65c53c5) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingUploadAJAXController.java (.../GroupingUploadAJAXController.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -68,11 +68,11 @@ import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.AlphanumComparator; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.factory.annotation.Autowired; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r00528c91be5dfb45899641f6e1cc6f06e2559da9 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 00528c91be5dfb45899641f6e1cc6f06e2559da9) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -106,11 +106,13 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.HashUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.NumberUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelRow; +import org.lamsfoundation.lams.util.excel.ExcelSheet; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; @@ -1428,24 +1430,25 @@ } @Override - public LinkedHashMap exportSummary(Assessment assessment, List sessionDtos, + public List exportSummary(Assessment assessment, List sessionDtos, boolean showUserNames) { - LinkedHashMap dataToExport = new LinkedHashMap<>(); - final ExcelCell[] EMPTY_ROW = new ExcelCell[0]; + List sheets = new LinkedList(); + final ExcelRow EMPTY_ROW = new ExcelRow(); // -------------- First tab: Summary ---------------------------------------------------- if (showUserNames) { - ArrayList summaryTab = new ArrayList<>(); + ExcelSheet summarySheet = new ExcelSheet(getMessage("label.export.summary")); + sheets.add(summarySheet); if (sessionDtos != null) { for (SessionDTO sessionDTO : sessionDtos) { Long sessionId = sessionDTO.getSessionId(); - summaryTab.add(EMPTY_ROW); + summarySheet.addRow(EMPTY_ROW); - ExcelCell[] sessionTitle = new ExcelCell[1]; - sessionTitle[0] = new ExcelCell(sessionDTO.getSessionName(), true); - summaryTab.add(sessionTitle); + ExcelRow sessionTitleRow = new ExcelRow(); + sessionTitleRow.addCell(sessionDTO.getSessionName(), true); + summarySheet.addRow(sessionTitleRow); List userDtos = new ArrayList<>(); // in case of UseSelectLeaderToolOuput - display only one user @@ -1473,29 +1476,10 @@ userDtos = getPagedUsersBySession(sessionId, 0, countSessionUsers, "userName", "ASC", ""); } - ArrayList summaryTabLearnerList = new ArrayList<>(); - - ExcelCell[] summaryRowTitle = new ExcelCell[3]; - summaryRowTitle[0] = new ExcelCell(getMessage("label.export.user.id"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryRowTitle[1] = new ExcelCell(getMessage("label.monitoring.summary.user.name"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryRowTitle[2] = new ExcelCell(getMessage("label.monitoring.summary.total"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryTabLearnerList.add(summaryRowTitle); - float minGrade = -9999999; float maxGrade = 0; - for (AssessmentUserDTO userDto : userDtos) { float grade = userDto.getGrade(); - - ExcelCell[] userResultRow = new ExcelCell[3]; - userResultRow[0] = new ExcelCell(userDto.getLogin()); - userResultRow[1] = new ExcelCell(userDto.getFirstName() + " " + userDto.getLastName()); - userResultRow[2] = new ExcelCell(grade); - summaryTabLearnerList.add(userResultRow); - if (grade < minGrade || minGrade == -9999999) { minGrade = grade; } @@ -1516,102 +1500,112 @@ } // Mark Summary Min, Max + Grouped Percentages - summaryTab.add(EMPTY_ROW); - ExcelCell[] minMaxRow = new ExcelCell[2]; - minMaxRow[0] = new ExcelCell(getMessage("label.number.learners"), true); - minMaxRow[1] = new ExcelCell(totalNumEntries); - summaryTab.add(minMaxRow); - minMaxRow = new ExcelCell[2]; - minMaxRow[0] = new ExcelCell(getMessage("label.lowest.mark"), true); - minMaxRow[1] = new ExcelCell((double) minGrade); - summaryTab.add(minMaxRow); - minMaxRow = new ExcelCell[2]; - minMaxRow[0] = new ExcelCell(getMessage("label.highest.mark"), true); - minMaxRow[1] = new ExcelCell((double) maxGrade); - summaryTab.add(minMaxRow); + summarySheet.addRow(EMPTY_ROW); + ExcelRow minMaxRow = new ExcelRow(); + minMaxRow.addCell(getMessage("label.number.learners"), true); + minMaxRow.addCell(totalNumEntries); + summarySheet.addRow(minMaxRow); + minMaxRow = new ExcelRow(); + minMaxRow.addCell(getMessage("label.lowest.mark"), true); + minMaxRow.addCell((double) minGrade); + summarySheet.addRow(minMaxRow); + minMaxRow = new ExcelRow(); + minMaxRow.addCell(getMessage("label.highest.mark"), true); + minMaxRow.addCell((double) maxGrade); + summarySheet.addRow(minMaxRow); - summaryTab.add(EMPTY_ROW); - ExcelCell[] binSummaryRow = new ExcelCell[3]; - binSummaryRow[0] = new ExcelCell(getMessage("label.authoring.basic.list.header.mark"), true, + summarySheet.addRow(EMPTY_ROW); + ExcelRow binSummaryRow = new ExcelRow(); + binSummaryRow.addCell(getMessage("label.authoring.basic.list.header.mark"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - binSummaryRow[1] = new ExcelCell(getMessage("label.number.learners"), true, + binSummaryRow.addCell(getMessage("label.number.learners"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - binSummaryRow[2] = new ExcelCell(getMessage("label.percentage"), true, - ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryTab.add(binSummaryRow); + binSummaryRow.addCell(getMessage("label.percentage"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); + summarySheet.addRow(binSummaryRow); float totalNumEntriesAsFloat = totalNumEntries; for (Map.Entry entry : markSummary.entrySet()) { - binSummaryRow = new ExcelCell[3]; - binSummaryRow[0] = new ExcelCell(entry.getKey()); - binSummaryRow[1] = new ExcelCell(entry.getValue()); - binSummaryRow[2] = new ExcelCell(Math.round(entry.getValue() / totalNumEntriesAsFloat * 100), - false); - summaryTab.add(binSummaryRow); + binSummaryRow = new ExcelRow(); + binSummaryRow.addCell(entry.getKey()); + binSummaryRow.addCell(entry.getValue()); + binSummaryRow.addCell(Math.round(entry.getValue() / totalNumEntriesAsFloat * 100), false); + summarySheet.addRow(binSummaryRow); } - summaryTab.add(EMPTY_ROW); + summarySheet.addRow(EMPTY_ROW); + summarySheet.addRow(EMPTY_ROW); + + ArrayList summaryTabLearnerList = new ArrayList<>(); - summaryTab.add(EMPTY_ROW); - summaryTab.addAll(summaryTabLearnerList); - summaryTab.add(EMPTY_ROW); + ExcelRow summaryTitleRow = new ExcelRow(); + summaryTitleRow.addCell(getMessage("label.export.user.id"), true, + ExcelCell.BORDER_STYLE_BOTTOM_THIN); + summaryTitleRow.addCell(getMessage("label.monitoring.summary.user.name"), true, + ExcelCell.BORDER_STYLE_BOTTOM_THIN); + summaryTitleRow.addCell(getMessage("label.monitoring.summary.total"), true, + ExcelCell.BORDER_STYLE_BOTTOM_THIN); + summarySheet.addRow(summaryTitleRow); + + for (AssessmentUserDTO userDto : userDtos) { + ExcelRow userResultRow = new ExcelRow(); + userResultRow.addCell(userDto.getLogin()); + userResultRow.addCell(userDto.getFirstName() + " " + userDto.getLastName()); + userResultRow.addCell(userDto.getGrade()); + summarySheet.addRow(userResultRow); + } + summarySheet.addRow(EMPTY_ROW); } } - - dataToExport.put(getMessage("label.export.summary"), summaryTab.toArray(new ExcelCell[][] {})); } // ------------------------------------------------------------------ // -------------- Second tab: Question Summary ---------------------- + ExcelSheet questionSummarySheet = new ExcelSheet(getMessage("lable.export.summary.by.question")); + sheets.add(questionSummarySheet); - ArrayList questionSummaryTab = new ArrayList<>(); - // Create the question summary - ExcelCell[] summaryTitle = new ExcelCell[1]; - summaryTitle[0] = new ExcelCell(getMessage("label.export.question.summary"), true); - questionSummaryTab.add(summaryTitle); - questionSummaryTab.add(EMPTY_ROW); + ExcelRow summaryTitleRow = new ExcelRow(); + summaryTitleRow.addCell(getMessage("label.export.question.summary"), true); + questionSummarySheet.addRow(summaryTitleRow); + questionSummarySheet.addRow(EMPTY_ROW); Map questionSummaries = getQuestionSummaryForExport(assessment); if (assessment.getQuestions() != null) { Set questions = assessment.getQuestions(); - int count = 0; // question row title - ExcelCell[] questionTitleRow = showUserNames ? new ExcelCell[11] : new ExcelCell[10]; - questionTitleRow[count++] = new ExcelCell(getMessage("label.monitoring.question.summary.question"), true, + ExcelRow questionTitleRow = new ExcelRow(); + questionTitleRow.addCell(getMessage("label.monitoring.question.summary.question"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - questionTitleRow[count++] = new ExcelCell(getMessage("label.authoring.basic.list.header.type"), true, + questionTitleRow.addCell(getMessage("label.authoring.basic.list.header.type"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - questionTitleRow[count++] = new ExcelCell(getMessage("label.authoring.basic.penalty.factor"), true, + questionTitleRow.addCell(getMessage("label.authoring.basic.penalty.factor"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - questionTitleRow[count++] = new ExcelCell(getMessage("label.monitoring.question.summary.default.mark"), + questionTitleRow.addCell(getMessage("label.monitoring.question.summary.default.mark"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - questionTitleRow[count++] = new ExcelCell(getMessage("label.export.user.id"), true, + questionTitleRow.addCell(getMessage("label.export.user.id"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); if (showUserNames) { - questionTitleRow[count++] = new ExcelCell(getMessage("label.monitoring.user.summary.user.name"), true, + questionTitleRow.addCell(getMessage("label.monitoring.user.summary.user.name"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); } - questionTitleRow[count++] = new ExcelCell(getMessage("label.export.date.attempted"), true, + questionTitleRow.addCell(getMessage("label.export.date.attempted"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - questionTitleRow[count++] = new ExcelCell(getMessage("label.export.time.attempted"), true, + questionTitleRow.addCell(getMessage("label.export.time.attempted"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - questionTitleRow[count++] = new ExcelCell(getMessage("label.authoring.basic.option.answer"), true, + questionTitleRow.addCell(getMessage("label.authoring.basic.option.answer"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - questionTitleRow[count++] = new ExcelCell(getMessage("label.export.time.taken"), true, + questionTitleRow.addCell(getMessage("label.export.time.taken"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - questionTitleRow[count++] = new ExcelCell(getMessage("label.export.mark"), true, + questionTitleRow.addCell(getMessage("label.export.mark"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); int questionNumber = 1; for (AssessmentQuestion question : questions) { - int colsNum = showUserNames ? 11 : 10; - - ExcelCell[] questionTitle = new ExcelCell[1]; - questionTitle[0] = new ExcelCell( + ExcelRow questionTitle = new ExcelRow(); + questionTitle.addCell( getMessage("label.monitoring.question.summary.question") + " " + questionNumber++, true); - questionSummaryTab.add(questionTitle); + questionSummarySheet.addRow(questionTitle); // set up the summary table data for the top of the question area. boolean doSummaryTable = question.getType() == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE @@ -1625,45 +1619,44 @@ Long trueKey = 1L; Long falseKey = 0L; if (doSummaryTable) { - questionSummaryTab.add(startSummaryTable(question, summaryOfAnswers, trueKey, falseKey)); + questionSummarySheet.addRow(startSummaryTable(question, summaryOfAnswers, trueKey, falseKey)); + questionSummarySheet + .addRow(outputSummaryTable(question, summaryOfAnswers, summaryNACount, trueKey, falseKey)); + questionSummarySheet.addRow(EMPTY_ROW); } - ArrayList questionSummaryTabTemp = new ArrayList<>(); - //add question title row if (question.getType() == AssessmentConstants.QUESTION_TYPE_MARK_HEDGING) { - count = 0; Set options = question.getOptions(); - colsNum += options.size() - 1; // question row title - ExcelCell[] hedgeQuestionTitleRow = new ExcelCell[colsNum]; - hedgeQuestionTitleRow[count++] = new ExcelCell( + ExcelRow hedgeQuestionTitleRow = new ExcelRow(); + hedgeQuestionTitleRow.addCell( getMessage("label.monitoring.question.summary.question"), true); - hedgeQuestionTitleRow[count++] = new ExcelCell(getMessage("label.authoring.basic.list.header.type"), + hedgeQuestionTitleRow.addCell(getMessage("label.authoring.basic.list.header.type"), true); - hedgeQuestionTitleRow[count++] = new ExcelCell(getMessage("label.authoring.basic.penalty.factor"), + hedgeQuestionTitleRow.addCell(getMessage("label.authoring.basic.penalty.factor"), true); - hedgeQuestionTitleRow[count++] = new ExcelCell( + hedgeQuestionTitleRow.addCell( getMessage("label.monitoring.question.summary.default.mark"), true); - hedgeQuestionTitleRow[count++] = new ExcelCell(getMessage("label.export.user.id"), true); + hedgeQuestionTitleRow.addCell(getMessage("label.export.user.id"), true); if (showUserNames) { - hedgeQuestionTitleRow[count++] = new ExcelCell( + hedgeQuestionTitleRow.addCell( getMessage("label.monitoring.user.summary.user.name"), true); } - hedgeQuestionTitleRow[count++] = new ExcelCell(getMessage("label.export.date.attempted"), true); - hedgeQuestionTitleRow[count++] = new ExcelCell(getMessage("label.export.time.attempted"), true); + hedgeQuestionTitleRow.addCell(getMessage("label.export.date.attempted"), true); + hedgeQuestionTitleRow.addCell(getMessage("label.export.time.attempted"), true); for (AssessmentQuestionOption option : options) { - hedgeQuestionTitleRow[count++] = new ExcelCell( + ExcelCell cell = hedgeQuestionTitleRow.addCell( option.getOptionString().replaceAll("\\<.*?\\>", ""), true); if (option.isCorrect()) { - hedgeQuestionTitleRow[count - 1].setColor(IndexedColors.GREEN); + cell.setColor(IndexedColors.GREEN); } } - hedgeQuestionTitleRow[count++] = new ExcelCell(getMessage("label.export.time.taken"), true); - hedgeQuestionTitleRow[count++] = new ExcelCell(getMessage("label.export.mark"), true); - questionSummaryTabTemp.add(hedgeQuestionTitleRow); + hedgeQuestionTitleRow.addCell(getMessage("label.export.time.taken"), true); + hedgeQuestionTitleRow.addCell(getMessage("label.export.mark"), true); + questionSummarySheet.addRow(hedgeQuestionTitleRow); } else { - questionSummaryTabTemp.add(questionTitleRow); + questionSummarySheet.addRow(questionTitleRow); } QuestionSummary questionSummary = questionSummaries.get(question.getUid()); @@ -1676,67 +1669,65 @@ int timeTakenTotal = 0; for (List resultList : allResultsForQuestion) { for (AssessmentQuestionResult questionResult : resultList) { - ExcelCell[] userResultRow = new ExcelCell[colsNum]; - count = 0; - userResultRow[count++] = new ExcelCell(questionResult.getAssessmentQuestion().getTitle(), + ExcelRow userResultRow = new ExcelRow(); + userResultRow.addCell(questionResult.getAssessmentQuestion().getTitle(), false); - userResultRow[count++] = new ExcelCell( + userResultRow.addCell( getQuestionTypeLanguageLabel(questionResult.getAssessmentQuestion().getType())); - userResultRow[count++] = new ExcelCell( + userResultRow.addCell( Float.valueOf(questionResult.getAssessmentQuestion().getPenaltyFactor())); Float maxMark = (questionResult.getMaxMark() == null) ? 0 : Float.valueOf(questionResult.getMaxMark()); - userResultRow[count++] = new ExcelCell(maxMark); + userResultRow.addCell(maxMark); if (showUserNames) { - userResultRow[count++] = new ExcelCell(questionResult.getUser().getLoginName()); - userResultRow[count++] = new ExcelCell(questionResult.getUser().getFullName()); + userResultRow.addCell(questionResult.getUser().getLoginName()); + userResultRow.addCell(questionResult.getUser().getFullName()); } else { - userResultRow[count++] = new ExcelCell(questionResult.getUser().getUserId()); + userResultRow.addCell(questionResult.getUser().getUserId()); } //date and time - userResultRow[count] = new ExcelCell(questionResult.getFinishDate()); - userResultRow[count++].setCellFormat(ExcelCell.CELL_FORMAT_DATE); - userResultRow[count] = new ExcelCell(questionResult.getFinishDate()); - userResultRow[count++].setCellFormat(ExcelCell.CELL_FORMAT_TIME); - + ExcelCell dateCell = userResultRow.addCell(questionResult.getFinishDate()); + dateCell.setCellFormat(ExcelCell.CELL_FORMAT_DATE); + ExcelCell timeCell = userResultRow.addCell(questionResult.getFinishDate()); + timeCell.setCellFormat(ExcelCell.CELL_FORMAT_TIME); + //answer if (question.getType() == AssessmentConstants.QUESTION_TYPE_MARK_HEDGING) { Set optionAnswers = questionResult.getOptionAnswers(); for (AssessmentQuestionOption option : question.getOptions()) { for (AssessmentOptionAnswer optionAnswer : optionAnswers) { if (option.getUid().equals(optionAnswer.getOptionUid())) { - userResultRow[count++] = new ExcelCell(optionAnswer.getAnswerInt()); + userResultRow.addCell(optionAnswer.getAnswerInt()); break; } } } - + } else { - userResultRow[count++] = new ExcelCell( - AssessmentEscapeUtils.printResponsesForExcelExport(questionResult)); + userResultRow.addCell(AssessmentEscapeUtils.printResponsesForExcelExport(questionResult)); if (doSummaryTable) { summaryNACount = updateSummaryCounts(question, questionResult, summaryOfAnswers, summaryNACount); } } - + //time taken if (questionResult.getAssessmentResult() != null) { Date startDate = questionResult.getAssessmentResult().getStartDate(); Date finishDate = questionResult.getFinishDate(); if ((startDate != null) && (finishDate != null)) { Long seconds = (finishDate.getTime() - startDate.getTime()) / 1000; - userResultRow[count++] = new ExcelCell(seconds); + userResultRow.addCell(seconds); timeTakenCount++; timeTakenTotal += seconds; } } - + //mark - userResultRow[count++] = new ExcelCell(questionResult.getMark()); - questionSummaryTabTemp.add(userResultRow); + userResultRow.addCell(questionResult.getMark()); + questionSummarySheet.addRow(userResultRow); //calculating markCount & markTotal if (questionResult.getMark() != null) { @@ -1746,76 +1737,47 @@ } } - if (doSummaryTable) { - questionSummaryTab - .add(outputSummaryTable(question, summaryOfAnswers, summaryNACount, trueKey, falseKey)); - questionSummaryTab.add(EMPTY_ROW); - } - // Calculating the averages - ExcelCell[] averageRow; - + ExcelRow averageRow = new ExcelRow(); + averageRow.addEmptyCells(7); if (showUserNames) { - averageRow = new ExcelCell[10]; - - averageRow[7] = new ExcelCell(getMessage("label.export.average"), true); - - if (timeTakenTotal > 0) { - averageRow[8] = new ExcelCell(Long.valueOf(timeTakenTotal / timeTakenCount)); - } - if (markTotal > 0) { - Float averageMark = Float.valueOf(markTotal / markCount); - averageRow[9] = new ExcelCell(averageMark); - } else { - averageRow[9] = new ExcelCell(0.0F); - } - } else { - averageRow = new ExcelCell[9]; - averageRow[6] = new ExcelCell(getMessage("label.export.average"), true); - - if (timeTakenTotal > 0) { - averageRow[7] = new ExcelCell(Long.valueOf(timeTakenTotal / timeTakenCount)); - } - if (markTotal > 0) { - Float averageMark = Float.valueOf(markTotal / markCount); - averageRow[8] = new ExcelCell(averageMark); - } else { - averageRow[8] = new ExcelCell(0.0F); - } + averageRow.addEmptyCells(1); } + averageRow.addCell(getMessage("label.export.average"), true); + if (timeTakenTotal > 0) { + averageRow.addCell(Long.valueOf(timeTakenTotal / timeTakenCount)); + } + Float averageMark = markTotal > 0 ? Float.valueOf(markTotal / markCount) : 0.0F; + averageRow.addCell(averageMark); + questionSummarySheet.addRow(averageRow); - questionSummaryTab.addAll(questionSummaryTabTemp); - questionSummaryTab.add(averageRow); - questionSummaryTab.add(EMPTY_ROW); - + questionSummarySheet.addRow(EMPTY_ROW); } - } - dataToExport.put(getMessage("lable.export.summary.by.question"), - questionSummaryTab.toArray(new ExcelCell[][] {})); // ------------------------------------------------------------------ // -------------- Third tab: User Summary --------------------------- - ArrayList userSummaryTab = new ArrayList<>(); + ExcelSheet userSummarySheet = new ExcelSheet(getMessage("label.export.summary.by.user")); + sheets.add(userSummarySheet); // Create the question summary - ExcelCell[] userSummaryTitle = new ExcelCell[1]; - userSummaryTitle[0] = new ExcelCell(getMessage("label.export.user.summary"), true); - userSummaryTab.add(userSummaryTitle); + ExcelRow userSummaryTitle = new ExcelRow(); + userSummaryTitle.addCell(getMessage("label.export.user.summary"), true); + userSummarySheet.addRow(userSummaryTitle); - ExcelCell[] summaryRowTitle = new ExcelCell[5]; - summaryRowTitle[0] = new ExcelCell(getMessage("label.monitoring.question.summary.question"), true, + ExcelRow summaryRowTitle = new ExcelRow(); + summaryRowTitle.addCell(getMessage("label.monitoring.question.summary.question"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryRowTitle[1] = new ExcelCell(getMessage("label.authoring.basic.list.header.type"), true, + summaryRowTitle.addCell(getMessage("label.authoring.basic.list.header.type"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryRowTitle[2] = new ExcelCell(getMessage("label.authoring.basic.penalty.factor"), true, + summaryRowTitle.addCell(getMessage("label.authoring.basic.penalty.factor"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryRowTitle[3] = new ExcelCell(getMessage("label.monitoring.question.summary.default.mark"), true, + summaryRowTitle.addCell(getMessage("label.monitoring.question.summary.default.mark"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - summaryRowTitle[4] = new ExcelCell(getMessage("label.monitoring.question.summary.average.mark"), true, + summaryRowTitle.addCell(getMessage("label.monitoring.question.summary.average.mark"), true, ExcelCell.BORDER_STYLE_BOTTOM_THIN); - userSummaryTab.add(summaryRowTitle); + userSummarySheet.addRow(summaryRowTitle); Float totalGradesPossible = 0F; Float totalAverage = 0F; if (assessment.getQuestionReferences() != null) { @@ -1852,24 +1814,25 @@ int maxGrade = questionReference.getDefaultGrade(); totalGradesPossible += maxGrade; - ExcelCell[] questCell = new ExcelCell[5]; - questCell[0] = new ExcelCell(title); - questCell[1] = new ExcelCell(questionType); - questCell[2] = new ExcelCell(penaltyFactor); - questCell[3] = new ExcelCell(maxGrade); - questCell[4] = new ExcelCell(averageMark); + ExcelRow questCellRow = new ExcelRow(); + questCellRow.addCell(title); + questCellRow.addCell(questionType); + questCellRow.addCell(penaltyFactor); + questCellRow.addCell(maxGrade); + questCellRow.addCell(averageMark); - userSummaryTab.add(questCell); + userSummarySheet.addRow(questCellRow); } if (totalGradesPossible.floatValue() > 0) { - ExcelCell[] totalCell = new ExcelCell[5]; - totalCell[2] = new ExcelCell(getMessage("label.monitoring.summary.total"), true); - totalCell[3] = new ExcelCell(totalGradesPossible); - totalCell[4] = new ExcelCell(totalAverage); - userSummaryTab.add(totalCell); + ExcelRow totalCellRow = new ExcelRow(); + totalCellRow.addEmptyCells(2); + totalCellRow.addCell(getMessage("label.monitoring.summary.total"), true); + totalCellRow.addCell(totalGradesPossible); + totalCellRow.addCell(totalAverage); + userSummarySheet.addRow(totalCellRow); } - userSummaryTab.add(EMPTY_ROW); + userSummarySheet.addRow(EMPTY_ROW); } if (sessionDtos != null) { @@ -1882,11 +1845,11 @@ for (SessionDTO sessionDTO : sessionDtos) { - userSummaryTab.add(EMPTY_ROW); + userSummarySheet.addRow(EMPTY_ROW); - ExcelCell[] sessionTitle = new ExcelCell[1]; - sessionTitle[0] = new ExcelCell(sessionDTO.getSessionName(), true); - userSummaryTab.add(sessionTitle); + ExcelRow sessionTitle = new ExcelRow(); + sessionTitle.addCell(sessionDTO.getSessionName(), true); + userSummarySheet.addRow(sessionTitle); AssessmentSession assessmentSession = getSessionBySessionId(sessionDTO.getSessionId()); @@ -1897,92 +1860,72 @@ for (AssessmentUser assessmentUser : assessmentUsers) { if (showUserNames) { - ExcelCell[] userTitleRow = new ExcelCell[6]; - userTitleRow[0] = new ExcelCell(getMessage("label.export.user.id"), true); - userTitleRow[1] = new ExcelCell(getMessage("label.monitoring.user.summary.user.name"), + ExcelRow userTitleRow = new ExcelRow(); + userTitleRow.addCell(getMessage("label.export.user.id"), true); + userTitleRow.addCell(getMessage("label.monitoring.user.summary.user.name"), true); - userTitleRow[2] = new ExcelCell(getMessage("label.export.date.attempted"), true); - userTitleRow[3] = new ExcelCell(getMessage("label.monitoring.question.summary.question"), + userTitleRow.addCell(getMessage("label.export.date.attempted"), true); + userTitleRow.addCell(getMessage("label.monitoring.question.summary.question"), true); - userTitleRow[4] = new ExcelCell(getMessage("label.authoring.basic.option.answer"), true); - userTitleRow[5] = new ExcelCell(getMessage("label.export.mark"), true); - userSummaryTab.add(userTitleRow); + userTitleRow.addCell(getMessage("label.authoring.basic.option.answer"), true); + userTitleRow.addCell(getMessage("label.export.mark"), true); + userSummarySheet.addRow(userTitleRow); } else { - ExcelCell[] userTitleRow = new ExcelCell[5]; - userTitleRow[0] = new ExcelCell(getMessage("label.export.user.id"), true); - userTitleRow[1] = new ExcelCell(getMessage("label.export.date.attempted"), true); - userTitleRow[2] = new ExcelCell(getMessage("label.monitoring.question.summary.question"), + ExcelRow userTitleRow = new ExcelRow(); + userTitleRow.addCell(getMessage("label.export.user.id"), true); + userTitleRow.addCell(getMessage("label.export.date.attempted"), true); + userTitleRow.addCell(getMessage("label.monitoring.question.summary.question"), true); - userTitleRow[3] = new ExcelCell(getMessage("label.authoring.basic.option.answer"), true); - userTitleRow[4] = new ExcelCell(getMessage("label.export.mark"), true); - userSummaryTab.add(userTitleRow); + userTitleRow.addCell(getMessage("label.authoring.basic.option.answer"), true); + userTitleRow.addCell(getMessage("label.export.mark"), true); + userSummarySheet.addRow(userTitleRow); } AssessmentResult assessmentResult = userUidToResultMap.get(assessmentUser.getUid()); - if (assessmentResult != null) { Set questionResults = assessmentResult.getQuestionResults(); - if (questionResults != null) { - for (AssessmentQuestionResult questionResult : questionResults) { - + ExcelRow userResultRow = new ExcelRow(); if (showUserNames) { - ExcelCell[] userResultRow = new ExcelCell[6]; - userResultRow[0] = new ExcelCell(assessmentUser.getLoginName()); - userResultRow[1] = new ExcelCell(assessmentUser.getFullName()); - userResultRow[2] = new ExcelCell(assessmentResult.getStartDate()); - userResultRow[3] = new ExcelCell( - questionResult.getAssessmentQuestion().getTitle()); - userResultRow[4] = new ExcelCell( - AssessmentEscapeUtils.printResponsesForExcelExport(questionResult)); - userResultRow[5] = new ExcelCell(questionResult.getMark()); - userSummaryTab.add(userResultRow); + userResultRow.addCell(assessmentUser.getLoginName()); + userResultRow.addCell(assessmentUser.getFullName()); } else { - ExcelCell[] userResultRow = new ExcelCell[5]; - userResultRow[0] = new ExcelCell(assessmentUser.getUserId()); - userResultRow[1] = new ExcelCell(assessmentResult.getStartDate()); - userResultRow[2] = new ExcelCell( - questionResult.getAssessmentQuestion().getTitle()); - userResultRow[3] = new ExcelCell( - AssessmentEscapeUtils.printResponsesForExcelExport(questionResult)); - userResultRow[4] = new ExcelCell(questionResult.getMark()); - userSummaryTab.add(userResultRow); + userResultRow.addCell(assessmentUser.getUserId()); } + userResultRow.addCell(assessmentResult.getStartDate()); + userResultRow.addCell(questionResult.getAssessmentQuestion().getTitle()); + userResultRow.addCell( + AssessmentEscapeUtils.printResponsesForExcelExport(questionResult)); + userResultRow.addCell(questionResult.getMark()); + userSummarySheet.addRow(userResultRow); } } - ExcelCell[] userTotalRow; - if (showUserNames) { - userTotalRow = new ExcelCell[6]; - userTotalRow[4] = new ExcelCell(getMessage("label.monitoring.summary.total"), true); - userTotalRow[5] = new ExcelCell(assessmentResult.getGrade()); - } else { - userTotalRow = new ExcelCell[5]; - userTotalRow[3] = new ExcelCell(getMessage("label.monitoring.summary.total"), true); - userTotalRow[4] = new ExcelCell(assessmentResult.getGrade()); - } + ExcelRow userTotalRow = new ExcelRow(); + userTotalRow.addEmptyCells(showUserNames ? 4 : 3); + userTotalRow.addCell(getMessage("label.monitoring.summary.total"), true); + userTotalRow.addCell(assessmentResult.getGrade()); - userSummaryTab.add(userTotalRow); - userSummaryTab.add(EMPTY_ROW); + userSummarySheet.addRow(userTotalRow); + userSummarySheet.addRow(EMPTY_ROW); } } } } } - dataToExport.put(getMessage("label.export.summary.by.user"), userSummaryTab.toArray(new ExcelCell[][] {})); - return dataToExport; + return sheets; } - private ExcelCell[] startSummaryTable(AssessmentQuestion question, Map summaryOfAnswers, + private ExcelRow startSummaryTable(AssessmentQuestion question, Map summaryOfAnswers, Long trueKey, Long falseKey) { - ExcelCell[] summaryTable; + ExcelRow summaryTableRow; int i = 0; if (question.getType() == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE || question.getType() == AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER || question.getType() == AssessmentConstants.QUESTION_TYPE_NUMERICAL) { - summaryTable = new ExcelCell[question.getOptions().size() + 1]; + summaryTableRow = new ExcelRow(); for (AssessmentQuestionOption option : question.getOptions()) { summaryOfAnswers.put(option.getUid(), 0); StringBuilder bldr = new StringBuilder(getMessage("label.authoring.basic.option.answer")).append(" ") @@ -1992,23 +1935,23 @@ } else { bldr.append(option.getOptionString().replaceAll("\\<.*?\\>", "")); } - summaryTable[i] = new ExcelCell(bldr.toString()); + summaryTableRow.addCell(bldr.toString()); i++; } if (question.getType() == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { - summaryTable[i++] = new ExcelCell(getMessage("label.not.answered")); + summaryTableRow.addCell(getMessage("label.not.answered")); } else { - summaryTable[i++] = new ExcelCell(getMessage("label.other")); + summaryTableRow.addCell(getMessage("label.other")); } } else { - summaryTable = new ExcelCell[3]; - summaryTable[0] = new ExcelCell(getMessage("label.authoring.true.false.true")); - summaryTable[1] = new ExcelCell(getMessage("label.authoring.true.false.false")); - summaryTable[2] = new ExcelCell(getMessage("label.not.answered")); + summaryTableRow = new ExcelRow(); + summaryTableRow.addCell(getMessage("label.authoring.true.false.true")); + summaryTableRow.addCell(getMessage("label.authoring.true.false.false")); + summaryTableRow.addCell(getMessage("label.not.answered")); summaryOfAnswers.put(trueKey, 0); summaryOfAnswers.put(falseKey, 0); } - return summaryTable; + return summaryTableRow; } private Integer updateSummaryCounts(AssessmentQuestion question, AssessmentQuestionResult questionResult, @@ -2068,33 +2011,36 @@ return NumberUtil.formatLocalisedNumber(percentage, (Locale) null, 2) + "%"; } - private ExcelCell[] outputSummaryTable(AssessmentQuestion question, Map summaryOfAnswers, + private ExcelRow outputSummaryTable(AssessmentQuestion question, Map summaryOfAnswers, Integer summaryNACount, Long trueKey, Long falseKey) { - ExcelCell[] summaryTable = new ExcelCell[summaryOfAnswers.size() + 1]; + ExcelRow summaryTableRow = new ExcelRow(); int total = summaryNACount; for (int value : summaryOfAnswers.values()) { total += value; } - int i = 0; if (question.getType() == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE || question.getType() == AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER || question.getType() == AssessmentConstants.QUESTION_TYPE_NUMERICAL) { for (AssessmentQuestionOption option : question.getOptions()) { - summaryTable[i] = new ExcelCell(valueAsPercentage(summaryOfAnswers.get(option.getUid()), total)); + ExcelCell cell = summaryTableRow.addCell(valueAsPercentage(summaryOfAnswers.get(option.getUid()), total)); if (option.getGrade() > 0) { - summaryTable[i].setColor(IndexedColors.GREEN); + cell.setColor(IndexedColors.GREEN); } - i++; } - summaryTable[i++] = new ExcelCell(valueAsPercentage(summaryNACount, total)); + summaryTableRow.addCell(valueAsPercentage(summaryNACount, total)); } else { - summaryTable = new ExcelCell[3]; - summaryTable[0] = new ExcelCell(valueAsPercentage(summaryOfAnswers.get(trueKey), total)); - summaryTable[1] = new ExcelCell(valueAsPercentage(summaryOfAnswers.get(falseKey), total)); - summaryTable[2] = new ExcelCell(valueAsPercentage(summaryNACount, total)); - summaryTable[question.getCorrectAnswer() ? 0 : 1].setColor(IndexedColors.GREEN); + summaryTableRow = new ExcelRow(); + ExcelCell trueCell = summaryTableRow.addCell(valueAsPercentage(summaryOfAnswers.get(trueKey), total)); + ExcelCell falseCell = summaryTableRow.addCell(valueAsPercentage(summaryOfAnswers.get(falseKey), total)); + summaryTableRow.addCell(valueAsPercentage(summaryNACount, total)); + + if (question.getCorrectAnswer()) { + trueCell.setColor(IndexedColors.GREEN); + } else { + falseCell.setColor(IndexedColors.GREEN); + } } - return summaryTable; + return summaryTableRow; } /** Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -47,7 +47,8 @@ import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.tool.assessment.model.QuestionReference; import org.lamsfoundation.lams.tool.service.ICommonToolService; -import org.lamsfoundation.lams.util.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelSheet; /** * @author Andrey Balan @@ -446,7 +447,7 @@ * @param showUserNames * @return */ - LinkedHashMap exportSummary(Assessment assessment, List sessionDtos, + List exportSummary(Assessment assessment, List sessionDtos, boolean showUserNames); /** Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java =================================================================== diff -u -rdcdc1487609bd4f00afaa93c09272d84ab0cd325 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision dcdc1487609bd4f00afaa93c09272d84ab0cd325) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -26,7 +26,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Date; -import java.util.LinkedHashMap; import java.util.List; import java.util.Set; import java.util.TimeZone; @@ -61,10 +60,10 @@ import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.CommonConstants; import org.lamsfoundation.lams.util.DateUtil; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelSheet; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.lamsfoundation.lams.web.util.SessionMap; @@ -526,8 +525,7 @@ return null; } - LinkedHashMap dataToExport = service.exportSummary(assessment, sessionDtos, - showUserNames); + List sheets = service.exportSummary(assessment, sessionDtos, showUserNames); // Setting the filename if it wasn't passed in the request if (fileName == null) { @@ -545,7 +543,7 @@ response.addCookie(fileDownloadTokenCookie); ServletOutputStream out = response.getOutputStream(); - ExcelUtil.createExcel(out, dataToExport, service.getMessage("label.export.exported.on"), true); + ExcelUtil.createExcel(out, sheets, service.getMessage("label.export.exported.on"), true); return null; } Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/util/DacoExcelUtil.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/util/DacoExcelUtil.java (.../DacoExcelUtil.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/util/DacoExcelUtil.java (.../DacoExcelUtil.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -27,9 +27,13 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelRow; +import org.lamsfoundation.lams.util.excel.ExcelSheet; +import org.lamsfoundation.lams.util.excel.ExcelUtil; public class DacoExcelUtil { @@ -56,36 +60,30 @@ */ public static void exportToExcel(OutputStream out, String sheetName, String title, String dateHeader, String[] columnNames, Object[][] inputData) throws IOException { + List sheets = new LinkedList(); + ExcelSheet sheet = new ExcelSheet(title); + sheets.add(sheet); - LinkedHashMap dataToExport = new LinkedHashMap(); - - ArrayList data = new ArrayList(); - - ExcelCell[] summaryRowTitle = new ExcelCell[columnNames.length]; - for (int columnIndex = 0; columnIndex < columnNames.length; columnIndex++) { - String columnName = columnNames[columnIndex]; - summaryRowTitle[columnIndex] = new ExcelCell(columnName, true); + ExcelRow summaryTitleRow = new ExcelRow(); + for (String columnName : columnNames) { + summaryTitleRow.addCell(columnName, true); } - data.add(summaryRowTitle); + sheet.addRow(summaryTitleRow); if (inputData != null) { // Print data for (int rowIndex = 0; rowIndex < inputData.length; rowIndex++) { - ExcelCell[] row = new ExcelCell[columnNames.length]; - + ExcelRow row = new ExcelRow(); for (int columnIndex = 0; columnIndex < inputData[rowIndex].length; columnIndex++) { - Object content = inputData[rowIndex][columnIndex]; if (content != null) { - row[columnIndex] = new ExcelCell(content, false); + row.addCell(content, false); } } - data.add(row); + sheet.addRow(row); } } - dataToExport.put(title, data.toArray(new ExcelCell[][] {})); - - ExcelUtil.createExcel(out, dataToExport, dateHeader, true); + ExcelUtil.createExcel(out, sheets, dateHeader, true); } } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java =================================================================== diff -u -r6ce1b949a486cdf029290566855cb29626ed0818 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 6ce1b949a486cdf029290566855cb29626ed0818) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -99,11 +99,11 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.HashUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.NumberUtil; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.dao.DataAccessException; Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -39,7 +39,7 @@ import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewSession; import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewUser; import org.lamsfoundation.lams.tool.service.ICommonToolService; -import org.lamsfoundation.lams.util.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelCell; import com.fasterxml.jackson.databind.node.ArrayNode; Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -80,9 +80,9 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.excel.ExcelCell; import org.springframework.web.util.HtmlUtils; import com.fasterxml.jackson.databind.node.ArrayNode; Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/util/SpreadsheetBuilder.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/util/SpreadsheetBuilder.java (.../SpreadsheetBuilder.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/util/SpreadsheetBuilder.java (.../SpreadsheetBuilder.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -22,7 +22,7 @@ import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewSession; import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewUser; import org.lamsfoundation.lams.tool.peerreview.service.IPeerreviewService; -import org.lamsfoundation.lams.util.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelCell; import org.springframework.util.StringUtils; /** Creates a Spreadsheet that reports the averages, with each team/group shown on a separate worksheet. Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java =================================================================== diff -u -r4a6c446731f09a496394db2f52e60431d8160d53 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 4a6c446731f09a496394db2f52e60431d8160d53) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -45,11 +45,11 @@ import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; import org.lamsfoundation.lams.tool.peerreview.service.IPeerreviewService; import org.lamsfoundation.lams.util.DateUtil; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.util.AttributeNames; import org.lamsfoundation.lams.web.util.SessionMap; import org.springframework.beans.factory.annotation.Autowired; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -45,7 +45,7 @@ import org.lamsfoundation.lams.tool.scratchie.model.ScratchieSession; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieUser; import org.lamsfoundation.lams.tool.service.ICommonToolService; -import org.lamsfoundation.lams.util.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelCell; import org.quartz.SchedulerException; /** Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r8ec857476e891685046cce9498541644640646f0 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 8ec857476e891685046cce9498541644640646f0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -96,10 +96,10 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.NumberUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java =================================================================== diff -u -rf2ad75cef0c507a64877942631fee13efbc6ed50 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision f2ad75cef0c507a64877942631fee13efbc6ed50) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -52,11 +52,11 @@ import org.lamsfoundation.lams.tool.scratchie.service.IScratchieService; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.DateUtil; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.lamsfoundation.lams.web.util.SessionMap; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java =================================================================== diff -u -rf2ad75cef0c507a64877942631fee13efbc6ed50 -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java (.../TblMonitorController.java) (revision f2ad75cef0c507a64877942631fee13efbc6ed50) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java (.../TblMonitorController.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) @@ -54,10 +54,10 @@ import org.lamsfoundation.lams.tool.scratchie.service.IScratchieService; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieItemComparator; import org.lamsfoundation.lams.util.AlphanumComparator; -import org.lamsfoundation.lams.util.ExcelCell; -import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.excel.ExcelCell; +import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller;