Index: lams_tool_assessment/conf/xdoclet/struts-actions.xml =================================================================== diff -u -rcc1b2b3fdc49088abf515c55bc8533c762e95412 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision cc1b2b3fdc49088abf515c55bc8533c762e95412) +++ lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -16,7 +16,6 @@ scope="request" parameter="definelater" validate="false"> - - - Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java =================================================================== diff -u -ref851974c4dc3f5468b188fab9997a37b73c0e50 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision ef851974c4dc3f5468b188fab9997a37b73c0e50) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -230,8 +230,6 @@ public static final String ERROR_MSG_DEFAULT_GRADE_WRONG_FORMAT = "error.default.grade.wrong.format"; public static final String ERROR_MSG_PENALTY_FACTOR_WRONG_FORMAT = "error.penalty.factor.wrong.format"; - - public static final String PAGE_EDITABLE = "isPageEditable"; public static final String ATTR_USER_UID = "userUid"; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml =================================================================== diff -u -ref851974c4dc3f5468b188fab9997a37b73c0e50 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision ef851974c4dc3f5468b188fab9997a37b73c0e50) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -151,7 +151,8 @@ PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception - PROPAGATION_REQUIRED,+java.lang.Exception + PROPAGATION_REQUIRED,+java.lang.Exception + Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionDAO.java =================================================================== diff -u -rc56857991e269aa7f5bd250a05b52c767a9957ad -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionDAO.java (.../AssessmentQuestionDAO.java) (revision c56857991e269aa7f5bd250a05b52c767a9957ad) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionDAO.java (.../AssessmentQuestionDAO.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -38,5 +38,7 @@ List getAuthoringQuestions(Long assessmentUid); AssessmentQuestion getByUid(Long assessmentQuestionUid); + + void evict(Object o); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionDAOHibernate.java =================================================================== diff -u -rc56857991e269aa7f5bd250a05b52c767a9957ad -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionDAOHibernate.java (.../AssessmentQuestionDAOHibernate.java) (revision c56857991e269aa7f5bd250a05b52c767a9957ad) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionDAOHibernate.java (.../AssessmentQuestionDAOHibernate.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -41,5 +41,9 @@ public AssessmentQuestion getByUid(Long assessmentQuestionUid) { return (AssessmentQuestion) this.getObject(AssessmentQuestion.class, assessmentQuestionUid); } + + public void evict(Object o) { + getHibernateTemplate().evict(o); + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20140428.sql =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20140428.sql (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20140428.sql (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -0,0 +1,16 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +----------------------Put all sql statements below here------------------------- + +-- LDEV-3224 Ability to change, add, remove questions even after student have reached it +ALTER TABLE tl_laasse10_assessment DROP COLUMN content_in_use; + +UPDATE lams_tool SET tool_version='20140428' WHERE tool_signature='laasse10'; + +----------------------Put all sql statements above here------------------------- + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.java =================================================================== diff -u -ref851974c4dc3f5468b188fab9997a37b73c0e50 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.java (.../Assessment.java) (revision ef851974c4dc3f5468b188fab9997a37b73c0e50) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.java (.../Assessment.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -86,8 +86,6 @@ private boolean defineLater; - private boolean contentInUse; - private boolean notifyTeachersOnAttemptCompletion; private boolean reflectOnActivity; @@ -447,18 +445,6 @@ } /** - * @hibernate.property column="content_in_use" - * @return - */ - public boolean isContentInUse() { - return contentInUse; - } - - public void setContentInUse(boolean contentInUse) { - this.contentInUse = contentInUse; - } - - /** * @hibernate.property column="define_later" * @return */ Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java =================================================================== diff -u -r6e5d1ff4891084bef035cb865c1a395e3eb49ab0 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision 6e5d1ff4891084bef035cb865c1a395e3eb49ab0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -84,11 +84,9 @@ private boolean allowRichEditor; private Date createDate; + private AssessmentUser createBy; - // *********************************************** - // Non persistant fields: - private Set options; private Set units; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java =================================================================== diff -u -r2b2840334b7e75371d9fcb6c094697af11d510c3 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 2b2840334b7e75371d9fcb6c094697af11d510c3) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -28,6 +28,10 @@ import java.util.LinkedHashSet; import java.util.Set; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + /** * Assessment Question Result * @@ -59,6 +63,24 @@ optionAnswers = new LinkedHashSet(); } + @Override + public int hashCode() { + return new HashCodeBuilder().append(getUid()).toHashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof AssessmentQuestionResult)) { + return false; + } + + final AssessmentQuestionResult genericEntity = (AssessmentQuestionResult) obj; + return new EqualsBuilder().append(this.getUid(), genericEntity.getUid()).isEquals(); + } + /** * @hibernate.id generator-class="native" type="java.lang.Long" column="uid" * @return Returns the result Uid. Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentImportContentVersionFilter.java =================================================================== diff -u -ref851974c4dc3f5468b188fab9997a37b73c0e50 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentImportContentVersionFilter.java (.../AssessmentImportContentVersionFilter.java) (revision ef851974c4dc3f5468b188fab9997a37b73c0e50) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentImportContentVersionFilter.java (.../AssessmentImportContentVersionFilter.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -40,4 +40,11 @@ this.removeField(Assessment.class, "offlineInstructions"); this.removeField(Assessment.class, "attachments"); } + + /** + * Import 20140102 version content to 20140428 version tool server. + */ + public void up20140102To20140428() { + this.removeField(Assessment.class, "contentInUse"); + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java =================================================================== diff -u -r2b2840334b7e75371d9fcb6c094697af11d510c3 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision 2b2840334b7e75371d9fcb6c094697af11d510c3) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -195,10 +195,13 @@ AssessmentResult assessmentResult = assessmentService.getLastFinishedAssessmentResult(assessment.getUid(), learnerId); float questionScore = 0; - for (AssessmentQuestionResult questionResult : assessmentResult.getQuestionResults()) { - if (questionResult.getAssessmentQuestion().getSequenceId() == questionSequenceId) { - questionScore = questionResult.getMark(); - break; + + if (assessmentResult != null) { + for (AssessmentQuestionResult questionResult : assessmentResult.getQuestionResults()) { + if (questionResult.getAssessmentQuestion().getSequenceId() == questionSequenceId) { + questionScore = questionResult.getMark(); + break; + } } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r5b6e51b5d96619f619209830fdab0ed1ef572c05 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 5b6e51b5d96619f619209830fdab0ed1ef572c05) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -25,6 +25,7 @@ import java.sql.Timestamp; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Hashtable; @@ -39,7 +40,9 @@ import java.util.TreeSet; import java.util.regex.Pattern; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.gradebook.service.IGradebookService; @@ -87,7 +90,6 @@ import org.lamsfoundation.lams.tool.assessment.util.AssessmentQuestionResultComparator; import org.lamsfoundation.lams.tool.assessment.util.AssessmentSessionComparator; import org.lamsfoundation.lams.tool.assessment.util.AssessmentToolContentHandler; -import org.lamsfoundation.lams.tool.assessment.util.ReflectDTOComparator; import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.SessionDataExistsException; @@ -329,6 +331,16 @@ public void saveOrUpdateAssessment(Assessment assessment) { assessmentDao.saveObject(assessment); } + + @Override + public void releaseQuestionsAndReferencesFromCache(Assessment assessment) { + for (AssessmentQuestion question : (Set)assessment.getQuestions()) { + assessmentQuestionDao.evict(question); + } + for (QuestionReference reference : (Set)assessment.getQuestionReferences()) { + assessmentQuestionDao.evict(reference); + } + } @Override public void deleteAssessmentQuestion(Long uid) { @@ -938,6 +950,256 @@ } @Override + public void recalculateUserAnswers(Assessment assessment, Set oldQuestions, Set newQuestions, + Set oldReferences, Set newReferences, List deletedReferences) { + + //create list of modified questions + List modifiedQuestions = new ArrayList(); + for (AssessmentQuestion oldQuestion : oldQuestions) { + for (AssessmentQuestion newQuestion : newQuestions) { + if (oldQuestion.getUid().equals(newQuestion.getUid())) { + + boolean isQuestionModified = false; + + //title or question is different + if (!oldQuestion.getTitle().equals(newQuestion.getTitle()) + || !oldQuestion.getQuestion().equals(newQuestion.getQuestion()) + || (oldQuestion.getCorrectAnswer() != newQuestion.getCorrectAnswer())) { + isQuestionModified = true; + } + + //options is different + Set oldOptions = oldQuestion.getOptions(); + Set newOptions = newQuestion.getOptions(); + for (AssessmentQuestionOption oldOption : oldOptions) { + for (AssessmentQuestionOption newOption : newOptions) { + if (oldOption.getUid().equals(newOption.getUid())) { + + if (((oldQuestion.getType() == AssessmentConstants.QUESTION_TYPE_ORDERING) && (oldOption + .getSequenceId() != newOption.getSequenceId())) + || !StringUtils.equals(oldOption.getQuestion(), newOption.getQuestion()) + || !StringUtils.equals(oldOption.getOptionString(), newOption.getOptionString()) + || (oldOption.getOptionFloat() != newOption.getOptionFloat()) + || (oldOption.getAcceptedError() != newOption.getAcceptedError()) + || (oldOption.getGrade() != newOption.getGrade())) { + isQuestionModified = true; + } + } + } + } + + if (isQuestionModified) { + modifiedQuestions.add(newQuestion); + } + } + } + } + + //create list of modified references + //modifiedReferences holds pairs newReference -> oldReference.getDefaultGrade() + Map modifiedReferences= new HashMap(); + for (QuestionReference oldReference : oldReferences) { + for (QuestionReference newReference : newReferences) { + if (oldReference.getUid().equals(newReference.getUid()) + && (oldReference.getDefaultGrade() != newReference.getDefaultGrade())) { + modifiedReferences.put(newReference, oldReference.getDefaultGrade()); + } + } + } + + //create list of added references + List addedReferences= new ArrayList(); + for (QuestionReference newReference : newReferences) { + boolean isNewReferenceMetInOldReferences = false; + + for (QuestionReference oldReference : oldReferences) { + if (oldReference.getUid().equals(newReference.getUid())) { + isNewReferenceMetInOldReferences = true; + } + } + + //if the new reference was not met in old references then it's the newly added reference + if (!isNewReferenceMetInOldReferences) { + addedReferences.add(newReference); + } + } + + List sessionList = assessmentSessionDao.getByContentId(assessment.getContentId()); + for (AssessmentSession session : sessionList) { + Long toolSessionId = session.getSessionId(); + Set sessionUsers = session.getAssessmentUsers(); + + for (AssessmentUser user : sessionUsers) { + + //get all finished user results + List assessmentResults = assessmentResultDao.getAssessmentResults( + assessment.getUid(), user.getUserId()); + AssessmentResult lastAssessmentResult = (assessmentResults.isEmpty()) ? null : assessmentResults + .get(assessmentResults.size() - 1); + + for (AssessmentResult assessmentResult : assessmentResults) { + + float assessmentMark = assessmentResult.getGrade(); + int assessmentMaxMark = assessmentResult.getMaximumGrade(); + + Set questionAnswers = assessmentResult.getQuestionResults(); + Iterator iter = questionAnswers.iterator(); + while (iter.hasNext()) { + AssessmentQuestionResult questionAnswer = iter.next(); + AssessmentQuestion question = questionAnswer.getAssessmentQuestion(); + + //[+] if the question reference was removed + for (QuestionReference deletedReference : deletedReferences) { + if (!deletedReference.isRandomQuestion() + && question.getUid().equals(deletedReference.getQuestion().getUid())) { + assessmentMark -= questionAnswer.getMark(); + assessmentMaxMark -= deletedReference.getDefaultGrade(); + iter.remove(); + assessmentQuestionResultDao.removeObject(AssessmentQuestionResult.class, + questionAnswer.getUid()); + break; + } + } + + //[+] if the question reference mark is modified + for (QuestionReference modifiedReference : modifiedReferences.keySet()) { + if (!modifiedReference.isRandomQuestion() + && question.getUid().equals(modifiedReference.getQuestion().getUid())) { + int newReferenceGrade = modifiedReference.getDefaultGrade(); + int oldReferenceGrade = modifiedReferences.get(modifiedReference); + + // update question answer's mark + Float oldQuestionAnswerMark = questionAnswer.getMark(); + float newQuestionAnswerMark = oldQuestionAnswerMark * newReferenceGrade + / oldReferenceGrade; + questionAnswer.setMark(newQuestionAnswerMark); + questionAnswer.setMaxMark((float) newReferenceGrade); + assessmentQuestionResultDao.saveObject(questionAnswer); + + assessmentMark += newQuestionAnswerMark - oldQuestionAnswerMark; + assessmentMaxMark += newReferenceGrade - oldReferenceGrade; + break; + } + + } + + //[+] if the question is modified + for (AssessmentQuestion modifiedQuestion : modifiedQuestions) { + if (question.getUid().equals(modifiedQuestion.getUid())) { + assessmentMark -= questionAnswer.getMark(); + iter.remove(); + assessmentQuestionResultDao.removeObject(AssessmentQuestionResult.class, + questionAnswer.getUid()); + break; + } + } + + //[+] doing nothing if the question was removed - as it will be in the list of removed references + //[+] doing nothing if the new question was added + + } + + //find all question answers from random question reference + ArrayList nonRandomQuestionAnswers = new ArrayList(); + for (AssessmentQuestionResult questionAnswer : questionAnswers) { + for (QuestionReference reference : newReferences) { + if (!reference.isRandomQuestion() + && questionAnswer.getAssessmentQuestion().getUid().equals(reference.getQuestion().getUid())) { + nonRandomQuestionAnswers.add(questionAnswer); + } + } + } + Collection randomQuestionAnswers = CollectionUtils.subtract( + questionAnswers, nonRandomQuestionAnswers); + + // [+] if the question reference was removed (in case of random question references) + for (QuestionReference deletedReference : deletedReferences) { + + //in case of random question reference - search for the answer with the same maxmark + if (deletedReference.isRandomQuestion()) { + + Iterator iter2 = randomQuestionAnswers.iterator(); + while (iter2.hasNext()) { + AssessmentQuestionResult randomQuestionAnswer = iter2.next(); + if (randomQuestionAnswer.getMaxMark().intValue() == deletedReference.getDefaultGrade()) { + + assessmentMark -= randomQuestionAnswer.getMark(); + assessmentMaxMark -= deletedReference.getDefaultGrade(); + iter2.remove(); + questionAnswers.remove(randomQuestionAnswer); + assessmentQuestionResultDao.removeObject(AssessmentQuestionResult.class, + randomQuestionAnswer.getUid()); + break; + } + } + } + } + + // [+] if the question reference mark is modified (in case of random question references) + for (QuestionReference modifiedReference : modifiedReferences.keySet()) { + + //in case of random question reference - search for the answer with the same maxmark + if (modifiedReference.isRandomQuestion()) { + + for (AssessmentQuestionResult randomQuestionAnswer : randomQuestionAnswers) { + int newReferenceGrade = modifiedReference.getDefaultGrade(); + int oldReferenceGrade = modifiedReferences.get(modifiedReference); + + if (randomQuestionAnswer.getMaxMark().intValue() == oldReferenceGrade) { + + // update question answer's mark + Float oldQuestionAnswerMark = randomQuestionAnswer.getMark(); + float newQuestionAnswerMark = oldQuestionAnswerMark * newReferenceGrade + / oldReferenceGrade; + randomQuestionAnswer.setMark(newQuestionAnswerMark); + randomQuestionAnswer.setMaxMark((float) newReferenceGrade); + assessmentQuestionResultDao.saveObject(randomQuestionAnswer); + + nonRandomQuestionAnswers.add(randomQuestionAnswer); + + assessmentMark += newQuestionAnswerMark - oldQuestionAnswerMark; + assessmentMaxMark += newReferenceGrade - oldReferenceGrade; + break; + } + } + } + + } + + + // [+] if the new question reference was added + for (QuestionReference addedReference : addedReferences) { + assessmentMaxMark += addedReference.getDefaultGrade(); + } + + // store new mark and maxMark if they were changed + if ((assessmentResult.getGrade() != assessmentMark) + || (assessmentResult.getMaximumGrade() != assessmentMaxMark)) { + + // marks can't be below zero + assessmentMark = (assessmentMark < 0) ? 0 : assessmentMark; + assessmentMaxMark = (assessmentMaxMark < 0) ? 0 : assessmentMaxMark; + + assessmentResult.setGrade(assessmentMark); + assessmentResult.setMaximumGrade(assessmentMaxMark); + assessmentResultDao.saveObject(assessmentResult); + + // if this is the last assessment result - propagade total mark to Gradebook + if (lastAssessmentResult.getUid().equals(assessmentResult.getUid())) { + gradebookService.updateActivityMark(new Double(assessmentMark), null, user.getUserId() + .intValue(), toolSessionId, true); + } + } + + } + + } + } + + + } + + @Override public void recalculateMarkForLesson(UserDTO requestUserDTO, Long lessonId) { User requestUser = userService.getUserByLogin(requestUserDTO.getLogin()); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r405cf90d2646e8f7dc1aa032b28c820279e50930 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 405cf90d2646e8f7dc1aa032b28c820279e50930) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -41,6 +41,7 @@ import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; +import org.lamsfoundation.lams.tool.assessment.model.QuestionReference; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -318,13 +319,28 @@ String getLearnerContentFolder(Long toolSessionId, Long userId); /** + * Recalculate marks after editing content from monitoring. + * + * @param assessment + * @param oldQuestions + * @param newQuestions + * @param oldReferences + * @param newReferences + * @param deletedReferences + */ + void recalculateUserAnswers(Assessment assessment, Set oldQuestions, + Set newQuestions, Set oldReferences, + Set newReferences, List deletedReferences); + + /** * Recalculate mark for leader and sets it to all members of a group. Authentication check: user must be either lesson stuff or group manager. * * @param requestUserDTO * @param lessonId */ void recalculateMarkForLesson(UserDTO requestUserDTO, Long lessonId); + void releaseQuestionsAndReferencesFromCache(Assessment assessment); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java =================================================================== diff -u -r6e5d1ff4891084bef035cb865c1a395e3eb49ab0 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 6e5d1ff4891084bef035cb865c1a395e3eb49ab0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -224,7 +224,7 @@ AssessmentForm assessmentForm = (AssessmentForm) form; // initial Session Map - SessionMap sessionMap = new SessionMap(); + SessionMap sessionMap = new SessionMap(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); assessmentForm.setSessionMapID(sessionMap.getSessionID()); @@ -303,7 +303,7 @@ private ActionForward initPage(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); AssessmentForm existForm = (AssessmentForm) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT_FORM); AssessmentForm assessmentForm = (AssessmentForm) form; @@ -314,11 +314,9 @@ } ToolAccessMode mode = getAccessMode(request); - if (mode.isAuthor()) { - return mapping.findForward(AssessmentConstants.SUCCESS); - } else { - return mapping.findForward(AssessmentConstants.DEFINE_LATER); - } + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + + return mapping.findForward(AssessmentConstants.SUCCESS); } /** @@ -337,7 +335,8 @@ AssessmentForm assessmentForm = (AssessmentForm) (form); // get back sessionMAP - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(assessmentForm.getSessionMapID()); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + assessmentForm.getSessionMapID()); ToolAccessMode mode = getAccessMode(request); @@ -346,23 +345,28 @@ // **********************************Get Assessment PO********************* Assessment assessmentPO = service.getAssessmentByContentId(assessmentForm.getAssessment().getContentId()); + + service.releaseQuestionsAndReferencesFromCache(assessmentPO); + + Set oldQuestions = assessmentPO.getQuestions(); + Set oldReferences = assessmentPO.getQuestionReferences(); if (assessmentPO == null) { // new Assessment, create it. assessmentPO = assessment; assessmentPO.setCreated(new Timestamp(new Date().getTime())); assessmentPO.setUpdated(new Timestamp(new Date().getTime())); + } else { - if (mode.isAuthor()) { - Long uid = assessmentPO.getUid(); - PropertyUtils.copyProperties(assessmentPO, assessment); - // get back UID - assessmentPO.setUid(uid); - } else { // if it is Teacher, then just update basic tab content (definelater) - assessmentPO.setInstructions(assessment.getInstructions()); - assessmentPO.setTitle(assessment.getTitle()); - // change define later status + Long uid = assessmentPO.getUid(); + PropertyUtils.copyProperties(assessmentPO, assessment); + // set back UID + assessmentPO.setUid(uid); + + // if it is Teacher (from monitor) - change define later status + if (mode.isTeacher()) { assessmentPO.setDefineLater(false); } + assessmentPO.setUpdated(new Timestamp(new Date().getTime())); } @@ -376,39 +380,41 @@ if (assessmentUser == null) { assessmentUser = new AssessmentUser(user, assessmentPO); } - assessmentPO.setCreatedBy(assessmentUser); // ************************* Handle assessment questions ******************* - // Handle assessment questions - Set questions = new LinkedHashSet(); - SortedSet topics = getQuestionList(sessionMap); - Iterator iter = topics.iterator(); - while (iter.hasNext()) { - AssessmentQuestion question = (AssessmentQuestion) iter.next(); - if (question != null) { - // This flushs user UID info to message if this user is a new user. - question.setCreateBy(assessmentUser); - removeNewLineCharacters(question); - questions.add(question); - } + // Handle assessment questions + Set questions = new LinkedHashSet(); + Set newQuestions = getQuestionList(sessionMap); + for (AssessmentQuestion question : newQuestions) { + // This flushes user UID info to message if this user is a new user. + question.setCreateBy(assessmentUser); + removeNewLineCharacters(question); + questions.add(question); } assessmentPO.setQuestions(questions); - // delete References from database. + //Define Later - recalculate results + List deletedQuestions = getDeletedQuestionList(sessionMap); + Set newReferences = updateQuestionReferencesGrades(request, sessionMap, true); List deletedReferences = getDeletedQuestionReferences(sessionMap); - iter = deletedReferences.iterator(); - while (iter.hasNext()) { - QuestionReference reference = (QuestionReference) iter.next(); - iter.remove(); + if (mode.isTeacher()) { + service.recalculateUserAnswers(assessmentPO, oldQuestions, newQuestions, oldReferences, newReferences, + deletedReferences); + } + + // delete References from database. + Iterator iterRef = deletedReferences.iterator(); + while (iterRef.hasNext()) { + QuestionReference reference = (QuestionReference) iterRef.next(); + iterRef.remove(); if (reference.getUid() != null) { service.deleteQuestionReference(reference.getUid()); } } // delete Questions from database. - List deletedQuestionList = getDeletedQuestionList(sessionMap); - iter = deletedQuestionList.iterator(); + Iterator iter = deletedQuestions.iterator(); while (iter.hasNext()) { AssessmentQuestion question = (AssessmentQuestion) iter.next(); iter.remove(); @@ -418,14 +424,11 @@ } // Handle question references - Set questionReferences = updateQuestionReferencesGrades(request, sessionMap, true); - assessmentPO.setQuestionReferences(questionReferences); + assessmentPO.setQuestionReferences(newReferences); // ************************* Handle assessment overall feedbacks ******************* - if (mode.isAuthor()) { - TreeSet overallFeedbackList = getOverallFeedbacksFromForm(request, true); - assessmentPO.setOverallFeedbacks(overallFeedbackList); - } + TreeSet overallFeedbackList = getOverallFeedbacksFromForm(request, true); + assessmentPO.setOverallFeedbacks(overallFeedbackList); // ********************************************** // finally persist assessmentPO again @@ -434,11 +437,8 @@ assessmentForm.setAssessment(assessmentPO); request.setAttribute(AuthoringConstants.LAMS_AUTHORING_SUCCESS_FLAG, Boolean.TRUE); - if (mode.isAuthor()) { - return mapping.findForward("author"); - } else { - return mapping.findForward("monitor"); - } + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + return mapping.findForward("author"); } /** @@ -453,7 +453,7 @@ private ActionForward newQuestionInit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + 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; @@ -484,7 +484,7 @@ } request.setAttribute(AssessmentConstants.ATTR_UNIT_LIST, unitList); - short type = (short) NumberUtils.stringToInt(request.getParameter(AssessmentConstants.ATTR_QUESTION_TYPE)); + short type = (short) NumberUtils.toInt(request.getParameter(AssessmentConstants.ATTR_QUESTION_TYPE)); sessionMap.put(AssessmentConstants.ATTR_QUESTION_TYPE, type); request.setAttribute(AttributeNames.PARAM_CONTENT_FOLDER_ID, contentFolderID); return findForward(type, mapping); @@ -504,11 +504,12 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + 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); + int questionIdx = NumberUtils.toInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_INDEX), -1); AssessmentQuestion question = null; if (questionIdx != -1) { SortedSet assessmentList = getQuestionList(sessionMap); @@ -544,7 +545,8 @@ AssessmentQuestionForm questionForm = (AssessmentQuestionForm) form; extractFormToAssessmentQuestion(request, questionForm); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(questionForm.getSessionMapID()); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + questionForm.getSessionMapID()); reinitializeAvailableQuestions(sessionMap); // set session map ID so that questionlist.jsp can get sessionMAP @@ -561,7 +563,8 @@ private ActionForward saveQTI(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { String sessionMapId = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapId); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapId); String contentFolderID = (String) sessionMap.get(AttributeNames.PARAM_CONTENT_FOLDER_ID); SortedSet questionList = getQuestionList(sessionMap); @@ -774,7 +777,8 @@ private ActionForward exportQTI(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); SortedSet questionList = getQuestionList(sessionMap); List questions = new LinkedList(); @@ -932,18 +936,19 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); updateQuestionReferencesGrades(request, sessionMap, false); - int questionIdx = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_INDEX), -1); + int questionIdx = NumberUtils.toInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_INDEX), -1); if (questionIdx != -1) { SortedSet questionList = getQuestionList(sessionMap); List rList = new ArrayList(questionList); AssessmentQuestion question = rList.remove(questionIdx); questionList.clear(); questionList.addAll(rList); // add to delList - List delList = getDeletedQuestionList(sessionMap); + List delList = getDeletedQuestionList(sessionMap); delList.add(question); // remove according questionReference, if exists @@ -994,11 +999,12 @@ HttpServletResponse response) { // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + 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); + int questionIdx = NumberUtils.toInt(request.getParameter(AssessmentConstants.PARAM_QUESTION_INDEX), -1); // set SequenceId QuestionReference reference = new QuestionReference(); @@ -1051,10 +1057,11 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); updateQuestionReferencesGrades(request, sessionMap, false); - int questionReferenceIdx = NumberUtils.stringToInt( + int questionReferenceIdx = NumberUtils.toInt( request.getParameter(AssessmentConstants.PARAM_QUESTION_REFERENCE_INDEX), -1); if (questionReferenceIdx != -1) { SortedSet questionReferences = getQuestionReferences(sessionMap); @@ -1063,7 +1070,7 @@ questionReferences.clear(); questionReferences.addAll(rList); // add to delList - List delList = getDeletedQuestionReferences(sessionMap); + List delList = getDeletedQuestionReferences(sessionMap); delList.add(questionReference); } @@ -1104,10 +1111,11 @@ private ActionForward switchQuestionReferences(ActionMapping mapping, HttpServletRequest request, boolean up) { // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); updateQuestionReferencesGrades(request, sessionMap, false); - int questionReferenceIdx = NumberUtils.stringToInt( + int questionReferenceIdx = NumberUtils.toInt( request.getParameter(AssessmentConstants.PARAM_QUESTION_REFERENCE_INDEX), -1); if (questionReferenceIdx != -1) { SortedSet references = getQuestionReferences(sessionMap); @@ -1150,12 +1158,11 @@ private ActionForward importQuestions(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); - AssessmentForm assessmentForm = (AssessmentForm) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT_FORM); SortedSet oldQuestions = getQuestionList(sessionMap); - List ldErrorMsgs = new ArrayList(); List toolsErrorMsgs = new ArrayList(); try { File designFile = null; @@ -1230,7 +1237,8 @@ private ActionForward exportQuestions(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); AssessmentForm assessmentForm = (AssessmentForm) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT_FORM); Assessment assessment = assessmentForm.getAssessment(); @@ -1335,7 +1343,7 @@ private ActionForward removeOption(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { Set optionList = getOptionsFromRequest(request, false); - int optionIndex = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_OPTION_INDEX), -1); + int optionIndex = NumberUtils.toInt(request.getParameter(AssessmentConstants.PARAM_OPTION_INDEX), -1); if (optionIndex != -1) { List rList = new ArrayList(optionList); AssessmentQuestionOption question = rList.remove(optionIndex); @@ -1382,7 +1390,7 @@ private ActionForward switchOption(ActionMapping mapping, HttpServletRequest request, boolean up) { Set optionList = getOptionsFromRequest(request, false); - int optionIndex = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_OPTION_INDEX), -1); + int optionIndex = NumberUtils.toInt(request.getParameter(AssessmentConstants.PARAM_OPTION_INDEX), -1); if (optionIndex != -1) { List rList = new ArrayList(optionList); @@ -1449,7 +1457,8 @@ private ActionForward initOverallFeedback(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); AssessmentForm assessmentForm = (AssessmentForm) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT_FORM); Assessment assessment = assessmentForm.getAssessment(); @@ -1506,7 +1515,7 @@ * * @param sessionMap */ - private void reinitializeAvailableQuestions(SessionMap sessionMap) { + private void reinitializeAvailableQuestions(SessionMap sessionMap) { SortedSet bankQuestions = getQuestionList(sessionMap); SortedSet references = getQuestionReferences(sessionMap); Set questionsFromList = new LinkedHashSet(); @@ -1535,7 +1544,7 @@ * @param request * @return */ - private SortedSet getQuestionList(SessionMap sessionMap) { + private SortedSet getQuestionList(SessionMap sessionMap) { SortedSet list = (SortedSet) sessionMap .get(AssessmentConstants.ATTR_QUESTION_LIST); if (list == null) { @@ -1551,7 +1560,7 @@ * @param request * @return */ - private SortedSet getQuestionReferences(SessionMap sessionMap) { + private SortedSet getQuestionReferences(SessionMap sessionMap) { SortedSet list = (SortedSet) sessionMap .get(AssessmentConstants.ATTR_QUESTION_REFERENCES); if (list == null) { @@ -1567,7 +1576,7 @@ * @param request * @return */ - private List getDeletedQuestionList(SessionMap sessionMap) { + private List getDeletedQuestionList(SessionMap sessionMap) { return getListFromSession(sessionMap, AssessmentConstants.ATTR_DELETED_QUESTION_LIST); } @@ -1577,7 +1586,7 @@ * @param request * @return */ - private List getDeletedQuestionReferences(SessionMap sessionMap) { + private List getDeletedQuestionReferences(SessionMap sessionMap) { return getListFromSession(sessionMap, AssessmentConstants.ATTR_DELETED_QUESTION_REFERENCES); } @@ -1588,7 +1597,7 @@ * @param name * @return */ - private List getListFromSession(SessionMap sessionMap, String name) { + private List getListFromSession(SessionMap sessionMap, String name) { List list = (List) sessionMap.get(name); if (list == null) { list = new ArrayList(); @@ -1692,10 +1701,10 @@ * gets all info EXCEPT AssessmentQuestion.createDate and AssessmentQuestion.createBy, which need be set when persisting * this assessment Question. */ - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(questionForm.getSessionMapID()); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(questionForm.getSessionMapID()); // check whether it is "edit(old Question)" or "add(new Question)" SortedSet questionList = getQuestionList(sessionMap); - int questionIdx = NumberUtils.stringToInt(questionForm.getQuestionIndex(), -1); + int questionIdx = NumberUtils.toInt(questionForm.getQuestionIndex(), -1); AssessmentQuestion question = null; if (questionIdx == -1) { // add @@ -1756,7 +1765,7 @@ || (type == AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER) || (type == AssessmentConstants.QUESTION_TYPE_NUMERICAL)) { Set optionList = getOptionsFromRequest(request, true); - Set options = new LinkedHashSet(); + Set options = new LinkedHashSet(); int seqId = 0; for (AssessmentQuestionOption option : optionList) { option.setSequenceId(seqId++); @@ -1767,7 +1776,7 @@ // set units if (type == AssessmentConstants.QUESTION_TYPE_NUMERICAL) { Set unitList = getUnitsFromRequest(request, true); - Set units = new LinkedHashSet(); + Set units = new LinkedHashSet(); int seqId = 0; for (AssessmentUnit unit : unitList) { unit.setSequenceId(seqId++); @@ -1795,8 +1804,8 @@ return mode; } - private Set updateQuestionReferencesGrades(HttpServletRequest request, SessionMap sessionMap, - boolean isFormSubmit) { + private Set updateQuestionReferencesGrades(HttpServletRequest request, + SessionMap sessionMap, boolean isFormSubmit) { Map paramMap = splitRequestParameter(request, AssessmentConstants.ATTR_QUESTION_REFERENCES_GRADES); @@ -1827,12 +1836,11 @@ * @param request * @param isForSaving * whether the blank options will be preserved or not - * */ private TreeSet getOptionsFromRequest(HttpServletRequest request, boolean isForSaving) { Map paramMap = splitRequestParameter(request, AssessmentConstants.ATTR_OPTION_LIST); - int count = NumberUtils.stringToInt(paramMap.get(AssessmentConstants.ATTR_OPTION_COUNT)); + int count = NumberUtils.toInt(paramMap.get(AssessmentConstants.ATTR_OPTION_COUNT)); int questionType = WebUtil.readIntParam(request, AssessmentConstants.ATTR_QUESTION_TYPE); TreeSet optionList = new TreeSet( new SequencableComparator()); @@ -1846,7 +1854,7 @@ AssessmentQuestionOption option = new AssessmentQuestionOption(); String sequenceId = paramMap.get(AssessmentConstants.ATTR_OPTION_SEQUENCE_ID_PREFIX + i); - option.setSequenceId(NumberUtils.stringToInt(sequenceId)); + option.setSequenceId(NumberUtils.toInt(sequenceId)); option.setOptionString(optionString); float grade = Float.valueOf(paramMap.get(AssessmentConstants.ATTR_OPTION_GRADE_PREFIX + i)); option.setGrade(grade); @@ -1860,7 +1868,7 @@ AssessmentQuestionOption option = new AssessmentQuestionOption(); String sequenceId = paramMap.get(AssessmentConstants.ATTR_OPTION_SEQUENCE_ID_PREFIX + i); - option.setSequenceId(NumberUtils.stringToInt(sequenceId)); + option.setSequenceId(NumberUtils.toInt(sequenceId)); option.setOptionString(paramMap.get(AssessmentConstants.ATTR_OPTION_STRING_PREFIX + i)); option.setQuestion(question); optionList.add(option); @@ -1875,7 +1883,7 @@ AssessmentQuestionOption option = new AssessmentQuestionOption(); String sequenceId = paramMap.get(AssessmentConstants.ATTR_OPTION_SEQUENCE_ID_PREFIX + i); - option.setSequenceId(NumberUtils.stringToInt(sequenceId)); + option.setSequenceId(NumberUtils.toInt(sequenceId)); try { float optionFloat = Float.valueOf(optionFloatStr); option.setOptionFloat(optionFloat); @@ -1900,7 +1908,7 @@ AssessmentQuestionOption option = new AssessmentQuestionOption(); String sequenceId = paramMap.get(AssessmentConstants.ATTR_OPTION_SEQUENCE_ID_PREFIX + i); - option.setSequenceId(NumberUtils.stringToInt(sequenceId)); + option.setSequenceId(NumberUtils.toInt(sequenceId)); option.setOptionString(optionString); option.setAnswerInt(i); optionList.add(option); @@ -1917,7 +1925,7 @@ private TreeSet getUnitsFromRequest(HttpServletRequest request, boolean isForSaving) { Map paramMap = splitRequestParameter(request, AssessmentConstants.ATTR_UNIT_LIST); - int count = NumberUtils.stringToInt(paramMap.get(AssessmentConstants.ATTR_UNIT_COUNT)); + int count = NumberUtils.toInt(paramMap.get(AssessmentConstants.ATTR_UNIT_COUNT)); TreeSet unitList = new TreeSet(new SequencableComparator()); for (int i = 0; i < count; i++) { String unitStr = paramMap.get(AssessmentConstants.ATTR_UNIT_UNIT_PREFIX + i); @@ -1927,7 +1935,7 @@ AssessmentUnit unit = new AssessmentUnit(); String sequenceId = paramMap.get(AssessmentConstants.ATTR_UNIT_SEQUENCE_ID_PREFIX + i); - unit.setSequenceId(NumberUtils.stringToInt(sequenceId)); + unit.setSequenceId(NumberUtils.toInt(sequenceId)); unit.setUnit(unitStr); float multiplier = Float.valueOf(paramMap.get(AssessmentConstants.ATTR_UNIT_MULTIPLIER_PREFIX + i)); unit.setMultiplier(multiplier); @@ -1944,7 +1952,7 @@ */ private TreeSet getOverallFeedbacksFromRequest(HttpServletRequest request, boolean skipBlankOverallFeedbacks) { - int count = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.ATTR_OVERALL_FEEDBACK_COUNT)); + int count = NumberUtils.toInt(request.getParameter(AssessmentConstants.ATTR_OVERALL_FEEDBACK_COUNT)); TreeSet overallFeedbackList = new TreeSet( new SequencableComparator()); for (int i = 0; i < count; i++) { @@ -1957,9 +1965,9 @@ continue; } AssessmentOverallFeedback overallFeedback = new AssessmentOverallFeedback(); - overallFeedback.setSequenceId(NumberUtils.stringToInt(sequenceId)); + overallFeedback.setSequenceId(NumberUtils.toInt(sequenceId)); if (!StringUtils.isBlank(gradeBoundaryStr)) { - int gradeBoundary = NumberUtils.stringToInt(request + int gradeBoundary = NumberUtils.toInt(request .getParameter(AssessmentConstants.ATTR_OVERALL_FEEDBACK_GRADE_BOUNDARY_PREFIX + i)); overallFeedback.setGradeBoundary(gradeBoundary); } @@ -1978,7 +1986,7 @@ boolean skipBlankOverallFeedbacks) { Map paramMap = splitRequestParameter(request, AssessmentConstants.ATTR_OVERALL_FEEDBACK_LIST); - int count = NumberUtils.stringToInt(paramMap.get(AssessmentConstants.ATTR_OVERALL_FEEDBACK_COUNT)); + int count = NumberUtils.toInt(paramMap.get(AssessmentConstants.ATTR_OVERALL_FEEDBACK_COUNT)); TreeSet overallFeedbackList = new TreeSet( new SequencableComparator()); for (int i = 0; i < count; i++) { @@ -1990,9 +1998,9 @@ continue; } AssessmentOverallFeedback overallFeedback = new AssessmentOverallFeedback(); - overallFeedback.setSequenceId(NumberUtils.stringToInt(sequenceId)); + overallFeedback.setSequenceId(NumberUtils.toInt(sequenceId)); if (!StringUtils.isBlank(gradeBoundaryStr)) { - int gradeBoundary = NumberUtils.stringToInt(paramMap + int gradeBoundary = NumberUtils.toInt(paramMap .get(AssessmentConstants.ATTR_OVERALL_FEEDBACK_GRADE_BOUNDARY_PREFIX + i)); overallFeedback.setGradeBoundary(gradeBoundary); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/ClearSessionAction.java =================================================================== diff -u -rc56857991e269aa7f5bd250a05b52c767a9957ad -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/ClearSessionAction.java (.../ClearSessionAction.java) (revision c56857991e269aa7f5bd250a05b52c767a9957ad) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/ClearSessionAction.java (.../ClearSessionAction.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -40,9 +40,7 @@ @Override public void clearSession(String customiseSessionID, HttpSession session, ToolAccessMode mode) { - if (mode.isAuthor()) { session.removeAttribute(customiseSessionID); - } } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== diff -u -r6e5d1ff4891084bef035cb865c1a395e3eb49ab0 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 6e5d1ff4891084bef035cb865c1a395e3eb49ab0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -172,7 +172,7 @@ Assessment assessment = service.getAssessmentBySessionId(toolSessionId); - //*LKC* added the next chunk + //support for leader select feature AssessmentUser groupLeader = null; if (assessment.isUseSelectLeaderToolOuput()) { groupLeader = service.checkLeaderSelectToolForSessionLeader(assessmentUser, new Long(toolSessionId).longValue()); @@ -193,12 +193,6 @@ // in case user joins the lesson after leader has answers some answers already - we need to make sure // he has the same scratches as leader service.copyAnswersFromLeader(assessmentUser, groupLeader); - - //service.finishToolSession(toolSessionId, assessmentUser.getUserId()); -// user.setSessionFinished(true); -// assessmentUserDao.saveObject(user); -// assessmentUser.setSessionFinished(true); -// service.saupdateAssessmentUser(assessmentUser); } } @@ -278,11 +272,6 @@ return mapping.findForward("defineLater"); } - // set contentInUse flag to true! - assessment.setContentInUse(true); - assessment.setDefineLater(false); - service.saveOrUpdateAssessment(assessment); - //check if there is submission deadline Date submissionDeadline = assessment.getSubmissionDeadline(); if (submissionDeadline != null) { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java =================================================================== diff -u -r6e5d1ff4891084bef035cb865c1a395e3eb49ab0 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 6e5d1ff4891084bef035cb865c1a395e3eb49ab0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -144,7 +144,6 @@ boolean isGroupedActivity = service.isGroupedActivity(contentId); sessionMap.put(AssessmentConstants.ATTR_IS_GROUPED_ACTIVITY, isGroupedActivity); sessionMap.put(AssessmentConstants.ATTR_SUMMARY_LIST, summaryList); - sessionMap.put(AssessmentConstants.PAGE_EDITABLE, assessment.isContentInUse()); sessionMap.put(AssessmentConstants.ATTR_ASSESSMENT, assessment); sessionMap.put(AssessmentConstants.ATTR_TOOL_CONTENT_ID, contentId); sessionMap.put(AttributeNames.PARAM_CONTENT_FOLDER_ID, WebUtil.readStrParam(request, Index: lams_tool_assessment/web/pages/authoring/authoring.jsp =================================================================== diff -u -ref851974c4dc3f5468b188fab9997a37b73c0e50 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision ef851974c4dc3f5468b188fab9997a37b73c0e50) +++ lams_tool_assessment/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -58,6 +58,7 @@ + @@ -79,9 +80,9 @@ cancelConfirmMsgKey="authoring.msg.cancel.save" accessMode="author" --%> - + Fisheye: Tag 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 refers to a dead (removed) revision in file `lams_tool_assessment/web/pages/authoring/definelater.jsp'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 refers to a dead (removed) revision in file `lams_tool_assessment/web/pages/authoring/definelaterforbid.jsp'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_assessment/web/pages/authoring/start.jsp =================================================================== diff -u -rc56857991e269aa7f5bd250a05b52c767a9957ad -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/web/pages/authoring/start.jsp (.../start.jsp) (revision c56857991e269aa7f5bd250a05b52c767a9957ad) +++ lams_tool_assessment/web/pages/authoring/start.jsp (.../start.jsp) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -1,18 +1,17 @@ - + <%@ include file="/common/taglibs.jsp" %> - - - - - - - - + + + + + + + + Index: lams_tool_assessment/web/pages/monitoring/editactivity.jsp =================================================================== diff -u -re83e4b897113057714ced4be6d03a621c782b075 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/web/pages/monitoring/editactivity.jsp (.../editactivity.jsp) (revision e83e4b897113057714ced4be6d03a621c782b075) +++ lams_tool_assessment/web/pages/monitoring/editactivity.jsp (.../editactivity.jsp) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -2,12 +2,6 @@ - -

- -

-
- - - - - - + + +
@@ -29,17 +23,15 @@
- - - - - - - -
+ + + + + + + +
Index: lams_tool_assessment/web/pages/monitoring/summary.jsp =================================================================== diff -u -r405cf90d2646e8f7dc1aa032b28c820279e50930 -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 --- lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 405cf90d2646e8f7dc1aa032b28c820279e50930) +++ lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) @@ -26,7 +26,7 @@ {name:'userId',index:'userId', width:0}, {name:'sessionId',index:'sessionId', width:0}, {name:'userName',index:'userName', width:350}, - {name:'total',index:'total', width:120,align:"right",sorttype:"float", formatter:'number', formatoptions:{decimalPlaces: 2}} + {name:'total',index:'total', width:120,align:"right",sorttype:"float"} ], multiselect: false, @@ -64,7 +64,7 @@ userId:"${assessmentResult.user.userId}", sessionId:"${assessmentResult.user.session.sessionId}", userName:"${assessmentResult.user.lastName}, ${assessmentResult.user.firstName}", - total:"" + total:"" }); @@ -132,7 +132,7 @@ } }); } - }); + }).trigger('resize'); $("#questionUid").change(function() { var questionUid = $("#questionUid").val();