Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java,v diff -u -r1.14.6.7 -r1.14.6.8 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java 29 Sep 2011 13:43:36 -0000 1.14.6.7 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java 30 Sep 2011 15:51:52 -0000 1.14.6.8 @@ -29,7 +29,9 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.LinkedHashSet; +import java.util.LinkedList; import java.util.List; import java.util.Random; import java.util.Set; @@ -150,25 +152,30 @@ } Assessment assessment = service.getAssessmentBySessionId(toolSessionId); + Set questionReferences = new TreeSet(new SequencableComparator()); + questionReferences.addAll(assessment.getQuestionReferences()); + HashMap questionToReferenceMap = new HashMap(); + ArrayList takenQuestion = new ArrayList(); - - Set questionReferences = assessment.getQuestionReferences(); - Set questionsFromDB = new LinkedHashSet(); //add non-random questions for (QuestionReference questionReference : questionReferences) { if (!questionReference.isRandomQuestion()) { - questionsFromDB.add(questionReference.getQuestion()); + AssessmentQuestion question = questionReference.getQuestion(); + takenQuestion.add(question); + questionToReferenceMap.put(questionReference.getUid(), question); } } + Set allQuestions = assessment.getQuestions(); - Collection availableQuestions = CollectionUtils.subtract(allQuestions, questionsFromDB); + Collection availableQuestions = CollectionUtils.subtract(allQuestions, takenQuestion); //add random questions (actually replacing them with real ones) for (QuestionReference questionReference : questionReferences) { if (questionReference.isRandomQuestion()) { //pick a random element Random rand = new Random(System.currentTimeMillis()); AssessmentQuestion question = (AssessmentQuestion) availableQuestions.toArray()[rand.nextInt(availableQuestions.size())]; - questionsFromDB.add(question); + takenQuestion.add(question); + questionToReferenceMap.put(questionReference.getUid(), question); availableQuestions.remove(question); } } @@ -225,24 +232,22 @@ } } - Set questionList = new TreeSet(new SequencableComparator()); - if (questionsFromDB != null) { - // remove hidden questions. - for (AssessmentQuestion question : questionsFromDB) { - // becuase in webpage will use this login name. Here is just - // initialize it to avoid session close error in proxy object. - if (question.getCreateBy() != null) { - question.getCreateBy().getLoginName(); - } - questionList.add(question); + //sort questions + LinkedList questionList = new LinkedList(); + for (QuestionReference questionReference : questionReferences) { + AssessmentQuestion question = questionToReferenceMap.get(questionReference.getUid()); + // becuase in webpage will use this login name. Here is just initialize it to avoid session close error in proxy object. + if (question.getCreateBy() != null) { + question.getCreateBy().getLoginName(); } + questionList.add(question); } // shuffling if (assessment.isShuffled()) { ArrayList shuffledList = new ArrayList(questionList); Collections.shuffle(shuffledList); - questionList = new LinkedHashSet(shuffledList); + questionList = new LinkedList(shuffledList); } for (AssessmentQuestion question : questionList) { if (question.isShuffle() || (question.getType() == AssessmentConstants.QUESTION_TYPE_ORDERING)) {