Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java,v diff -u -r1.16.6.2 -r1.16.6.3 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java 16 Sep 2011 16:59:54 -0000 1.16.6.2 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java 28 Sep 2011 20:59:38 -0000 1.16.6.3 @@ -138,6 +138,8 @@ public static final String ATTR_UNIT_LIST = "unitList"; + public static final String ATTR_QUESTION_REFERENCES_GRADES = "referenceGrades"; + public static final String ATTR_UNIT_COUNT = "unitCount"; public static final String ATTR_UNIT_UNIT_PREFIX = "unitUnit"; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.hbm.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Attic/Assessment.hbm.xml,v diff -u -r1.4.6.2 -r1.4.6.3 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.hbm.xml 13 Apr 2011 20:11:54 -0000 1.4.6.2 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.hbm.xml 28 Sep 2011 20:59:38 -0000 1.4.6.3 @@ -148,6 +148,26 @@ + + + + + + + + + + + questionReferences = toContent.getQuestionReferences(); + for (QuestionReference questionReference : questionReferences) { + if (questionReference.getQuestion() != null) { + questionReference.getQuestion().setCreateBy(toContent.getCreatedBy()); + } + } } return toContent; } @@ -165,7 +171,7 @@ // clone questions if (questions != null) { Iterator iter = questions.iterator(); - Set set = new TreeSet(new SequencableComparator()); + TreeSet set = new TreeSet(new SequencableComparator()); while (iter.hasNext()) { AssessmentQuestion question = (AssessmentQuestion) iter.next(); AssessmentQuestion newQuestion = (AssessmentQuestion) question.clone(); @@ -182,7 +188,17 @@ while (iter.hasNext()) { QuestionReference questionReference = (QuestionReference) iter.next(); QuestionReference newQuestionReference = (QuestionReference) questionReference.clone(); - // just clone old file without duplicate it in repository + + // update questionReferences with new cloned question + if (newQuestionReference.getQuestion() != null) { + for (AssessmentQuestion newQuestion : (Set) assessment.questions) { + if (newQuestion.getSequenceId() == newQuestionReference.getQuestion().getSequenceId()) { + newQuestionReference.setQuestion(newQuestion); + break; + } + } + } + set.add(newQuestionReference); } assessment.questionReferences = set; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java,v diff -u -r1.11.6.1 -r1.11.6.2 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java 17 Dec 2009 22:05:33 -0000 1.11.6.1 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java 28 Sep 2011 20:59:38 -0000 1.11.6.2 @@ -29,6 +29,9 @@ import java.util.Set; import java.util.TreeSet; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.log4j.Logger; import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator; @@ -40,7 +43,7 @@ * @hibernate.class table="tl_laasse10_assessment_question" * */ -public class AssessmentQuestion implements Cloneable, Sequencable { +public class AssessmentQuestion implements Cloneable, Sequencable, Comparable { private static final Logger log = Logger.getLogger(AssessmentQuestion.class); private Long uid; @@ -149,7 +152,39 @@ return obj; } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof AssessmentQuestion)) + return false; + final AssessmentQuestion genericEntity = (AssessmentQuestion) o; + + return new EqualsBuilder().append(this.getUid(), genericEntity.getUid()).isEquals(); + } + + @Override + public int compareTo(Object o) { + if ((o != null) && o instanceof AssessmentQuestion) { + AssessmentQuestion anotherQuestion = (AssessmentQuestion) o; + return (int) (sequenceId - anotherQuestion.getSequenceId()); + } else { + return 1; + } + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("uid", getUid()).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(getUid()).toHashCode(); + } + // ********************************************************** // Get/Set methods // ********************************************************** Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/QuestionReference.hbm.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Attic/QuestionReference.hbm.xml,v diff -u -r1.1.2.1 -r1.1.2.2 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/QuestionReference.hbm.xml 16 Sep 2011 16:59:53 -0000 1.1.2.1 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/QuestionReference.hbm.xml 28 Sep 2011 20:59:38 -0000 1.1.2.2 @@ -28,7 +28,7 @@ deletedReferences = getDeletedQuestionReferences(sessionMap); + iter = deletedReferences.iterator(); + while (iter.hasNext()) { + QuestionReference reference = (QuestionReference) iter.next(); + iter.remove(); + if (reference.getUid() != null) + service.deleteQuestionReference(reference.getUid()); + } + + // delete Questions from database. List deletedQuestionList = getDeletedQuestionList(sessionMap); iter = deletedQuestionList.iterator(); while (iter.hasNext()) { @@ -615,27 +625,9 @@ } // Handle question references - SortedSet questionReferences = getQuestionReferences(sessionMap); - for (QuestionReference questionReference : questionReferences) { - try { - int grade = (int) WebUtil.readLongParam(request, AssessmentConstants.PARAM_GRADE + questionReference.getSequenceId()); - questionReference.setDefaultGrade(grade); - } catch (Exception e) { - log.debug(e.getMessage()); - } - } + Set questionReferences = updateQuestionReferencesGrades(request, sessionMap, true); assessmentPO.setQuestionReferences(questionReferences); - // delete instructino file from database. - List deletedReferences = getDeletedQuestionReferences(sessionMap); - iter = deletedReferences.iterator(); - while (iter.hasNext()) { - QuestionReference reference = (QuestionReference) iter.next(); - iter.remove(); - if (reference.getUid() != null) - service.deleteQuestionReference(reference.getUid()); - } - // handle assessment question attachment file: List delQuestionAttList = getDeletedQuestionAttachmentList(sessionMap); iter = delQuestionAttList.iterator(); @@ -714,6 +706,7 @@ AssessmentForm assessmentForm = (AssessmentForm) form; // get back sessionMAP SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(assessmentForm.getSessionMapID()); + updateQuestionReferencesGrades(request, sessionMap, true); FormFile file; if (StringUtils.equals(IToolContentHandler.TYPE_OFFLINE, type)) @@ -838,6 +831,7 @@ HttpServletResponse response) { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + updateQuestionReferencesGrades(request, sessionMap, false); String contentFolderID = (String) sessionMap.get(AttributeNames.PARAM_CONTENT_FOLDER_ID); AssessmentQuestionForm questionForm = (AssessmentQuestionForm) form; questionForm.setSessionMapID(sessionMapID); @@ -888,6 +882,7 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + updateQuestionReferencesGrades(request, sessionMap, false); String contentFolderID = (String) sessionMap.get(AttributeNames.PARAM_CONTENT_FOLDER_ID); int questionIdx = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_INDEX), -1); @@ -950,6 +945,7 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + updateQuestionReferencesGrades(request, sessionMap, false); int questionIdx = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_INDEX), -1); if (questionIdx != -1) { @@ -961,6 +957,26 @@ // add to delList List delList = getDeletedQuestionList(sessionMap); delList.add(question); + + //remove according questionReference, if exists + SortedSet questionReferences = getQuestionReferences(sessionMap); + QuestionReference questionReferenceToDelete = null; + for (QuestionReference questionReference: questionReferences) { + if ((questionReference.getQuestion() != null) + && (questionReference.getQuestion().getSequenceId() == question.getSequenceId())) { + questionReferenceToDelete = questionReference; + } + } + if (questionReferenceToDelete != null) { + List rRefList = new ArrayList(questionReferences); + rRefList.remove(questionReferenceToDelete.getSequenceId() - 1); + questionReferences.clear(); + questionReferences.addAll(rRefList); + // add to delList + List delReferencesList = getDeletedQuestionReferences(sessionMap); + delReferencesList.add(questionReferenceToDelete); + } + } reinitializeAvailableQuestions(sessionMap); @@ -1001,6 +1017,7 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + updateQuestionReferencesGrades(request, sessionMap, false); int questionIdx = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_INDEX), -1); if (questionIdx != -1) { @@ -1043,6 +1060,7 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + updateQuestionReferencesGrades(request, sessionMap, false); SortedSet references = getQuestionReferences(sessionMap); int questionIdx = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_INDEX), -1); @@ -1099,6 +1117,7 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + updateQuestionReferencesGrades(request, sessionMap, false); int questionReferenceIdx = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_REFERENCE_INDEX), -1); if (questionReferenceIdx != -1) { @@ -1150,6 +1169,7 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + updateQuestionReferencesGrades(request, sessionMap, false); int questionReferenceIdx = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_REFERENCE_INDEX), -1); if (questionReferenceIdx != -1) { @@ -1705,6 +1725,29 @@ return mode; } + private Set updateQuestionReferencesGrades(HttpServletRequest request, SessionMap sessionMap, boolean isFormSubmit) { + Map paramMap = splitRequestParameter(request, AssessmentConstants.ATTR_QUESTION_REFERENCES_GRADES); + + SortedSet questionReferences = getQuestionReferences(sessionMap); + for (QuestionReference questionReference : questionReferences) { + try { + int grade; + if (isFormSubmit) { + grade = WebUtil.readIntParam(request, AssessmentConstants.PARAM_GRADE + questionReference.getSequenceId()); + } else { + String gradeStr = paramMap.get(AssessmentConstants.PARAM_GRADE + questionReference.getSequenceId()); + grade = new Integer(gradeStr); + } + + questionReference.setDefaultGrade(grade); + } catch (Exception e) { + log.debug(e.getMessage()); + } + } + + return questionReferences; + } + /** * Get answer options from HttpRequest * @@ -1891,6 +1934,10 @@ */ private Map splitRequestParameter(HttpServletRequest request, String parameterName) { String list = request.getParameter(parameterName); + if (list == null) { + return null; + } + String[] params = list.split("&"); Map paramMap = new HashMap(); String[] pair; Index: lams_tool_assessment/web/pages/authoring/basic.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/web/pages/authoring/basic.jsp,v diff -u -r1.6.8.3 -r1.6.8.4 --- lams_tool_assessment/web/pages/authoring/basic.jsp 16 Sep 2011 16:59:54 -0000 1.6.8.3 +++ lams_tool_assessment/web/pages/authoring/basic.jsp 28 Sep 2011 20:59:38 -0000 1.6.8.4 @@ -17,7 +17,8 @@ url, { questionIndex: idx, - sessionMapID: "${sessionMapID}" + sessionMapID: "${sessionMapID}", + referenceGrades: serializeReferenceGrades() }, function(){ refreshThickbox(); @@ -31,7 +32,8 @@ url, { questionIndex: idx, - sessionMapID: "${sessionMapID}" + sessionMapID: "${sessionMapID}", + referenceGrades: serializeReferenceGrades() }, function(){ refreshThickbox(); @@ -44,7 +46,8 @@ url, { questionIndex: idx, - sessionMapID: "${sessionMapID}" + sessionMapID: "${sessionMapID}", + referenceGrades: serializeReferenceGrades() }, function(){ refreshThickbox(); @@ -60,7 +63,8 @@ url, { questionIndex: idx, - sessionMapID: "${sessionMapID}" + sessionMapID: "${sessionMapID}", + referenceGrades: serializeReferenceGrades() }, function(){ refreshThickbox(); @@ -73,7 +77,8 @@ url, { questionReferenceIndex: idx, - sessionMapID: "${sessionMapID}" + sessionMapID: "${sessionMapID}", + referenceGrades: serializeReferenceGrades() }, function(){ refreshThickbox(); @@ -86,7 +91,8 @@ url, { questionReferenceIndex: idx, - sessionMapID: "${sessionMapID}" + sessionMapID: "${sessionMapID}", + referenceGrades: serializeReferenceGrades() }, function(){ refreshThickbox(); @@ -99,13 +105,21 @@ url, { questionReferenceIndex: idx, - sessionMapID: "${sessionMapID}" + sessionMapID: "${sessionMapID}", + referenceGrades: serializeReferenceGrades() }, function(){ refreshThickbox(); } ); } + function serializeReferenceGrades(){ + var serializedGrades = ""; + $("[name^=grade]").each(function() { + serializedGrades += "&" + this.name + "=" + this.value; + }); + return serializedGrades; + } function exportQuestions(){ var reqIDVar = new Date(); @@ -134,7 +148,7 @@ function createNewQuestionInitHref() { var questionTypeDropdown = document.getElementById("questionType"); var questionType = questionTypeDropdown.selectedIndex + 1; - var newQuestionInitHref = "${newQuestionInitUrl}&questionType=" + questionType + "&KeepThis=true&TB_iframe=true&height=540&width=850&modal=true"; + var newQuestionInitHref = "${newQuestionInitUrl}&questionType=" + questionType + "&referenceGrades=" + encodeURIComponent(serializeReferenceGrades()) + "&KeepThis=true&TB_iframe=true&height=540&width=850&modal=true"; $("#newQuestionInitHref").attr("href", newQuestionInitHref) }; function refreshThickbox(){ Index: lams_tool_assessment/web/pages/authoring/parts/questionlist.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/web/pages/authoring/parts/questionlist.jsp,v diff -u -r1.4.8.1 -r1.4.8.2 --- lams_tool_assessment/web/pages/authoring/parts/questionlist.jsp 16 Sep 2011 16:59:54 -0000 1.4.8.1 +++ lams_tool_assessment/web/pages/authoring/parts/questionlist.jsp 28 Sep 2011 20:59:38 -0000 1.4.8.2 @@ -65,7 +65,7 @@ - + Index: lams_tool_assessment/web/pages/monitoring/summary.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/web/pages/monitoring/summary.jsp,v diff -u -r1.9.6.2 -r1.9.6.3 --- lams_tool_assessment/web/pages/monitoring/summary.jsp 13 Apr 2011 20:11:54 -0000 1.9.6.2 +++ lams_tool_assessment/web/pages/monitoring/summary.jsp 28 Sep 2011 20:59:39 -0000 1.9.6.3 @@ -12,26 +12,20 @@ jQuery("#list${summary.sessionId}").jqGrid({ datatype: "local", height: 'auto', - width: 630, + width: 670, shrinkToFit: false, colNames:['#', 'userId', 'sessionId', "", - - "${question.title}", - ""], colModel:[ {name:'id',index:'id', width:20, sorttype:"int"}, {name:'userId',index:'userId', width:0}, {name:'sessionId',index:'sessionId', width:0}, - {name:'userName',index:'userName', width:100}, - - {name:'${question.uid}', index:'${question.uid}', width:80, align:"right", sorttype:"float"}, - + {name:'userName',index:'userName', width:200}, {name:'total',index:'total', width:50,align:"right",sorttype:"float", formatter:'number', formatoptions:{decimalPlaces: 2}} ], @@ -71,38 +65,17 @@ userId:"${assessmentResult.user.userId}", sessionId:"${assessmentResult.user.session.sessionId}", userName:"${assessmentResult.user.lastName}, ${assessmentResult.user.firstName}", - - - - ${questionResult.assessmentQuestion.uid}:"", - - - - - ${question.uid}:"-", - - - - total:"" }); - - - - - - - - - - + + var oldValue = 0; jQuery("#userSummary${summary.sessionId}").jqGrid({ datatype: "local", gridstate:"hidden", //hiddengrid:true, height: 90, - width: ${width}, + width: 670, shrinkToFit: true, caption: "", colNames:['#', @@ -124,16 +97,16 @@ cellurl: '', cellEdit: true, + afterEditCell: function (rowid,name,val,iRow,iCol){ + oldValue = eval(val); + }, afterSaveCell : function (rowid,name,val,iRow,iCol){ - //var questionResultUid = jQuery("#session${session.sessionId}").getCell(rowid, 'questionResultUid'); || (questionResultUid=="") if (isNaN(val)) { jQuery("#userSummary${summary.sessionId}").restoreCell(iRow,iCol); } else { var parentSelectedRowId = jQuery("#list${summary.sessionId}").getGridParam("selrow"); - var previousValue = eval(jQuery("#list${summary.sessionId}").getCell(parentSelectedRowId, eval(rowid)+3)); var previousTotal = eval(jQuery("#list${summary.sessionId}").getCell(parentSelectedRowId, 'total')); - jQuery("#list${summary.sessionId}").setCell(parentSelectedRowId, eval(rowid)+3, val, {}, {}); - jQuery("#list${summary.sessionId}").setCell(parentSelectedRowId, 'total', previousTotal - previousValue + eval(val), {}, {}); + jQuery("#list${summary.sessionId}").setCell(parentSelectedRowId, 'total', previousTotal - oldValue + eval(val), {}, {}); } }, beforeSubmitCell : function (rowid,name,val,iRow,iCol){