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();