Index: lams_learning/build.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/build.xml,v
diff -u -r1.25 -r1.26
--- lams_learning/build.xml 5 Mar 2007 07:52:42 -0000 1.25
+++ lams_learning/build.xml 28 Jun 2007 06:49:36 -0000 1.26
@@ -235,6 +235,7 @@
+
@@ -327,6 +328,7 @@
+
Index: lams_learning/conf/language/lams/ApplicationResources.properties
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/conf/language/lams/ApplicationResources.properties,v
diff -u -r1.2 -r1.3
--- lams_learning/conf/language/lams/ApplicationResources.properties 8 May 2007 02:40:01 -0000 1.2
+++ lams_learning/conf/language/lams/ApplicationResources.properties 28 Jun 2007 06:50:15 -0000 1.3
@@ -75,6 +75,10 @@
mynotes.entry.no.title.label =No Title
message.progress.broken =An error has occurred and you cannot continue without LAMS recalculating your current activity. A staff member may be editing the lesson.
message.progress.broken.try.resume =Please select 'Resume' or close and reopen this window to continue. If this error re-occurs, wait a few minutes and then try again.
-
-
+label.branching.wait.message=You have stopped at a branching point. You cannot continue until your branch is selected in monitoring.
+label.branching.refresh.message=Click Next if you are told that the branch has been selected. This page will refresh automatically in 1 minute.
+label.branching.preview.message=As this is a preview, clicking Next will select the first branch and continue.
+label.branching.title=Branching
+label.sequence.empty.message=There are no activities to complete in this section. Click Next to continue.
+
#======= End labels: Exported 69 labels for en AU =====
Index: lams_learning/conf/language/lams/ApplicationResources_en_AU.properties
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/conf/language/lams/ApplicationResources_en_AU.properties,v
diff -u -r1.2 -r1.3
--- lams_learning/conf/language/lams/ApplicationResources_en_AU.properties 8 May 2007 02:40:01 -0000 1.2
+++ lams_learning/conf/language/lams/ApplicationResources_en_AU.properties 28 Jun 2007 06:50:15 -0000 1.3
@@ -75,6 +75,11 @@
mynotes.entry.no.title.label =No Title
message.progress.broken =An error has occurred and you cannot continue without LAMS recalculating your current activity. A staff member may be editing the lesson.
message.progress.broken.try.resume =Please select 'Resume' or close and reopen this window to continue. If this error re-occurs, wait a few minutes and then try again.
+label.branching.wait.message=You have stopped at a branching point. You cannot continue until your branch is selected in monitoring.
+label.branching.refresh.message=Click Next if you are told that the branch has been selected. This page will refresh automatically in 1 minute.
+label.branching.preview.message=As this is a preview, clicking Next will select the first branch and continue.
+label.branching.title=Branching
+label.sequence.empty.message=There are no activities to complete in this section. Click Next to continue.
#======= End labels: Exported 69 labels for en AU =====
Index: lams_learning/conf/xdoclet/struts-forms.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/conf/xdoclet/struts-forms.xml,v
diff -u -r1.10 -r1.11
--- lams_learning/conf/xdoclet/struts-forms.xml 9 May 2007 00:59:43 -0000 1.10
+++ lams_learning/conf/xdoclet/struts-forms.xml 28 Jun 2007 06:50:15 -0000 1.11
@@ -22,3 +22,12 @@
+
+
+
+
+
+
+
+
+
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml,v
diff -u -r1.20 -r1.21
--- lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml 1 Feb 2007 03:42:58 -0000 1.20
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml 28 Jun 2007 06:49:59 -0000 1.21
@@ -20,25 +20,23 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PROPAGATION_REQUIRED
@@ -82,11 +80,11 @@
-
+
-
+
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java,v
diff -u -r1.25 -r1.26
--- lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java 11 Jun 2007 23:43:00 -0000 1.25
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java 28 Jun 2007 06:49:59 -0000 1.26
@@ -34,7 +34,6 @@
import org.lamsfoundation.lams.learningdesign.LearningDesign;
import org.lamsfoundation.lams.learningdesign.ParallelActivity;
import org.lamsfoundation.lams.learningdesign.SequenceActivity;
-import org.lamsfoundation.lams.learningdesign.BranchingActivity;
import org.lamsfoundation.lams.learningdesign.Transition;
import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO;
import org.lamsfoundation.lams.lesson.LearnerProgress;
@@ -46,6 +45,8 @@
* The Progress Engine controls how a learner progresses
* through a sequence.
*
+ * Code must be re-entrant, as there is one progress engine object called by a singleton LearnerService.
+ *
* @author chris, Jacky
*/
public class ProgressEngine
@@ -55,14 +56,6 @@
private IActivityDAO activityDAO;
/**
- * 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 List completedActivityList = new LinkedList();
- /**
* Method determines next step for a learner based on the activity
* they have just completed. Will clear the Parallel Waiting Complete value if it is currently set.
* @param learner The User who is progressing through the Lesson.
@@ -80,15 +73,16 @@
if ( learnerProgress.getParallelWaiting() == LearnerProgress.PARALLEL_WAITING_COMPLETE ) {
learnerProgress.setParallelWaiting(LearnerProgress.PARALLEL_NO_WAIT);
}
- return doCalculateProgress(learner, completedActivity, learnerProgress);
+ return doCalculateProgress(learner, completedActivity, learnerProgress, new LinkedList());
}
/** Internal method used for recursion. Does the actual "work" of calculateProgress. */
private LearnerProgress doCalculateProgress(User learner,
Activity completedActivity,
- LearnerProgress learnerProgress) throws ProgressException
+ LearnerProgress learnerProgress,
+ List completedActivityList) throws ProgressException
{
- learnerProgress.setProgressState(completedActivity,
+ learnerProgress.setProgressState(completedActivity,
LearnerProgress.ACTIVITY_COMPLETED,
activityDAO);
completedActivityList.add(completedActivity.getActivityId());
@@ -98,11 +92,13 @@
return progressCompletedActivity(learner,
completedActivity,
learnerProgress,
- transition);
+ transition,
+ completedActivityList);
else
return progressParentActivity(learner,
completedActivity,
- learnerProgress);
+ learnerProgress,
+ completedActivityList);
}
/**
@@ -132,7 +128,7 @@
+"]");
} else if ( progress.getCompletedActivities().contains(ld.getFirstActivity()) ) {
// special case - recalculating the appropriate current activity.
- return doCalculateProgress(progress.getUser(), ld.getFirstActivity(), progress);
+ return doCalculateProgress(progress.getUser(), ld.getFirstActivity(), progress, new LinkedList());
} else if ( canDoActivity(progress.getLesson(), ld.getFirstActivity()) ) {
// normal case
progress.setCurrentActivity(ld.getFirstActivity());
@@ -190,7 +186,7 @@
}
/** Set the current activity as attempted. If it is a parallel activity, mark its children as attempted too. */
- private void setActivityAttempted(LearnerProgress progress, Activity activity) {
+ public void setActivityAttempted(LearnerProgress progress, Activity activity) {
progress.setProgressState(activity,LearnerProgress.ACTIVITY_ATTEMPTED, activityDAO);
activity.setReadOnly(true);
@@ -224,7 +220,8 @@
private LearnerProgress progressCompletedActivity(User learner,
Activity completedActivity,
LearnerProgress learnerProgress,
- Transition transition) throws ProgressException
+ Transition transition,
+ List completedActivityList) throws ProgressException
{
Activity nextActivity = transition.getToActivity();
@@ -233,23 +230,12 @@
learnerProgress.setPreviousActivity(completedActivity);
- populateCurrentCompletedActivityList(learnerProgress);
+ populateCurrentCompletedActivityList(learnerProgress, completedActivityList);
if ( canDoActivity(learnerProgress.getLesson(), nextActivity) ) {
learnerProgress.setCurrentActivity(nextActivity);
-
- //we set the next activity to be the first child activity if it
- //is a sequence activity.
- if(nextActivity.isSequenceActivity())
- {
- SequenceActivity sequence = (SequenceActivity) activityDAO.getActivityByActivityId(nextActivity.getActivityId(), SequenceActivity.class);
- Activity firstActivityInSequence = sequence.getFirstActivityInSequenceActivity();
- learnerProgress.setNextActivity(firstActivityInSequence);
- }
- //set next activity as the activity follows the transition.
- else
- learnerProgress.setNextActivity(nextActivity);
+ learnerProgress.setNextActivity(nextActivity);
setActivityAttempted(learnerProgress, nextActivity);
if ( learnerProgress.getParallelWaiting() == LearnerProgress.PARALLEL_WAITING )
learnerProgress.setParallelWaiting(LearnerProgress.PARALLEL_WAITING_COMPLETE );
@@ -264,7 +250,7 @@
// abnormal case: next activity already done. Must have jumped back to an earlier
// optional activity, done another activity and then kept going
- return doCalculateProgress(learner,nextActivity,learnerProgress);
+ return doCalculateProgress(learner,nextActivity,learnerProgress, completedActivityList);
}
}
@@ -288,7 +274,8 @@
*/
private LearnerProgress progressParentActivity(User learner,
Activity completedActivity,
- LearnerProgress learnerProgress) throws ProgressException
+ LearnerProgress learnerProgress,
+ List completedActivityList) throws ProgressException
{
Activity parent = completedActivity.getParentActivity();
@@ -319,13 +306,13 @@
{
learnerProgress.setParallelWaiting(LearnerProgress.PARALLEL_WAITING);
// learnerProgress.setNextActivity(null);
- populateCurrentCompletedActivityList(learnerProgress);
+ populateCurrentCompletedActivityList(learnerProgress, completedActivityList);
}
else if ( canDoActivity(learnerProgress.getLesson(), nextActivity) )
{
learnerProgress.setNextActivity(nextActivity);
setActivityAttempted(learnerProgress, nextActivity);
- populateCurrentCompletedActivityList(learnerProgress);
+ populateCurrentCompletedActivityList(learnerProgress, completedActivityList);
}
else {
learnerProgress = clearProgressNowhereToGoNotCompleted(learnerProgress, "progressParentActivity");
@@ -335,7 +322,7 @@
//parent activity.
else {
learnerProgress.setPreviousActivity(complexParent);
- doCalculateProgress(learner, parent, learnerProgress);
+ doCalculateProgress(learner, parent, learnerProgress, completedActivityList);
if ( learnerProgress.getParallelWaiting() == LearnerProgress.PARALLEL_WAITING )
learnerProgress.setParallelWaiting(LearnerProgress.PARALLEL_WAITING_COMPLETE );
}
@@ -354,7 +341,7 @@
* transition.
* @param learnerProgress
*/
- private void populateCurrentCompletedActivityList(LearnerProgress learnerProgress)
+ private void populateCurrentCompletedActivityList(LearnerProgress learnerProgress, List completedActivityList)
{
learnerProgress.setCurrentCompletedActivitiesList(completedActivityList);
completedActivityList.clear();
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java,v
diff -u -r1.7 -r1.8
--- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java 15 May 2007 23:39:53 -0000 1.7
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java 28 Jun 2007 06:49:59 -0000 1.8
@@ -29,7 +29,9 @@
import org.lamsfoundation.lams.learning.progress.ProgressEngine;
import org.lamsfoundation.lams.learning.progress.ProgressException;
import org.lamsfoundation.lams.learningdesign.Activity;
+import org.lamsfoundation.lams.learningdesign.BranchingActivity;
import org.lamsfoundation.lams.learningdesign.GateActivity;
+import org.lamsfoundation.lams.learningdesign.SequenceActivity;
import org.lamsfoundation.lams.lesson.LearnerProgress;
import org.lamsfoundation.lams.lesson.Lesson;
import org.lamsfoundation.lams.lesson.dto.LearnerProgressDTO;
@@ -258,4 +260,19 @@
* @return updated Learner Progress
*/
public LearnerProgress moveToActivity(Integer learnerId, Long lessonId, Activity fromActivity, Activity toActivity);
+
+ /**
+ * Work out which branch to which a user should go. If the current lesson is a preview lesson, it will force
+ * the user to a branch if at all possible.
+ *
+ * @param lesson current lesson.
+ * @param BranchingActivity the branching activity
+ * @param learnerId the learner who triggers the grouping.
+ * @param forceBranch if true and the lesson is a preview lesson then the branching is done irrespective of
+ * whether the teacher has set up all the mappings, allocated learner to branch, etc
+ * @return SequenceActivity that forms the branch if known, null if still awaiting teacher input.
+ * @throws LearnerServiceException
+ */
+ public SequenceActivity determineBranch(Lesson lesson, BranchingActivity branchingActivity, Integer learnerId) throws LearnerServiceException;
+
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java,v
diff -u -r1.64 -r1.65
--- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 29 May 2007 11:13:52 -0000 1.64
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 28 Jun 2007 06:49:59 -0000 1.65
@@ -35,9 +35,14 @@
import org.lamsfoundation.lams.learning.progress.ProgressException;
import org.lamsfoundation.lams.learning.web.util.ActivityMapping;
import org.lamsfoundation.lams.learningdesign.Activity;
+import org.lamsfoundation.lams.learningdesign.BranchingActivity;
import org.lamsfoundation.lams.learningdesign.GateActivity;
+import org.lamsfoundation.lams.learningdesign.Group;
+import org.lamsfoundation.lams.learningdesign.GroupBranchActivityEntry;
import org.lamsfoundation.lams.learningdesign.Grouping;
import org.lamsfoundation.lams.learningdesign.GroupingActivity;
+import org.lamsfoundation.lams.learningdesign.ParallelActivity;
+import org.lamsfoundation.lams.learningdesign.SequenceActivity;
import org.lamsfoundation.lams.learningdesign.ToolActivity;
import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO;
import org.lamsfoundation.lams.learningdesign.dao.IGroupingDAO;
@@ -85,11 +90,17 @@
// Inversion of Control Methods - Constructor injection
//---------------------------------------------------------------------
- /** Creates a new instance of LearnerService */
- public LearnerService(ProgressEngine progressEngine)
- {
+ /** Creates a new instance of LearnerService*/
+ public LearnerService(ProgressEngine progressEngine) {
this.progressEngine = progressEngine;
}
+
+ /** Creates a new instance of LearnerService. To be used by Spring, assuming the Spring
+ * will set up the progress engine via method injection. If you are creating the bean manually
+ * then use the other constructor. */
+ public LearnerService() {
+ }
+
//---------------------------------------------------------------------
// Inversion of Control Methods - Method injection
//---------------------------------------------------------------------
@@ -347,15 +358,11 @@
public LearnerProgress chooseActivity(Integer learnerId, Long lessonId, Activity activity)
{
LearnerProgress progress = learnerProgressDAO.getLearnerProgressByLearner(learnerId, lessonId);
-
- activity.setReadOnly(true);
- activityDAO.insertOrUpdate(activity);
-
- progress.setProgressState(activity, LearnerProgress.ACTIVITY_ATTEMPTED, activityDAO);
+ progressEngine.setActivityAttempted(progress, activity);
progress.setCurrentActivity(activity);
- progress.setNextActivity(activity);
+ progress.setNextActivity(activity);
+
learnerProgressDAO.saveLearnerProgress(progress);
-
return progress;
}
@@ -543,18 +550,13 @@
} else if ( forceGrouping ) {
// preview case for chosen grouping
- Lesson lesson = getLesson(lessonId);
- if ( lesson.isPreviewLesson() ) {
- ArrayList learnerList = new ArrayList();
- learnerList.add(learner);
- lessonService.performGrouping(groupingActivity, (String)null, learnerList);
- groupingDone = true;
- }
+ Lesson lesson = getLesson(lessonId);
+ groupingDone = forceGrouping(lesson, grouping, learner);
}
}
} else {
- String error = "Grouping activity "+groupingActivity.getActivityId()+" learner "+learnerId+" does not exist. Cannot perform grouping.";
+ String error = "Grouping activity "+groupingActivity+" learner "+learnerId+" does not exist. Cannot perform grouping.";
log.error(error);
throw new LearnerServiceException(error);
}
@@ -563,6 +565,17 @@
}
return groupingDone;
}
+
+ private boolean forceGrouping(Lesson lesson, Grouping grouping, User learner) {
+ boolean groupingDone = false;
+ if ( lesson.isPreviewLesson() ) {
+ ArrayList learnerList = new ArrayList();
+ learnerList.add(learner);
+ lessonService.performGrouping(grouping, (String)null, learnerList);
+ groupingDone = true;
+ }
+ return groupingDone;
+ }
/**
@@ -693,4 +706,94 @@
return (LessonDTO[])lessonDTOList.toArray(new LessonDTO[lessonDTOList.size()]);
}
+ /**
+ * @throws LearnerServiceException
+ * @see org.lamsfoundation.lams.learning.service.ICoreLearnerService#determineBranch(org.lamsfoundation.lams.lesson.Lesson, org.lamsfoundation.lams.learningdesign.BranchingActivity, java.lang.Integer)
+ */
+ public SequenceActivity determineBranch(Lesson lesson, BranchingActivity branchingActivity, Integer learnerId) throws LearnerServiceException
+ {
+ User learner = (User)userManagementService.findById(User.class,learnerId);
+ if ( learner == null ) {
+ String error = "determineBranch: learner "+learnerId+" does not exist. Cannot determine branch.";
+ log.error(error);
+ throw new LearnerServiceException(error);
+ }
+
+ if ( branchingActivity.isToolBranchingActivity() ) {
+ String message = "Tool based branching not yet supported. Activity was "+branchingActivity;
+ log.error(message);
+ throw new LearnerServiceException(message);
+
+ } else {
+ // assume either isGroupBranchingActivity() || isChosenBranchingActivity() )
+ // in both cases, the branch is based on the group the learner is in.
+ try {
+ return determineGroupBasedBranch(lesson, branchingActivity, learner);
+
+ } catch ( LessonServiceException e ) {
+ String message = "determineBranch failed due to "+e.getMessage();
+ log.error(message,e);
+ throw new LearnerServiceException("determineBranch failed due to "+e.getMessage(), e);
+ }
+ }
+ }
+
+ private SequenceActivity determineGroupBasedBranch(Lesson lesson, BranchingActivity branchingActivity, User learner)
+ {
+ SequenceActivity sequenceActivity = null;
+
+ if ( branchingActivity.getGrouping()!=null ) {
+ Grouping grouping = branchingActivity.getGrouping();
+
+ // If the user is in a group, then check if the group is assigned to a sequence activity. If it
+ // is then we are done and we return the sequence
+ Group group = grouping.getGroupBy(learner);
+ if ( group == null && lesson.isPreviewLesson()) {
+ // if it is preview, we force the user into a group.
+ if (forceGrouping(lesson, grouping, learner) ) {
+ group = grouping.getGroupBy(learner);
+ }
+ if ( log.isDebugEnabled() )
+ log.debug("Forced the user into group "+group+" for branching purposes.");
+ }
+
+ if ( group != null ) {
+ Iterator branchesIterator = group.getBranchActivities().iterator();
+ while (sequenceActivity==null && branchesIterator.hasNext()) {
+ GroupBranchActivityEntry branchActivityEntry = (GroupBranchActivityEntry) branchesIterator.next();
+ if ( branchActivityEntry.getBranchingActivity().equals(branchingActivity) )
+ sequenceActivity = branchActivityEntry.getBranchSequenceActivity();
+ }
+ if ( sequenceActivity == null && lesson.isPreviewLesson()) {
+ // how do we force them into a branch ? do we just pick one ? is that good enough for preview ?
+ Iterator iter= branchingActivity.getActivities().iterator();
+ if (iter.hasNext()) {
+ sequenceActivity = (SequenceActivity) iter.next();
+ }
+ if ( log.isDebugEnabled() )
+ log.debug("Forced the user into branch"+sequenceActivity);
+ }
+ }
+
+ if ( sequenceActivity != null ) {
+ if ( log.isDebugEnabled()) {
+ log.debug("Found branch "+sequenceActivity.getActivityId()+":"+ sequenceActivity.getTitle()
+ +" for branching activity "+branchingActivity.getActivityId()+":"+ branchingActivity.getTitle()
+ +" for learner "+learner.getUserId()+":"+learner.getLogin());
+ }
+ }
+
+ }
+
+ return sequenceActivity;
+ }
+
+ public ProgressEngine getProgressEngine() {
+ return progressEngine;
+ }
+
+ public void setProgressEngine(ProgressEngine progressEngine) {
+ this.progressEngine = progressEngine;
+ }
+
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java,v
diff -u -r1.26 -r1.27
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java 9 May 2007 00:59:43 -0000 1.26
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java 28 Jun 2007 06:49:58 -0000 1.27
@@ -97,14 +97,6 @@
return null;
}
- /**
- * Get the ActionMappings.
- */
- protected ActivityMapping getActivityMapping() {
- WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServlet().getServletContext());
- return (ActivityMapping)wac.getBean("activityMapping");
- }
-
private String getProgressSummary(LearnerProgress learnerProgress) {
StringBuffer progressSummary = new StringBuffer(100);
if ( learnerProgress == null ) {
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java,v
diff -u -r1.1 -r1.2
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java 11 Jun 2007 23:43:00 -0000 1.1
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java 28 Jun 2007 06:49:58 -0000 1.2
@@ -24,27 +24,23 @@
/* $$Id$$ */
package org.lamsfoundation.lams.learning.web.action;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.DynaActionForm;
import org.lamsfoundation.lams.learning.service.ICoreLearnerService;
-import org.lamsfoundation.lams.learning.web.bean.ActivityURL;
-import org.lamsfoundation.lams.learning.web.form.OptionsActivityForm;
+import org.lamsfoundation.lams.learning.service.LearnerServiceProxy;
import org.lamsfoundation.lams.learningdesign.Activity;
import org.lamsfoundation.lams.learningdesign.BranchingActivity;
-import org.lamsfoundation.lams.learningdesign.OptionsActivity;
+import org.lamsfoundation.lams.learningdesign.SequenceActivity;
import org.lamsfoundation.lams.lesson.LearnerProgress;
import org.lamsfoundation.lams.learning.web.util.ActivityMapping;
import org.lamsfoundation.lams.learning.web.util.LearningWebUtil;
+import org.lamsfoundation.lams.web.action.LamsDispatchAction;
/**
* Action class to display an OptionsActivity.
@@ -53,69 +49,93 @@
*
* XDoclet definition:
*
- * @struts:action path="/branching" name="optionsActivityForm"
- * input="/Activity.do" validate="false" scope="request"
+ * @struts:action path="/branching"
+ * name="BranchingForm"
+ * parameter="method"
+ * validate="false"
*
- * @struts:action-forward name="displayBranching" path=".branchingActivity"
+ * @struts:action-forward name="displayBranchingWait" path=".branchingActivityWait"
*
*/
-public class BranchingActivityAction extends ActivityAction {
+public class BranchingActivityAction extends LamsDispatchAction {
+ public static final String CHOSEN_TYPE = "chosen";
+ public static final String GROUP_BASED_TYPE = "group";
+ public static final String TOOL_BASED_TYPE = "tool";
+ private ICoreLearnerService learnerService = null;
+
+ protected ICoreLearnerService getLearnerService() {
+ if (learnerService == null)
+ learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
+ return learnerService;
+ }
+
/**
* Gets an options activity from the request (attribute) and forwards to
* the display JSP.
*/
- public ActionForward execute(
+ public ActionForward performBranching(
ActionMapping mapping,
ActionForm actionForm,
HttpServletRequest request,
HttpServletResponse response) {
- OptionsActivityForm form = (OptionsActivityForm)actionForm;
- ActivityMapping actionMappings = getActivityMapping();
-
- ICoreLearnerService learnerService = getLearnerService();
+
+ ActivityMapping actionMappings = LearningWebUtil.getActivityMapping(this.getServlet().getServletContext());
+ getLearnerService(); // initialise the learner service, if necessary
+
LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService);
Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService);
- if (!(activity instanceof BranchingActivity)) {
+ Integer learnerId = LearningWebUtil.getUserId();
+
+ ActionForward forward = null;
+
+ if (activity == null) {
+ learnerProgress = learnerService.joinLesson(learnerId, learnerProgress.getLesson().getLessonId());
+ forward = actionMappings.getActivityForward(activity, learnerProgress, true);
+
+ } else if (!(activity instanceof BranchingActivity)) {
log.error(className+": activity not BranchingActivity "+activity.getActivityId());
- return mapping.findForward(ActivityMapping.ERROR);
- }
+ forward = mapping.findForward(ActivityMapping.ERROR);
+
+ } else {
- BranchingActivity branchingActivity = (BranchingActivity)activity;
- form.setActivityID(branchingActivity.getActivityId());
+ BranchingActivity branchingActivity = (BranchingActivity)activity;
+ SequenceActivity branch = learnerService.determineBranch(learnerProgress.getLesson(),
+ branchingActivity, learnerId);
- List activityURLs = new ArrayList();
- Set subActivities = branchingActivity.getActivities();
- Iterator i = subActivities.iterator();
- int completedCount = 0;
- while (i.hasNext()) {
- Activity subActivity = (Activity)i.next();
- ActivityURL activityURL = new ActivityURL();
- String url = actionMappings.getActivityURL(subActivity);
- activityURL.setUrl(url);
- activityURL.setActivityId(subActivity.getActivityId());
- activityURL.setTitle(subActivity.getTitle());
- activityURL.setDescription(subActivity.getDescription());
- if (learnerProgress.getProgressState(subActivity) == LearnerProgress.ACTIVITY_COMPLETED) {
- activityURL.setComplete(true);
- completedCount++;
+ if ( branch == null ) {
+ // goto waiting page
+ DynaActionForm groupForm = (DynaActionForm)actionForm;
+ groupForm.set("activityID", activity.getActivityId());
+ groupForm.set("progressID", learnerProgress.getLearnerProgressId());
+ groupForm.set("previewLesson",learnerProgress.getLesson().isPreviewLesson()?Boolean.TRUE:Boolean.FALSE);
+ groupForm.set("showFinishButton", Boolean.TRUE);
+ groupForm.set("title", activity.getTitle());
+
+ if ( branchingActivity.isChosenBranchingActivity() ) {
+ groupForm.set("type", CHOSEN_TYPE);
+ } else if ( branchingActivity.isGroupBranchingActivity() ) {
+ groupForm.set("type", GROUP_BASED_TYPE);
+ } else if ( branchingActivity.isToolBranchingActivity() ) {
+ groupForm.set("type", TOOL_BASED_TYPE);
+ }
+
+ forward = mapping.findForward("displayBranchingWait");
+ } else {
+ // forward to the sequence activity.
+ if ( log.isDebugEnabled() ) {
+ log.debug("Branching: selecting the branch "+branch+" for user "+learnerId);
+ }
+
+ // Set the branch as the current part of the sequence and display it
+ learnerProgress = learnerService.chooseActivity(learnerId, learnerProgress.getLesson().getLessonId(), branch);
+ forward = actionMappings.getActivityForward(branch, learnerProgress, true);
}
- activityURLs.add(activityURL);
}
- form.setActivityURLs(activityURLs);
-
- form.setDescription(branchingActivity.getDescription());
- form.setTitle(branchingActivity.getTitle());
- form.setLessonID(learnerProgress.getLesson().getLessonId());
- form.setProgressID(learnerProgress.getLearnerProgressId());
-
- this.saveToken(request);
-
- setupProgressString(form, request);
- String forward = "displayBranching";
- return mapping.findForward(forward);
+ LearningWebUtil.putLearnerProgressInRequest(request,learnerProgress);
+ return forward;
}
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java,v
diff -u -r1.14 -r1.15
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java 9 May 2007 00:59:42 -0000 1.14
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java 28 Jun 2007 06:49:58 -0000 1.15
@@ -59,7 +59,7 @@
ActionForm actionForm,
HttpServletRequest request,
HttpServletResponse response) {
- ActivityMapping actionMappings = getActivityMapping();
+ ActivityMapping actionMappings = LearningWebUtil.getActivityMapping(this.getServlet().getServletContext());
// check token
if (!this.isTokenValid(request, true)) {
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java,v
diff -u -r1.15 -r1.16
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java 9 May 2007 00:59:41 -0000 1.15
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java 28 Jun 2007 06:49:58 -0000 1.16
@@ -73,7 +73,7 @@
ActionForm actionForm,
HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
- ActivityMapping actionMappings = getActivityMapping();
+ ActivityMapping actionMappings = LearningWebUtil.getActivityMapping(this.getServlet().getServletContext());
ICoreLearnerService learnerService = getLearnerService();
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java,v
diff -u -r1.17 -r1.18
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java 15 May 2007 23:39:53 -0000 1.17
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java 28 Jun 2007 06:49:58 -0000 1.18
@@ -71,7 +71,7 @@
HttpServletRequest request,
HttpServletResponse response) {
OptionsActivityForm form = (OptionsActivityForm)actionForm;
- ActivityMapping actionMappings = getActivityMapping();
+ ActivityMapping actionMappings = LearningWebUtil.getActivityMapping(this.getServlet().getServletContext());
ICoreLearnerService learnerService = getLearnerService();
LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService);
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java,v
diff -u -r1.12 -r1.13
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java 17 Sep 2006 06:17:57 -0000 1.12
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java 28 Jun 2007 06:49:58 -0000 1.13
@@ -62,7 +62,7 @@
setupProgressString(actionForm, request);
//ActivityForm form = (ActivityForm)actionForm;
- ActivityMapping actionMappings = getActivityMapping();
+ ActivityMapping actionMappings = LearningWebUtil.getActivityMapping(this.getServlet().getServletContext());
ICoreLearnerService learnerService = getLearnerService();
LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService);
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java,v
diff -u -r1.15 -r1.16
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java 9 May 2007 00:59:43 -0000 1.15
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java 28 Jun 2007 06:49:58 -0000 1.16
@@ -102,14 +102,6 @@
/** Input parameter. Boolean value */
public static final String PARAM_FORCE_GATE_OPEN = "force";
- /**
- * Get the ActionMappings.
- */
- protected ActivityMapping getActivityMapping() {
- WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServlet().getServletContext());
- return (ActivityMapping)wac.getBean("activityMapping");
- }
-
//---------------------------------------------------------------------
// Struts Dispatch Method
//---------------------------------------------------------------------
@@ -136,7 +128,7 @@
//initialize service object
ICoreLearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
Activity activity = learnerService.getActivity(activityId);
- ActivityMapping actionMappings = getActivityMapping();
+ ActivityMapping actionMappings = LearningWebUtil.getActivityMapping(this.getServlet().getServletContext());
User learner = LearningWebUtil.getUser(learnerService);
Lesson lesson = learnerService.getLesson(lessonId);
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java,v
diff -u -r1.26 -r1.27
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java 9 May 2007 00:59:40 -0000 1.26
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java 28 Jun 2007 06:49:58 -0000 1.27
@@ -106,14 +106,6 @@
public static final String WAIT_GROUP = "waitGroup";
public static final String SHOW_GROUP = "showGroup";
- /**
- * Get the ActionMappings.
- */
- protected ActivityMapping getActivityMapping() {
- WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServlet().getServletContext());
- return (ActivityMapping)wac.getBean("activityMapping");
- }
-
//---------------------------------------------------------------------
// Struts Dispatch Method
//---------------------------------------------------------------------
@@ -271,8 +263,9 @@
// so manually resume the progress. The completeActivity code can cope with a missing activity.
return LearningWebUtil.completeActivity(request, response,
- getActivityMapping(), progress, groupingActivity,
- learnerId, learnerService, true);
+ LearningWebUtil.getActivityMapping(this.getServlet().getServletContext()),
+ progress, groupingActivity,
+ learnerId, learnerService, true);
}
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java,v
diff -u -r1.13 -r1.14
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java 17 Sep 2006 06:17:57 -0000 1.13
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java 28 Jun 2007 06:49:58 -0000 1.14
@@ -39,6 +39,7 @@
import org.lamsfoundation.lams.learning.web.util.LearningWebUtil;
import org.lamsfoundation.lams.learningdesign.Activity;
import org.lamsfoundation.lams.lesson.LearnerProgress;
+import org.lamsfoundation.lams.web.util.AttributeNames;
/**
* Action class to forward the user to a Tool using an intermediate loading page. Can handle
@@ -57,7 +58,6 @@
public class LoadToolActivityAction extends ActivityAction {
public static final String DEFINE_LATER = "previewDefineLater";
- public static final String PARAM_ACTIVITY_TITLE = "activityTitle";
public static final String PARAM_ACTIVITY_URL = "activityURL";
/**
@@ -87,7 +87,7 @@
if ( activity.getDefineLater() && learnerProgress.getLesson().isPreviewLesson() ) {
// preview define later
- request.setAttribute(PARAM_ACTIVITY_TITLE, activity.getTitle());
+ request.setAttribute(AttributeNames.PARAM_TITLE, activity.getTitle());
request.setAttribute(PARAM_ACTIVITY_URL, url);
return mapping.findForward("previewDefineLater");
} else {
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java 28 Jun 2007 06:49:59 -0000 1.1
@@ -0,0 +1,113 @@
+/****************************************************************
+ * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org)
+ * =============================================================
+ * License Information: http://lamsfoundation.org/licensing/lams/2.0/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2.0
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ * USA
+ *
+ * http://www.gnu.org/licenses/gpl.txt
+ * ****************************************************************
+ */
+
+/* $$Id: SequenceActivityAction.java,v 1.1 2007/06/28 06:49:59 fmalikoff Exp $$ */
+package org.lamsfoundation.lams.learning.web.action;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.DynaActionForm;
+import org.lamsfoundation.lams.learning.service.ICoreLearnerService;
+import org.lamsfoundation.lams.learning.web.bean.ActivityURL;
+import org.lamsfoundation.lams.learning.web.form.ActivityForm;
+import org.lamsfoundation.lams.learning.web.form.OptionsActivityForm;
+
+import org.lamsfoundation.lams.learningdesign.Activity;
+import org.lamsfoundation.lams.learningdesign.OptionsActivity;
+import org.lamsfoundation.lams.learningdesign.SequenceActivity;
+import org.lamsfoundation.lams.lesson.LearnerProgress;
+import org.lamsfoundation.lams.learning.web.util.ActivityMapping;
+import org.lamsfoundation.lams.learning.web.util.LearningWebUtil;
+import org.lamsfoundation.lams.web.util.AttributeNames;
+
+/**
+ * Action class to display a sequence activity.
+ *
+ * Normally this will display the first activity inside a sequence activity.
+ * If there are no activities within the sequence activity then it will display
+ * an "empty" message.
+ *
+ * @struts:action path="/SequenceActivity" name="activityForm"
+ * validate="false" scope="request"
+ *
+ * @struts:action-forward name="empty" path=".sequenceActivityEmpty"
+ *
+ */
+public class SequenceActivityAction extends ActivityAction {
+
+
+ /**
+ * Gets an sequence activity from the request (attribute) and forwards to
+ * either the first activity in the sequence activity or the "empty" JSP.
+ */
+ public ActionForward execute(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+
+ ActivityForm form = (ActivityForm)actionForm;
+ ActivityMapping actionMappings = LearningWebUtil.getActivityMapping(this.getServlet().getServletContext());
+ Integer learnerId = LearningWebUtil.getUserId();
+
+ ICoreLearnerService learnerService = getLearnerService();
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService);
+ Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService);
+ if (!(activity instanceof SequenceActivity)) {
+ log.error(className+": activity not SequenceActivity "+activity.getActivityId());
+ return mapping.findForward(ActivityMapping.ERROR);
+ }
+
+ ActionForward forward = null;
+ SequenceActivity sequenceActivity = (SequenceActivity)activity;
+ Activity firstActivityInSequence = sequenceActivity.getFirstActivityInSequenceActivity();
+
+ if ( firstActivityInSequence != null && ! firstActivityInSequence.isNull() ) {
+ // Set the first activity as the current activity and display it
+ learnerProgress = learnerService.chooseActivity(learnerId, learnerProgress.getLesson().getLessonId(), firstActivityInSequence);
+ forward = actionMappings.getActivityForward(firstActivityInSequence, learnerProgress, true);
+ LearningWebUtil.putActivityInRequest(request, firstActivityInSequence, learnerService);
+ } else {
+ request.setAttribute(AttributeNames.PARAM_ACTIVITY_ID, activity.getActivityId());
+ request.setAttribute(AttributeNames.PARAM_TITLE, activity.getTitle());
+ request.setAttribute(AttributeNames.PARAM_LESSON_ID, learnerProgress.getLesson().getLessonId());
+ request.setAttribute(AttributeNames.PARAM_LEARNER_PROGRESS_ID, learnerProgress.getLearnerProgressId());
+ setupProgressString(form, request);
+ forward = mapping.findForward("empty");
+ }
+
+ LearningWebUtil.putLearnerProgressInRequest(request,learnerProgress);
+ return forward;
+
+ }
+
+}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java,v
diff -u -r1.15 -r1.16
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java 11 Jun 2007 23:43:00 -0000 1.15
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java 28 Jun 2007 06:49:58 -0000 1.16
@@ -52,9 +52,13 @@
strutsAction = "/DisplayParallelActivity.do";
else if (activity.isOptionsActivity())
strutsAction = "/DisplayOptionsActivity.do";
- else {
- // probably a branching activity
+ else if (activity.isBranchingActivity()){
strutsAction = "/LoadToolActivity.do";
+ } else if ( activity.isSequenceActivity() ) {
+ strutsAction = "/SequenceActivity.do";
+ } else {
+ // unexpected type, try the tool loading page - that will work for system tools
+ strutsAction = "/LoadToolActivity.do";
}
}
else // should be a simple activity - can handle tool, gates and grouping
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java,v
diff -u -r1.18 -r1.19
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java 18 May 2007 07:19:57 -0000 1.18
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java 28 Jun 2007 06:49:58 -0000 1.19
@@ -26,6 +26,7 @@
import java.io.UnsupportedEncodingException;
+import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@@ -43,6 +44,8 @@
import org.lamsfoundation.lams.util.WebUtil;
import org.lamsfoundation.lams.web.session.SessionManager;
import org.lamsfoundation.lams.web.util.AttributeNames;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.WebApplicationContextUtils;
/**
@@ -121,6 +124,7 @@
Long learnerProgressId = WebUtil.readLongParam(request,LearningWebUtil.PARAM_PROGRESS_ID, true);
// temp hack until Flash side updates it call.
if ( learnerProgressId == null ) {
+ log.error("Flash client still using progressId, instead of progressID in a learner call");
learnerProgressId = WebUtil.readLongParam(request,"progressId", true);
}
@@ -130,6 +134,7 @@
log.debug("getLearnerProgress: found progress via progress id");
}
}
+
}
if (learnerProgress == null)
@@ -165,6 +170,10 @@
activity = learnerService.getActivity(new Long(activityId));
+ if ( activity != null ) {
+ // getActivityFromRequest() may be called multiple times, so make it quicker next time
+ request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE, activity);
+ }
}
return activity;
}
@@ -215,4 +224,13 @@
return actionMappings.getProgressForward(progress, redirect, false, request, learnerService);
}
+ /**
+ * Get the ActionMappings.
+ */
+ public static ActivityMapping getActivityMapping(ServletContext context) {
+ WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
+ return (ActivityMapping)wac.getBean("activityMapping");
+ }
+
+
}
Fisheye: Tag 1.2 refers to a dead (removed) revision in file `lams_learning/web/branchingActivity.jsp'.
Fisheye: No comparison available. Pass `N' to diff?
Index: lams_learning/web/previewDefineLater.jsp
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/Attic/previewDefineLater.jsp,v
diff -u -r1.7 -r1.8
--- lams_learning/web/previewDefineLater.jsp 28 Sep 2006 23:29:23 -0000 1.7
+++ lams_learning/web/previewDefineLater.jsp 28 Jun 2007 06:50:42 -0000 1.8
@@ -33,7 +33,7 @@
-
+
Index: lams_learning/web/WEB-INF/struts/tiles-defs.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/WEB-INF/struts/Attic/tiles-defs.xml,v
diff -u -r1.26 -r1.27
--- lams_learning/web/WEB-INF/struts/tiles-defs.xml 9 May 2007 00:59:43 -0000 1.26
+++ lams_learning/web/WEB-INF/struts/tiles-defs.xml 28 Jun 2007 06:50:42 -0000 1.27
@@ -39,6 +39,11 @@
+
+
+
+
+
@@ -56,6 +61,9 @@
+
+
+
@@ -125,4 +133,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: lams_learning/web/branching/wait.jsp
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/branching/wait.jsp,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_learning/web/branching/wait.jsp 28 Jun 2007 06:50:42 -0000 1.1
@@ -0,0 +1,58 @@
+<%--
+Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org)
+License Information: http://lamsfoundation.org/licensing/lams/2.0/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2 as
+ published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ USA
+
+ http://www.gnu.org/licenses/gpl.txt
+--%>
+
+<%@ taglib uri="tags-html" prefix="html" %>
+<%@ taglib uri="tags-bean" prefix="bean" %>
+<%@ taglib uri="tags-logic" prefix="logic" %>
+<%@ taglib uri="tags-core" prefix="c" %>
+<%@ taglib uri="tags-fmt" prefix="fmt" %>
+<%@ taglib uri="tags-lams" prefix="lams" %>
+
+ /branching.do?method=performBranching&type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ &force=true
+
+
+
+
+
+
+
+
+
+
+
+
Index: lams_learning/web/layout/branchingWaitLayout.jsp
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/layout/branchingWaitLayout.jsp,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_learning/web/layout/branchingWaitLayout.jsp 28 Jun 2007 06:50:42 -0000 1.1
@@ -0,0 +1,48 @@
+<%--
+Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org)
+License Information: http://lamsfoundation.org/licensing/lams/2.0/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2 as
+ published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ USA
+
+ http://www.gnu.org/licenses/gpl.txt
+--%>
+
+<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=utf-8" %>
+<%@ taglib uri="tags-bean" prefix="bean"%>
+<%@ taglib uri="tags-html" prefix="html"%>
+<%@ taglib uri="tags-tiles" prefix="tiles"%>
+<%@ taglib uri="tags-core" prefix="c"%>
+<%@ taglib uri="tags-lams" prefix="lams" %>
+<%@ taglib uri="tags-fmt" prefix="fmt" %>
+
+
+
+
+
+
+
+ /branching.do?method=performBranching&type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID}
+
+ &force=true
+
+
+
+
+
+
+
+
+
+
Index: lams_learning/web/sequence/empty.jsp
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/sequence/Attic/empty.jsp,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_learning/web/sequence/empty.jsp 28 Jun 2007 06:50:42 -0000 1.1
@@ -0,0 +1,36 @@
+
+<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=utf-8" %>
+<%@ taglib uri="tags-bean" prefix="bean"%>
+<%@ taglib uri="tags-html" prefix="html"%>
+<%@ taglib uri="tags-core" prefix="c"%>
+<%@ taglib uri="tags-fmt" prefix="fmt" %>
+<%@ taglib uri="tags-lams" prefix="lams" %>
+
+