Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java =================================================================== diff -u -r7e6ebfd5557305fbb05f12d799297e25c2d02084 -rdf91db7838416bb48e59d2582549cc7d1e1ce8e6 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java (.../ExportServlet.java) (revision 7e6ebfd5557305fbb05f12d799297e25c2d02084) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java (.../ExportServlet.java) (revision df91db7838416bb48e59d2582549cc7d1e1ce8e6) @@ -24,35 +24,28 @@ package org.lamsfoundation.lams.tool.mc.web; -import java.util.Iterator; -import java.util.List; -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.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; +import java.util.List; 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; -import org.lamsfoundation.lams.tool.mc.McComparator; import org.lamsfoundation.lams.tool.mc.pojos.McContent; -import org.lamsfoundation.lams.tool.mc.pojos.McQueContent; import org.lamsfoundation.lams.tool.mc.pojos.McQueUsr; import org.lamsfoundation.lams.tool.mc.pojos.McSession; -import org.lamsfoundation.lams.tool.mc.pojos.McUsrAttempt; import org.lamsfoundation.lams.tool.mc.service.IMcService; import org.lamsfoundation.lams.tool.mc.service.McServiceProxy; +import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.web.servlet.AbstractExportPortfolioServlet; /** *
Enables exporting portfolio for teacher and learner modes.
@@ -231,15 +224,14 @@ String fileName="lams_mcq_All_" + toolContentID + ".xls"; MessageService messageService = McServiceProxy.getMessageService(getServletContext()); + OutputStream out = null; try{ - OutputStream out = new FileOutputStream(directoryName + File.separator + fileName); + 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(); + byte[] spreadsheet = mcMonitoringAction.prepareSessionDataSpreadsheet(request, response, mcContent, mcService, messageService, "All"); + + out.write(spreadsheet); request.getSession().setAttribute(PORTFOLIO_EXPORT_DATA_FILENAME, fileName); } @@ -254,6 +246,12 @@ catch(Exception e) { logger.error("exception creating spreadsheet: ",e) ; + } + finally + { + try { + if (out != null) out.close(); + } catch (IOException e) {} } } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java =================================================================== diff -u -r6d5e0d444c49893d18708a5de50e3bc7e49a1d89 -rdf91db7838416bb48e59d2582549cc7d1e1ce8e6 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java (.../McMonitoringAction.java) (revision 6d5e0d444c49893d18708a5de50e3bc7e49a1d89) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java (.../McMonitoringAction.java) (revision df91db7838416bb48e59d2582549cc7d1e1ce8e6) @@ -4668,38 +4668,41 @@ McContent mcContent = mcService.retrieveMc(new Long(toolContentID)); - String errors = null; - OutputStream out = response.getOutputStream(); + byte[] spreadsheet = null; try { - //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, out); - + spreadsheet = prepareSessionDataSpreadsheet(request, response, mcContent, mcService, messageService, currentMonitoredToolSession); } catch (Exception e) { - log.error(e); - errors = getMessageService().getMessage("error.monitoring.spreadsheet.download") + " " + e; + log.error("Error preparing spreadsheet: ", e); + request.setAttribute("errorName", messageService.getMessage("error.monitoring.spreadsheet.download")); + request.setAttribute("errorMessage", e); + return mapping.findForward("error"); } - - if(errors != null){ + + // construct download file response header + OutputStream out = response.getOutputStream(); + 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); + + // write response + try { + out.write(spreadsheet); + out.flush(); + } finally { try { - out.write(errors.getBytes()); - out.flush(); - } catch (IOException e) { - } + if (out != null) out.close(); + } catch (IOException e) {} } return null; } /** * prepareSessionDataSpreadsheet(HttpServletRequest request, HttpServletResponse response McContent mcContent, - IMcService mcService, MessageService messageService, String currentMonitoredToolSession, OutputStream out) + IMcService mcService, MessageService messageService, String currentMonitoredToolSession) * * * prepareSessionDataSpreadsheet @@ -4709,12 +4712,11 @@ * @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) + public byte[] prepareSessionDataSpreadsheet(HttpServletRequest request, HttpServletResponse response, McContent mcContent, + IMcService mcService, MessageService messageService, String currentMonitoredToolSession) throws IOException, ServletException { //create an empty excel file @@ -4826,10 +4828,13 @@ byte[] data = bos.toByteArray(); + return data; + /* if(out != null) { out.write(data, 0, data.length); out.flush(); } + */ } /** Index: lams_tool_lamc/web/WEB-INF/struts-config.xml =================================================================== diff -u -r733cb4ac2b997bdf9f9049ed1784d93bae258607 -rdf91db7838416bb48e59d2582549cc7d1e1ce8e6 --- lams_tool_lamc/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision 733cb4ac2b997bdf9f9049ed1784d93bae258607) +++ lams_tool_lamc/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision df91db7838416bb48e59d2582549cc7d1e1ce8e6) @@ -21,7 +21,8 @@