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 @@
+
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
-
+
+
+
-
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;
+ }