Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java,v diff -u -r1.12 -r1.13 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java 8 Aug 2005 02:24:01 -0000 1.12 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/MonitoringAction.java 9 Aug 2005 06:06:19 -0000 1.13 @@ -22,6 +22,7 @@ */ package org.lamsfoundation.lams.tool.sbmt.web; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Hashtable; @@ -33,6 +34,11 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.util.Region; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; @@ -226,43 +232,83 @@ submitFilesService = getSubmitFilesService(); //return FileDetailsDTO list according to the given sessionID Map userFilesMap = submitFilesService.getFilesUploadedBySession(sessionID); - //construct mark HTML format? (other format?) - StringBuffer marks = new StringBuffer(); - Iterator iter = userFilesMap.values().iterator(); - Iterator dtoIter; - boolean first = true; - while(iter.hasNext()){ - List list = (List) iter.next(); - dtoIter = list.iterator(); - first = true; - while(dtoIter.hasNext()){ - FileDetailsDTO dto = (FileDetailsDTO) dtoIter.next(); - if(first){ - marks.append(dto.getUserDTO().getFirstName()).append(" ").append(dto.getUserDTO().getLastName()).append(":
"); - first = false; - } - marks.append(dto.getMarks()).append("
"); - marks.append(dto.getComments()).append("
"); - } - } - - //construct download file response header - String fileName = "marks" + sessionID+".htm"; - String mineType = "text/html"; - String header = "attachment; filename=\"" + fileName + "\";"; - response.setContentType(mineType); - response.setHeader("Content-Disposition",header); - + //construct Excel file format and download ActionMessages errors = new ActionMessages(); try { - byte[] out = marks.toString().getBytes(); - response.getOutputStream().write(out,0,out.length); + //create an empty excel file + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet("Marks"); + sheet.setColumnWidth((short)0,(short)5000); + HSSFRow row,row1=null,row2=null,row3=null,row4=null; + HSSFCell cell; + Iterator iter = userFilesMap.values().iterator(); + Iterator dtoIter; + boolean first = true; + int idx = 0; + int fileCount = 0; + while(iter.hasNext()){ + List list = (List) iter.next(); + dtoIter = list.iterator(); + first = true; + + while(dtoIter.hasNext()){ + FileDetailsDTO dto = (FileDetailsDTO) dtoIter.next(); + if(first){ + row = sheet.createRow(idx++); + cell = row.createCell((short) 0); + cell.setCellValue(dto.getUserDTO().getFirstName()+" "+dto.getUserDTO().getLastName()); + sheet.addMergedRegion(new Region(idx-1,(short)0,idx-1, (short)1)); + first = false; + row1 = sheet.createRow(idx+1); + cell = row1.createCell((short) 0); + cell.setCellValue("File name"); + row2 = sheet.createRow(idx+2); + cell = row2.createCell((short) 0); + cell.setCellValue("File description"); + row3 = sheet.createRow(idx+3); + cell = row3.createCell((short) 0); + cell.setCellValue("Marks"); + row4 = sheet.createRow(idx+4); + cell = row4.createCell((short) 0); + cell.setCellValue("Comments"); + idx += 6; + fileCount = 0; + } + ++fileCount; + sheet.setColumnWidth((short)fileCount,(short)8000); + cell = row1.createCell((short) fileCount); + cell.setCellValue(dto.getFilePath()); + + cell = row2.createCell((short) fileCount); + cell.setCellValue(dto.getFileDescription()); + + cell = row3.createCell((short) fileCount); + if(dto.getMarks() != null) + cell.setCellValue(new Double(dto.getMarks().toString()).doubleValue()); + else + cell.setCellValue(""); + + cell = row4.createCell((short) fileCount); + cell.setCellValue(dto.getComments()); + } + } + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + wb.write(bos); + //construct download file response header + String fileName = "marks" + sessionID+".xls"; + String mineType = "application/vnd.ms-excel"; + String header = "attachment; filename=\"" + fileName + "\";"; + response.setContentType(mineType); + response.setHeader("Content-Disposition",header); + + byte[] data = bos.toByteArray(); + response.getOutputStream().write(data,0,data.length); response.getOutputStream().flush(); } catch (IOException e) { log.error(e); errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("monitoring.download.error",e.toString())); } - //if download throw any exception, then display it in current page. + if(!errors.isEmpty()){ saveErrors(request,errors); request.setAttribute("toolSessionID",sessionID); Index: lams_tool_sbmt/web/authoring/authoring.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/web/authoring/authoring.jsp,v diff -u -r1.9 -r1.10 --- lams_tool_sbmt/web/authoring/authoring.jsp 8 Aug 2005 05:30:09 -0000 1.9 +++ lams_tool_sbmt/web/authoring/authoring.jsp 9 Aug 2005 06:06:19 -0000 1.10 @@ -10,35 +10,93 @@ + - + + - -
+ + + + + + + + + + + +
+ + + + + + + +
Basic
+ +
+ + + + + + + +
Advanced
+ +
+ + + + + + + +
Instructions
+ +
+ + + + +

-

+

- - - - + + + + +
:
:
+ + + + + +
+
-
+ + +

@@ -143,13 +201,26 @@
+ + + + + + + +
+ + + + +
-
+ +

- -
@@ -159,19 +230,20 @@
-
+ - - +
+ - + +
+
Index: lams_tool_sbmt/web/includes/javascript/server.js =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/web/includes/javascript/Attic/server.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_tool_sbmt/web/includes/javascript/server.js 9 Aug 2005 06:06:19 -0000 1.1 @@ -0,0 +1,118 @@ +var tabsContents = new Array(); +var tab_lefts = new Array(); +//TODO:we need to set this variable, maybe from the praent or direct from JSP/Java +var themeName = "aqua"; + +function getKey(keyStroke) { + isNetscape=(document.layers); + eventChooser = (isNetscape) ? keyStroke.which : event.keyCode; + which = String.fromCharCode(eventChooser).toLowerCase(); + if(which=="a" || which=="b" || which=="i"){ + showTab(which); + } + + +} +document.onkeypress = getKey; + +function initTabs(){ + //put all the tab contents in an array + tabsContents.push(document.getElementById('content_b')); + tabsContents.push(document.getElementById('content_a')); + tabsContents.push(document.getElementById('content_i')); + + //position the advanced (a) and instructions (i) layers over the basic (b) layer + var bTabC_x = findPosX(tabsContents[0]); + var bTabC_y = findPosY(tabsContents[0]); + + tabsContents[1].style.left = bTabC_x+'px'; + tabsContents[1].style.top = bTabC_y+'px'; + tabsContents[2].style.left = bTabC_x+'px'; + tabsContents[2].style.top = bTabC_y+'px'; + tabsContents[1].style.visibility="hidden"; + tabsContents[2].style.visibility="hidden"; +} + +function deSelectTab(tabId){ + //swap images of side parts + var tl = document.getElementById("tab_left_"+tabId); + tl.src="../images/"+themeName+"_tab_left.gif"; + tl.height = 22; + var tr = document.getElementById("tab_right_"+tabId); + tr.src="../images/"+themeName+"_tab_right.gif"; + tr.height = 22; + //swap css of centre class + var tc = document.getElementById("tab_tbl_centre_"+tabId); + tc.className="tab tabcentre"; +} + +function selectTab(tabId){ + //swap images of side parts + var tl = document.getElementById("tab_left_"+tabId); + tl.src="../images/"+themeName+"_tab_s_left.gif"; + tl.height = 25; + var tr = document.getElementById("tab_right_"+tabId); + tr.src="../images/"+themeName+"_tab_s_right.gif"; + tr.height = 25; + //swap css of centre class + var tc = document.getElementById("tab_tbl_centre_"+tabId); + tc.className="tab tabcentre_selected"; + +} + +function showTab(tabId){ + + selectTab(tabId); + + if(tabId == "i"){ + deSelectTab("a"); + deSelectTab("b"); + }else if(tabId=="a"){ + deSelectTab("i"); + deSelectTab("b"); + }else{ + deSelectTab("i"); + deSelectTab("a"); + } + + //sort out the content + var contentId = "content_"+tabId; + for(var i=0; i < tabsContents.length; i++){ + if(tabsContents[i].id==contentId){ + tabsContents[i].style.visibility="visible"; + }else{ + tabsContents[i].style.visibility="hidden"; + } + } + +} + +function findPosX(obj) { + var curleft = 0; + if(obj.offsetParent) + while(1) + { + curleft += obj.offsetLeft; + if(!obj.offsetParent) + break; + obj = obj.offsetParent; + } + else if(obj.x) + curleft += obj.x; + return curleft; + } + +function findPosY(obj) { + var curtop = 0; + if(obj.offsetParent) + while(1) + { + curtop += obj.offsetTop; + if(!obj.offsetParent) + break; + obj = obj.offsetParent; + } + else if(obj.y) + curtop += obj.y; + return curtop; + }