Index: lams_learning/lib/lams/lams.jar
===================================================================
diff -u -r58a3a69656b21b5047527feab5777a6b9d5b2320 -r61ab8aad9c6a33202b47ca6089e89653b5131b09
Binary files differ
Index: lams_learning/lib/lams/src/lams-src.zip
===================================================================
diff -u -rf73c3d7878d6f6c013a43da96353e4e0983e1a61 -r61ab8aad9c6a33202b47ca6089e89653b5131b09
Binary files differ
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java
===================================================================
diff -u -r58a3a69656b21b5047527feab5777a6b9d5b2320 -r61ab8aad9c6a33202b47ca6089e89653b5131b09
--- lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision 58a3a69656b21b5047527feab5777a6b9d5b2320)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision 61ab8aad9c6a33202b47ca6089e89653b5131b09)
@@ -101,9 +101,21 @@
{
learnerProgress.setPreviousActivity(completedActivity);
learnerProgress.setCurrentActivity(transition.getToActivity());
- learnerProgress.setNextActivity(transition.getToActivity());
+
+ //we set the next activity to be the first child activity if it
+ //is a sequence activity.
+ if(transition.getToActivity().isSequenceActivity())
+ {
+ Activity firstActivityInSequence =
+ ((SequenceActivity)transition.getToActivity()).getFirstActivityInSequenceActivity();
+ learnerProgress.setNextActivity(firstActivityInSequence);
+ }
+ //set next activity as the activity follows the transition.
+ else
+ learnerProgress.setNextActivity(transition.getToActivity());
learnerProgress.setProgressState(transition.getToActivity(),
LearnerProgress.ACTIVITY_ATTEMPTED);
+ learnerProgress.setParallelWaiting(false);
return learnerProgress;
}
@@ -127,18 +139,28 @@
if (!parent.areChildrenCompleted(learnerProgress))
{
Activity nextActivity = parent.getNextActivityByParent(completedActivity);
-
- if (nextActivity.isNull())
+
+
+ if (!isNextActivityValid(nextActivity))
throw new ProgressException("Error occurred in progress engine."
+ " Unexpected Null activity received when progressing"
+ " to the next activity within a incomplete parent activity:"
+ " Parent activity id ["
+ parent.getActivityId()
+ "]");
-
- learnerProgress.setNextActivity(nextActivity);
- learnerProgress.setProgressState(nextActivity,
- LearnerProgress.ACTIVITY_ATTEMPTED);
+
+ if(isParallelWaitActivity(nextActivity))
+ {
+ learnerProgress.setParallelWaiting(true);
+ learnerProgress.setNextActivity(null);
+ }
+ else
+ {
+ learnerProgress.setParallelWaiting(false);
+ learnerProgress.setNextActivity(nextActivity);
+ learnerProgress.setProgressState(nextActivity,
+ LearnerProgress.ACTIVITY_ATTEMPTED);
+ }
}
//recurvisely call back to calculateProgress to calculate completed
//parent activity.
@@ -152,4 +174,17 @@
return learnerProgress;
}
+ /**
+ * @param nextActivity
+ * @return
+ */
+ private boolean isNextActivityValid(Activity nextActivity)
+ {
+ return !nextActivity.isNull()||isParallelWaitActivity(nextActivity);
+ }
+
+ private boolean isParallelWaitActivity(Activity nextActivity)
+ {
+ return nextActivity.getActivityTypeId().intValue()==ParallelWaitActivity.PARALLEL_WAIT_ACTIVITY_TYPE;
+ }
}
\ No newline at end of file
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java
===================================================================
diff -u -r58a3a69656b21b5047527feab5777a6b9d5b2320 -r61ab8aad9c6a33202b47ca6089e89653b5131b09
--- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 58a3a69656b21b5047527feab5777a6b9d5b2320)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 61ab8aad9c6a33202b47ca6089e89653b5131b09)
@@ -27,9 +27,10 @@
import org.lamsfoundation.lams.learning.progress.ProgressEngine;
import org.lamsfoundation.lams.learning.progress.ProgressException;
+import org.lamsfoundation.lams.learning.web.util.ActivityMapping;
-import org.lamsfoundation.lams.learning.web.util.ActionMappings;
+
import org.lamsfoundation.lams.learningdesign.Activity;
import org.lamsfoundation.lams.learningdesign.ToolActivity;
@@ -58,7 +59,7 @@
private ProgressEngine progressEngine;
private IToolSessionDAO toolSessionDAO;
private ILamsToolService lamsToolService;
- private ActionMappings actionMappings;
+ private ActivityMapping activityMappings;
//---------------------------------------------------------------------
// Inversion of Control Methods - Constructor injection
//---------------------------------------------------------------------
@@ -102,6 +103,10 @@
{
this.lamsToolService = lamsToolService;
}
+
+ public void setActivityMappings(ActivityMapping activityMappings) {
+ this.activityMappings = activityMappings;
+ }
//---------------------------------------------------------------------
// Service Methods
//---------------------------------------------------------------------
@@ -185,7 +190,7 @@
LearnerProgress learnerProgress = learnerProgressDAO.getLearnerProgressByLearner(learner,lesson);
learnerProgress = progressEngine.calculateProgress(learner, lesson, completedActivity,learnerProgress);
-
+
learnerProgressDAO.updateLearnerProgress(learnerProgress);
return learnerProgress;
@@ -202,7 +207,7 @@
try {
LearnerProgress nextLearnerProgress = calculateProgress(activity, learner, lesson);
Activity nextActivity = nextLearnerProgress.getNextActivity();
- url = actionMappings.getActivityURL(nextActivity, nextLearnerProgress);
+ url = activityMappings.getActivityURL(nextActivity, nextLearnerProgress);
}
catch (ProgressException e) {
// log e
@@ -211,10 +216,6 @@
return url;
}
-
- public void setActionMappings(ActionMappings actionMappings) {
- this.actionMappings = actionMappings;
- }
//---------------------------------------------------------------------
// Helper Methods
Index: lams_learning/test/java/WEB-INF/spring/learningApplicationContext.xml
===================================================================
diff -u -r58a3a69656b21b5047527feab5777a6b9d5b2320 -r61ab8aad9c6a33202b47ca6089e89653b5131b09
--- lams_learning/test/java/WEB-INF/spring/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision 58a3a69656b21b5047527feab5777a6b9d5b2320)
+++ lams_learning/test/java/WEB-INF/spring/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision 61ab8aad9c6a33202b47ca6089e89653b5131b09)
@@ -19,6 +19,7 @@
+
@@ -38,7 +39,7 @@
-
+
Index: lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java
===================================================================
diff -u -r58a3a69656b21b5047527feab5777a6b9d5b2320 -r61ab8aad9c6a33202b47ca6089e89653b5131b09
--- lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision 58a3a69656b21b5047527feab5777a6b9d5b2320)
+++ lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision 61ab8aad9c6a33202b47ca6089e89653b5131b09)
@@ -66,9 +66,13 @@
private static final long TEST_QNA_ACTIVITY_ID = 24;
private static final long TEST_OPTIONS_ACTIVITY_ID = 12;
private static final long TEST_CNB_ACTIVITY_ID = 16;
- private static final long TEST_Parallel_ACTIVITY_ID = 13;
+ private static final long TEST_PARALLEL_ACTIVITY_ID = 13;
private static final long TEST_CQNA_ACTIVITY_ID = 18;
- private static final long TEST_WAITING_ACTIVITY_ID = 0;
+ private static final long TEST_WAITING_ACTIVITY_ID = -1;
+ private static final long TEST_MB_ACTIVITY_ID = 19;
+ private static final long TEST_SEQUENCE_ACTIVITY_ID = 14;
+ private static final long TEST_SR_ACTIVITY_ID = 22;
+ private static final long TEST_SQNA_ACTIVITY_ID = 25;
/*
* @see TestCase#setUp()
@@ -132,79 +136,114 @@
public void testCalculateProgress() throws ProgressException
{
- //progress from survey to notice board
Activity testCompletedActivity = testProgress.getNextActivity();
+ Activity testRootPreviousActivity = testProgress.getPreviousActivity();
+ //progress from survey to notice board
+ testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
testUser,
testLesson);
- assertLearnerProgress(testCompletedActivity,TEST_NB_ACTIVITY_ID,TEST_NB_ACTIVITY_ID,1,"nb","nb");
+ assertLearnerProgress(testRootPreviousActivity,TEST_NB_ACTIVITY_ID,TEST_NB_ACTIVITY_ID,1,1,"nb","nb");
//progress from notice board to random grouping activity
testCompletedActivity = testProgress.getNextActivity();
+ testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
testUser,
testLesson);
- assertLearnerProgress(testCompletedActivity,TEST_RGRP_ACTIVITY_ID,TEST_RGRP_ACTIVITY_ID,2,"random grouping","random grouping");
+ assertLearnerProgress(testRootPreviousActivity,TEST_RGRP_ACTIVITY_ID,TEST_RGRP_ACTIVITY_ID,2,1,"random grouping","random grouping");
//progress from random grouping activity to chat
testCompletedActivity = testProgress.getNextActivity();
+ testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
testUser,
testLesson);
- assertLearnerProgress(testCompletedActivity,TEST_CHAT_ACTIVITY_ID,TEST_CHAT_ACTIVITY_ID,3,"chat","chat");
+ assertLearnerProgress(testRootPreviousActivity,TEST_CHAT_ACTIVITY_ID,TEST_CHAT_ACTIVITY_ID,3,1,"chat","chat");
//progress from chat to QNA
testCompletedActivity = testProgress.getNextActivity();
+ testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
testUser,
testLesson);
- assertLearnerProgress(testCompletedActivity,TEST_QNA_ACTIVITY_ID,TEST_QNA_ACTIVITY_ID,4,"QNA","QNA");
+ assertLearnerProgress(testRootPreviousActivity,TEST_QNA_ACTIVITY_ID,TEST_QNA_ACTIVITY_ID,4,1,"QNA","QNA");
//progress from QNA to options activity
testCompletedActivity = testProgress.getNextActivity();
+ testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
testUser,
testLesson);
- assertLearnerProgress(testCompletedActivity,TEST_OPTIONS_ACTIVITY_ID,TEST_OPTIONS_ACTIVITY_ID,5,"OPTIONS","OPTIONS");
+ assertLearnerProgress(testRootPreviousActivity,TEST_OPTIONS_ACTIVITY_ID,TEST_OPTIONS_ACTIVITY_ID,5,1,"OPTIONS","OPTIONS");
//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(testCompletedActivity.getParentActivity(),TEST_Parallel_ACTIVITY_ID,TEST_Parallel_ACTIVITY_ID,7,"PARALLEL","PARALLEL");
+ assertLearnerProgress(testRootPreviousActivity,TEST_PARALLEL_ACTIVITY_ID,TEST_PARALLEL_ACTIVITY_ID,7,1,"PARALLEL","PARALLEL");
//progress from sub parallel(QNA) to waiting
-/** testCompletedActivity = ((ParallelActivity)testProgress.getCurrentActivity()).getChildActivityById(TEST_CQNA_ACTIVITY_ID);
+ testCompletedActivity = ((ParallelActivity)testProgress.getCurrentActivity()).getChildActivityById(TEST_CQNA_ACTIVITY_ID);
+ //the previous activity should not be changed.
+ testRootPreviousActivity = testProgress.getPreviousActivity();
testProgress = learnerService.calculateProgress(testCompletedActivity,
testUser,
testLesson);
- assertLearnerProgress(testCompletedActivity,TEST_Parallel_ACTIVITY_ID,TEST_WAITING_ACTIVITY_ID,7,"PARALLEL","WAITING");
+ 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);
-*/
+ //progress from sub parallel(message board) to sub sequence activity(share resource)
+ testCompletedActivity = ((ParallelActivity)testProgress.getCurrentActivity()).getChildActivityById(TEST_MB_ACTIVITY_ID);
+ testRootPreviousActivity = testCompletedActivity.getParentActivity();
+ testProgress = learnerService.calculateProgress(testCompletedActivity,
+ testUser,
+ 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());
+
+ //progress from sub sequence(share resource) to sub sequence(QNA)
+ testCompletedActivity = testProgress.getNextActivity();
+ testRootPreviousActivity = testProgress.getPreviousActivity();
+ testProgress = learnerService.calculateProgress(testCompletedActivity,
+ testUser,
+ testLesson);
+ assertLearnerProgress(testRootPreviousActivity,TEST_SEQUENCE_ACTIVITY_ID,TEST_SQNA_ACTIVITY_ID,11,2,"SEQUENCE","QNA");
+
+ //progress sub sequence(QNA) to complete lesson
+ testCompletedActivity = testProgress.getNextActivity();
+ testProgress = learnerService.calculateProgress(testCompletedActivity,
+ testUser,
+ testLesson);
+ assertTrue("verify lesson complete",testProgress.isLessonComplete());
}
/**
+ * @param numberOfAttemptedAct TODO
* @param testCompletedActivity
*/
- private void assertLearnerProgress(Activity testCompletedActivity,
+ private void assertLearnerProgress(Activity testRootPreviousActivity,
long curActivityId,
long nextActivityId,
int numberOfCompletedActivities,
+ int numberOfAttemptedActivities,
String currentAct,
String nextAct)
{
assertEquals("verify the expected previous activity",
- testCompletedActivity.getActivityId(),
+ testRootPreviousActivity.getActivityId(),
testProgress.getPreviousActivity().getActivityId());
-
assertEquals("verify the expected current activity - "+currentAct,
curActivityId,
testProgress.getCurrentActivity().getActivityId().longValue());
+ //assert next activity, id is set to 0 if it is waiting activity
assertEquals("verify the expected next activity - "+ nextAct,
nextActivityId,
- testProgress.getNextActivity().getActivityId().longValue());
+ nextActivityId!=-1?testProgress.getNextActivity().getActivityId().longValue():-1);
assertEquals("verify the completed activities",numberOfCompletedActivities,testProgress.getCompletedActivities().size());
- assertEquals("verify the attempted activities",1,testProgress.getAttemptedActivities().size());
+ assertEquals("verify the attempted activities",numberOfAttemptedActivities,testProgress.getAttemptedActivities().size());
}
}