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());
}
/**