Index: lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java =================================================================== diff -u -r61ab8aad9c6a33202b47ca6089e89653b5131b09 -r59929722ef9552565e18f958e47f8e409e669671 --- lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision 61ab8aad9c6a33202b47ca6089e89653b5131b09) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision 59929722ef9552565e18f958e47f8e409e669671) @@ -21,6 +21,9 @@ package org.lamsfoundation.lams.learning.progress; +import java.util.LinkedList; +import java.util.List; + import org.lamsfoundation.lams.learningdesign.*; import org.lamsfoundation.lams.lesson.*; import org.lamsfoundation.lams.usermanagement.User; @@ -35,6 +38,14 @@ { /** + * Holds a list of completed activity ids in one recursive move to next + * task calculation. For example, if a parallel activity A has two children + * B,C. Assume B has been finished first. The complete of C will also + * result in the completion of A. Therefore, completedActivityList + * will hold B and C. + */ + private static List completedActivityList = new LinkedList(); + /** * Method determines next step for a learner based on the activity * they have just completed. * @param learner The User who is progressing through the Lesson. @@ -52,7 +63,7 @@ { learnerProgress.setProgressState(completedActivity, LearnerProgress.ACTIVITY_COMPLETED); - + completedActivityList.add(completedActivity.getActivityId()); Transition transition = completedActivity.getTransitionFrom(); if (transition != null) @@ -100,8 +111,10 @@ Transition transition) { learnerProgress.setPreviousActivity(completedActivity); + learnerProgress.setCurrentCompletedActivitiesList(completedActivityList); + completedActivityList.clear(); learnerProgress.setCurrentActivity(transition.getToActivity()); - + //we set the next activity to be the first child activity if it //is a sequence activity. if(transition.getToActivity().isSequenceActivity()) Index: lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java =================================================================== diff -u -r4e049aced5079eff1ff599aa4572624cc0314e59 -r59929722ef9552565e18f958e47f8e409e669671 --- lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision 4e049aced5079eff1ff599aa4572624cc0314e59) +++ lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision 59929722ef9552565e18f958e47f8e409e669671) @@ -166,14 +166,16 @@ testUser, testLesson); assertLearnerProgress(testRootPreviousActivity,TEST_NB_ACTIVITY_ID,TEST_NB_ACTIVITY_ID,1,1,"nb","nb"); - + assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size()); + //progress from notice board to random grouping activity testCompletedActivity = testProgress.getNextActivity(); testRootPreviousActivity = testCompletedActivity; testProgress = learnerService.calculateProgress(testCompletedActivity, testUser, testLesson); assertLearnerProgress(testRootPreviousActivity,TEST_RGRP_ACTIVITY_ID,TEST_RGRP_ACTIVITY_ID,2,1,"random grouping","random grouping"); + assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size()); //progress from random grouping activity to chat testCompletedActivity = testProgress.getNextActivity(); @@ -182,31 +184,35 @@ testUser, testLesson); assertLearnerProgress(testRootPreviousActivity,TEST_CHAT_ACTIVITY_ID,TEST_CHAT_ACTIVITY_ID,3,1,"chat","chat"); - + assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size()); + //progress from chat to QNA testCompletedActivity = testProgress.getNextActivity(); testRootPreviousActivity = testCompletedActivity; testProgress = learnerService.calculateProgress(testCompletedActivity, testUser, testLesson); assertLearnerProgress(testRootPreviousActivity,TEST_QNA_ACTIVITY_ID,TEST_QNA_ACTIVITY_ID,4,1,"QNA","QNA"); - + assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size()); + //progress from QNA to options activity testCompletedActivity = testProgress.getNextActivity(); testRootPreviousActivity = testCompletedActivity; testProgress = learnerService.calculateProgress(testCompletedActivity, testUser, testLesson); assertLearnerProgress(testRootPreviousActivity,TEST_OPTIONS_ACTIVITY_ID,TEST_OPTIONS_ACTIVITY_ID,5,1,"OPTIONS","OPTIONS"); - + assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size()); + //progress from sub option(notice board) to parallel activity testCompletedActivity = ((OptionsActivity)testProgress.getCurrentActivity()).getChildActivityById(TEST_CNB_ACTIVITY_ID); testRootPreviousActivity = testCompletedActivity.getParentActivity(); testProgress = learnerService.calculateProgress(testCompletedActivity, testUser, testLesson); assertLearnerProgress(testRootPreviousActivity,TEST_PARALLEL_ACTIVITY_ID,TEST_PARALLEL_ACTIVITY_ID,7,1,"PARALLEL","PARALLEL"); - + assertEquals("verify temp completed activities",2,testProgress.getCurrentCompletedActivitiesList().size()); + //progress from sub parallel(QNA) to waiting testCompletedActivity = ((ParallelActivity)testProgress.getCurrentActivity()).getChildActivityById(TEST_CQNA_ACTIVITY_ID); //the previous activity should not be changed. @@ -217,7 +223,8 @@ assertLearnerProgress(testRootPreviousActivity,TEST_PARALLEL_ACTIVITY_ID,TEST_WAITING_ACTIVITY_ID,8,1,"PARALLEL","WAITING"); assertTrue("verify waiting flag-should be waiting.",testProgress.isParallelWaiting()); assertTrue("verify next activity",testProgress.getNextActivity()==null); - + assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size()); + //progress from sub parallel(message board) to sub sequence activity(share resource) testCompletedActivity = ((ParallelActivity)testProgress.getCurrentActivity()).getChildActivityById(TEST_MB_ACTIVITY_ID); testRootPreviousActivity = testCompletedActivity.getParentActivity(); @@ -226,6 +233,7 @@ testLesson); assertLearnerProgress(testRootPreviousActivity,TEST_SEQUENCE_ACTIVITY_ID,TEST_SR_ACTIVITY_ID,10,1,"SEQUENCE","SHARE RESOURCE"); assertTrue("verify waiting flag-should not be waiting",!testProgress.isParallelWaiting()); + assertEquals("verify temp completed activities",2,testProgress.getCurrentCompletedActivitiesList().size()); //progress from sub sequence(share resource) to sub sequence(QNA) testCompletedActivity = testProgress.getNextActivity(); @@ -234,13 +242,15 @@ testUser, testLesson); assertLearnerProgress(testRootPreviousActivity,TEST_SEQUENCE_ACTIVITY_ID,TEST_SQNA_ACTIVITY_ID,11,2,"SEQUENCE","QNA"); - + assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size()); + //progress sub sequence(QNA) to complete lesson testCompletedActivity = testProgress.getNextActivity(); testProgress = learnerService.calculateProgress(testCompletedActivity, testUser, testLesson); assertTrue("verify lesson complete",testProgress.isLessonComplete()); + assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size()); } /**