Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java,v diff -u -r1.17 -r1.18 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java 16 May 2008 04:08:29 -0000 1.17 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/ExportServlet.java 4 Jun 2008 04:17:09 -0000 1.18 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java,v diff -u -r1.42 -r1.43 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java 4 Jun 2008 03:29:56 -0000 1.42 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java 4 Jun 2008 04:17:09 -0000 1.43 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/web/WEB-INF/struts-config.xml,v diff -u -r1.58 -r1.59 --- lams_tool_lamc/web/WEB-INF/struts-config.xml 17 Dec 2006 18:10:27 -0000 1.58 +++ lams_tool_lamc/web/WEB-INF/struts-config.xml 4 Jun 2008 04:17:09 -0000 1.59 @@ -21,7 +21,8 @@