Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java =================================================================== diff -u -rdea5004371152a95bec9fc2db87a455fa84c0887 -r7e6ebfd5557305fbb05f12d799297e25c2d02084 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java (.../McAppConstants.java) (revision dea5004371152a95bec9fc2db87a455fa84c0887) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java (.../McAppConstants.java) (revision 7e6ebfd5557305fbb05f12d799297e25c2d02084) @@ -183,8 +183,8 @@ public static final String MAP_FEEDBACK_CORRECT ="mapFeedbackCorrect"; public static final String IS_PORTFOLIO_EXPORT ="isPortfolioExport"; public static final String PORTFOLIO_EXPORT_MODE ="portfolioExportMode"; + public static final String PORTFOLIO_EXPORT_DATA_FILENAME ="portfolioExportDataFileName"; - public static final String SELECTED_QUESTION ="selectedQuestion"; public static final String SELECTED_QUESTION_INDEX ="selectedQuestionIndex"; public static final String DEFAULT_QUESTION_UID ="defaultQuestionUid"; Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java =================================================================== diff -u -re7046600ee8bfa53d053e0aee33a16b52ad0e8e2 -r7e6ebfd5557305fbb05f12d799297e25c2d02084 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java (.../ExportServlet.java) (revision e7046600ee8bfa53d053e0aee33a16b52ad0e8e2) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java (.../ExportServlet.java) (revision 7e6ebfd5557305fbb05f12d799297e25c2d02084) @@ -29,12 +29,19 @@ import java.util.Map; import java.util.TreeMap; +import java.io.File; +import java.io.OutputStream; +import java.io.FileOutputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.mc.McAppConstants; import org.lamsfoundation.lams.tool.mc.McApplicationException; @@ -208,6 +215,46 @@ request.getSession().setAttribute(PORTFOLIO_EXPORT_MODE, "teacher"); mcMonitoringAction.prepareReflectionData(request, content, mcService, null, true); - logger.debug("ending teacher mode: "); + + writeOutSessionData(request, response, content, mcService, directoryName); + + logger.debug("ending teacher mode: "); } + + /** + * creates create spreadsheet of class data + * @param request + * @param response + * @param directoryName + */ + public void writeOutSessionData(HttpServletRequest request, HttpServletResponse response, McContent mcContent, IMcService mcService, String directoryName) { + String fileName="lams_mcq_All_" + toolContentID + ".xls"; + MessageService messageService = McServiceProxy.getMessageService(getServletContext()); + + try{ + OutputStream out = new FileOutputStream(directoryName + File.separator + fileName); + + String errors = null; + + McMonitoringAction mcMonitoringAction= new McMonitoringAction(); + mcMonitoringAction.prepareSessionDataSpreadsheet(request, response, mcContent, mcService, messageService, "All", out); + + out.close(); + + request.getSession().setAttribute(PORTFOLIO_EXPORT_DATA_FILENAME, fileName); + } + catch(FileNotFoundException e) + { + logger.error("Exception creating spreadsheet: ",e) ; + } + catch(IOException e) + { + logger.error("exception creating spreadsheet: ",e) ; + } + catch(Exception e) + { + logger.error("exception creating spreadsheet: ",e) ; + } + + } } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java =================================================================== diff -u -r602d14e8850480e62c23b1c981c4157b83702306 -r7e6ebfd5557305fbb05f12d799297e25c2d02084 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java (.../McMonitoringAction.java) (revision 602d14e8850480e62c23b1c981c4157b83702306) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java (.../McMonitoringAction.java) (revision 7e6ebfd5557305fbb05f12d799297e25c2d02084) @@ -23,6 +23,7 @@ package org.lamsfoundation.lams.tool.mc.web; import java.io.ByteArrayOutputStream; +import java.io.OutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; @@ -4645,6 +4646,8 @@ logger.debug("ending setupCommonScreenData, mcContent " + mcContent); } + + /** * ActionForward downloadMarks(ActionMapping mapping, ActionForm form, @@ -4662,7 +4665,7 @@ * @throws ServletException */ public ActionForward downloadMarks(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) - throws IOException,ServletException + throws IOException, ServletException { MessageService messageService = getMessageService(); @@ -4674,169 +4677,168 @@ McContent mcContent = mcService.retrieveMc(new Long(toolContentID)); - String errors = null; - + String errors = null; + try { - //create an empty excel file - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet("Marks"); + //construct download file response header + String fileName = "lams_mcq_" + currentMonitoredToolSession+".xls"; + String mineType = "application/vnd.ms-excel"; + String header = "attachment; filename=\"" + fileName + "\";"; + response.setContentType(mineType); + response.setHeader("Content-Disposition",header); + + prepareSessionDataSpreadsheet(request, response, mcContent, mcService, messageService, currentMonitoredToolSession, response.getOutputStream()); - HSSFRow row; - HSSFCell cell; + } catch (Exception e) { + log.error(e); + errors = new ActionMessage("monitoring.download.error", e.toString()).toString(); + } + + if(errors != null){ + try { + PrintWriter out = response.getWriter(); + out.write(errors); + out.flush(); + } catch (IOException e) { + } + } + + return null; + } + + /** + * prepareSessionDataSpreadsheet(HttpServletRequest request, HttpServletResponse response McContent mcContent, + IMcService mcService, MessageService messageService, String currentMonitoredToolSession, OutputStream out) + * + * + * prepareSessionDataSpreadsheet + * + * @param request + * @param response + * @param mcContent + * @param mcService + * @param currentMonitoredToolSession + * @param errors + * + * @return data to write out + */ + public void prepareSessionDataSpreadsheet(HttpServletRequest request, HttpServletResponse response, McContent mcContent, + IMcService mcService, MessageService messageService, String currentMonitoredToolSession, OutputStream out) + throws IOException, ServletException + { + //create an empty excel file + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet("Marks"); - List listMonitoredAnswersContainerDTO=MonitoringUtil.buildGroupsQuestionData(request, mcContent, mcService); - List listMonitoredMarksContainerDTO=MonitoringUtil.buildGroupsMarkData(request, mcContent, mcService); + HSSFRow row; + HSSFCell cell; + + List listMonitoredAnswersContainerDTO=MonitoringUtil.buildGroupsQuestionData(request, mcContent, mcService); + List listMonitoredMarksContainerDTO=MonitoringUtil.buildGroupsMarkData(request, mcContent, mcService); - Map mapOptionsContent= new TreeMap(new McComparator()); - mapOptionsContent.clear(); + Map mapOptionsContent= new TreeMap(new McComparator()); + mapOptionsContent.clear(); - logger.debug("setting existing content data from the db"); + logger.debug("setting existing content data from the db"); - Iterator queIterator= mcContent.getMcQueContents().iterator(); - Long mapIndex=new Long(1); + Iterator queIterator= mcContent.getMcQueContents().iterator(); + Long mapIndex=new Long(1); - short idx = (short) 0; - - /* - while (queIterator.hasNext()) - { - McQuestionContentDTO mcContentDTO=new McQuestionContentDTO(); - - McQueContent mcQueContent=(McQueContent) queIterator.next(); - if (mcQueContent != null) - { - logger.debug("question: " + mcQueContent.getQuestion()); - - row = sheet.createRow(idx); - - cell = row.createCell((short) 1); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue("Question " + idx); - - cell = row.createCell((short) 3); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue(mcQueContent.getQuestion()); - - mapOptionsContent.put(mapIndex.toString(),mcQueContent.getQuestion()); - - mapIndex=new Long(mapIndex.longValue()+1); - } - } - */ + short idx = (short) 0; - Iterator marksIterator = listMonitoredMarksContainerDTO.iterator(); + Iterator marksIterator = listMonitoredMarksContainerDTO.iterator(); - while(marksIterator.hasNext()) { + while(marksIterator.hasNext()) { - McSessionMarkDTO mcSessionMarkDTO = (McSessionMarkDTO) marksIterator.next(); - Map usersMarksMap = mcSessionMarkDTO.getUserMarks(); + McSessionMarkDTO mcSessionMarkDTO = (McSessionMarkDTO) marksIterator.next(); + Map usersMarksMap = mcSessionMarkDTO.getUserMarks(); + + String currentSessionId = mcSessionMarkDTO.getSessionId(); + String currentSessionName = mcSessionMarkDTO.getSessionName(); + + if(currentMonitoredToolSession.equals("All") || currentMonitoredToolSession.equals(currentSessionId)) { - String currentSessionId = mcSessionMarkDTO.getSessionId(); - String currentSessionName = mcSessionMarkDTO.getSessionName(); - - if(currentMonitoredToolSession.equals("All") || currentMonitoredToolSession.equals(currentSessionId)) { - - row = sheet.createRow(idx++); + row = sheet.createRow(idx++); - cell = row.createCell((short) 0); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue(messageService.getMessage("group.label")); + cell = row.createCell((short) 0); + cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(messageService.getMessage("group.label")); - cell = row.createCell((short) 1); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue(currentSessionName); + cell = row.createCell((short) 1); + cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(currentSessionName); - idx++; - int count = 0; + idx++; + int count = 0; - row = sheet.createRow(idx++); + row = sheet.createRow(idx++); - cell = row.createCell((short) count++); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue(messageService.getMessage("label.learner")); + cell = row.createCell((short) count++); + cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(messageService.getMessage("label.learner")); - cell = row.createCell((short) count++); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue(messageService.getMessage("label.monitoring.downloadMarks.username")); + cell = row.createCell((short) count++); + cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(messageService.getMessage("label.monitoring.downloadMarks.username")); - Iterator answersIterator = listMonitoredAnswersContainerDTO.iterator(); - - while(answersIterator.hasNext()) { - McMonitoredAnswersDTO mcMonitoredAnswersDTO = (McMonitoredAnswersDTO) answersIterator.next(); + Iterator answersIterator = listMonitoredAnswersContainerDTO.iterator(); + + while(answersIterator.hasNext()) { + McMonitoredAnswersDTO mcMonitoredAnswersDTO = (McMonitoredAnswersDTO) answersIterator.next(); - cell = row.createCell((short) count++); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue(messageService.getMessage("label.monitoring.downloadMarks.question.mark", new Object[] {count-1, mcMonitoredAnswersDTO.getMark()})); - } + cell = row.createCell((short) count++); + cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(messageService.getMessage("label.monitoring.downloadMarks.question.mark", new Object[] {count-1, mcMonitoredAnswersDTO.getMark()})); + } - cell = row.createCell((short) count++); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue(messageService.getMessage("label.total")); + cell = row.createCell((short) count++); + cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(messageService.getMessage("label.total")); - Iterator userMarkIterator = usersMarksMap.values().iterator(); + Iterator userMarkIterator = usersMarksMap.values().iterator(); - while(userMarkIterator.hasNext()) { - row = sheet.createRow(idx++); - count = 0; + while(userMarkIterator.hasNext()) { + row = sheet.createRow(idx++); + count = 0; - McUserMarkDTO userMark = (McUserMarkDTO) userMarkIterator.next(); - String currentUserSessionId = userMark.getSessionId(); + McUserMarkDTO userMark = (McUserMarkDTO) userMarkIterator.next(); + String currentUserSessionId = userMark.getSessionId(); - cell = row.createCell((short) count++); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue(userMark.getFullName()); + cell = row.createCell((short) count++); + cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(userMark.getFullName()); - cell = row.createCell((short) count++); - cell.setEncoding(HSSFCell.ENCODING_UTF_16); - cell.setCellValue(userMark.getUserName()); + cell = row.createCell((short) count++); + cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(userMark.getUserName()); - Integer[] marks = userMark.getMarks(); - for(int i=0; i   () - + @@ -51,7 +51,9 @@

- + +

+