Index: lams_learning/conf/xdoclet/struts-forms.xml =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/conf/xdoclet/struts-forms.xml (.../struts-forms.xml) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/conf/xdoclet/struts-forms.xml (.../struts-forms.xml) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -1,6 +1,10 @@ - + + + + + @@ -12,6 +16,9 @@ + + + @@ -29,5 +36,9 @@ - + + + + + Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -24,30 +24,9 @@ /* $$Id$$ */ package org.lamsfoundation.lams.learning.web.action; -import java.io.UnsupportedEncodingException; - -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.lamsfoundation.lams.learning.progress.ProgressException; import org.lamsfoundation.lams.learning.service.ICoreLearnerService; -import org.lamsfoundation.lams.learning.service.LearnerServiceException; import org.lamsfoundation.lams.learning.service.LearnerServiceProxy; -import org.lamsfoundation.lams.learning.web.form.ActivityForm; -import org.lamsfoundation.lams.learning.web.util.ActivityMapping; -import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; -import org.lamsfoundation.lams.learningdesign.Activity; -import org.lamsfoundation.lams.learningdesign.LearningDesign; -import org.lamsfoundation.lams.lesson.LearnerProgress; -import org.lamsfoundation.lams.lesson.Lesson; -import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsAction; -import org.lamsfoundation.lams.web.util.AttributeNames; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.support.WebApplicationContextUtils; /** * Base class for all activity action classes. Each subclass should call @@ -66,80 +45,5 @@ return learnerService; } - /** Setup the progress string and the lesson id in the actionForm */ - public ActionForward setupProgressString(ActionForm actionForm, HttpServletRequest request) { - - LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request,getLearnerService()); - - ActivityForm activityForm = (ActivityForm) actionForm; - - // Calculate the progress summary. On join this method gets called twice, and we - // only want to calculate once - String progressSummary = activityForm.getProgressSummary(); - if ( progressSummary == null ) { - progressSummary = getProgressSummary(learnerProgress); - activityForm.setProgressSummary(progressSummary); - } - - Lesson currentLesson = learnerProgress.getLesson(); - if(currentLesson != null){ - activityForm.setLessonID(currentLesson.getLessonId()); - - LearningDesign currentDesign = currentLesson.getLearningDesign(); - if(currentDesign != null) - activityForm.setVersion(currentDesign.getDesignVersion()); - } - - - if(log.isDebugEnabled()) - log.debug("Entering activity: progress summary is "+activityForm.getProgressSummary()); - - return null; - } - private String getProgressSummary(LearnerProgress learnerProgress) { - StringBuffer progressSummary = new StringBuffer(100); - if ( learnerProgress == null ) { - progressSummary.append("attempted=&completed=¤t="); - progressSummary.append("&lessonID="); - Lesson currentLesson = learnerProgress.getLesson(); - if(currentLesson != null){ - progressSummary.append(currentLesson.getLessonId()); - } - } else { - progressSummary.append("attempted="); - boolean first = true; - for (Object obj : learnerProgress.getAttemptedActivities()) { - Activity activity = (Activity ) obj; - if ( ! first ) { - progressSummary.append("_"); - } else { - first = false; - } - progressSummary.append(activity.getActivityId()); - } - - progressSummary.append("&completed="); - first = true; - for ( Object obj : learnerProgress.getCompletedActivities() ) { - Activity activity = (Activity ) obj; - if ( ! first ) { - progressSummary.append("_"); - } else { - first = false; - } - progressSummary.append(activity.getActivityId()); - } - - progressSummary.append("¤t="); - Activity currentActivity = learnerProgress.getCurrentActivity(); - if ( currentActivity != null ) { - progressSummary.append(currentActivity.getActivityId()); - } - - } - return progressSummary.toString(); - } - - } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java =================================================================== diff -u -re2f253930f8168e89432857e3492f8aecb09c633 -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (.../BranchingActivityAction.java) (revision e2f253930f8168e89432857e3492f8aecb09c633) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (.../BranchingActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -49,7 +49,7 @@ * * XDoclet definition: * - * @struts:action path="/branching" + * @struts:action path="/Branching" * name="BranchingForm" * parameter="method" * validate="false" @@ -118,6 +118,8 @@ } forward = mapping.findForward("displayBranchingWait"); + LearningWebUtil.setupProgressInRequest(groupForm, request, learnerProgress); + } else { // forward to the sequence activity. if ( log.isDebugEnabled() ) { @@ -127,10 +129,10 @@ // 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); + LearningWebUtil.putLearnerProgressInRequest(request,learnerProgress); } } - - LearningWebUtil.putLearnerProgressInRequest(request,learnerProgress); + return forward; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java (.../ChooseActivityAction.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java (.../ChooseActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -31,6 +31,7 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.learning.service.ICoreLearnerService; +import org.lamsfoundation.lams.learning.web.form.ActivityForm; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.learningdesign.Activity; @@ -84,10 +85,8 @@ progress = learnerService.joinLesson(learnerId, lesson.getLessonId()); } - LearningWebUtil.putLearnerProgressInRequest(request,progress); - // need to do the choose first as the chooseActivity / joinLesson changes the progress details - setupProgressString(actionForm, request); + LearningWebUtil.setupProgressInRequest((ActivityForm)actionForm, request, progress); ActionForward forward = actionMappings.getActivityForward(activity, progress, true); return forward; Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java (.../CompleteActivityAction.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java (.../CompleteActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -25,26 +25,22 @@ package org.lamsfoundation.lams.learning.web.action; import java.io.IOException; -import java.io.UnsupportedEncodingException; -import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; 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.lamsfoundation.lams.learning.progress.ProgressException; import org.lamsfoundation.lams.learning.service.ICoreLearnerService; import org.lamsfoundation.lams.learning.service.LearnerServiceException; +import org.lamsfoundation.lams.learning.web.form.ActivityForm; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.lesson.LearnerProgress; -import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.util.WebUtil; -import org.lamsfoundation.lams.web.util.AttributeNames; /** * @author daveg @@ -96,7 +92,7 @@ return mapping.findForward("error"); } - setupProgressString(actionForm, request); + LearningWebUtil.setupProgressInRequest((ActivityForm)actionForm, request, progress); return forward; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java =================================================================== diff -u -r0b15f95c45e3f984eb6b422bb035fb6d9f824e82 -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java (.../DisplayActivityAction.java) (revision 0b15f95c45e3f984eb6b422bb035fb6d9f824e82) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java (.../DisplayActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -35,6 +35,7 @@ import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.learning.service.ICoreLearnerService; import org.lamsfoundation.lams.learning.service.LearnerServiceProxy; +import org.lamsfoundation.lams.learning.web.form.ActivityForm; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.lesson.LearnerProgress; @@ -95,15 +96,14 @@ lessonId = WebUtil.readLongParam(request,"progressId"); } LearnerProgress learnerProgress = learnerService.getProgress(learnerId, lessonId); - LearningWebUtil.putLearnerProgressInRequest(request, learnerProgress); // Normally this is used to display the initial page, so initialDisplay=true. But if called from the // special handling for completed activities (ie close window) then we need to set it to false. boolean displayParallelFrames = WebUtil.readBooleanParam(request, PARAM_INITIAL_DISPLAY, true); ActivityMapping actionMappings = LearnerServiceProxy.getActivityMapping(getServlet().getServletContext()); ActionForward forward =actionMappings.getProgressForward(learnerProgress,false,displayParallelFrames,request,learnerService); - setupProgressString(actionForm, request); + LearningWebUtil.setupProgressInRequest((ActivityForm)actionForm, request, learnerProgress); if(log.isDebugEnabled()) log.debug(forward); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java (.../DisplayOptionsActivityAction.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java (.../DisplayOptionsActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -117,7 +117,7 @@ this.saveToken(request); - setupProgressString(form, request); + LearningWebUtil.setupProgressInRequest(form, request, learnerProgress); String forward = "displayOptions"; return mapping.findForward(forward); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java (.../DisplayParallelActivityAction.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java (.../DisplayParallelActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -31,12 +31,12 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.lamsfoundation.lams.learning.service.ICoreLearnerService; import org.lamsfoundation.lams.learning.service.LearnerServiceProxy; import org.lamsfoundation.lams.learning.web.bean.ActivityURL; import org.lamsfoundation.lams.learning.web.form.ActivityForm; import org.lamsfoundation.lams.learningdesign.*; -import org.lamsfoundation.lams.lesson.*; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.learning.web.util.ParallelActivityMappingStrategy; @@ -64,15 +64,15 @@ HttpServletRequest request, HttpServletResponse response) { - setupProgressString(actionForm, request); ActivityForm form = (ActivityForm)actionForm; + ICoreLearnerService learnerService = getLearnerService(); ActivityMapping actionMappings = LearnerServiceProxy.getActivityMapping(this.getServlet().getServletContext()); actionMappings.setActivityMappingStrategy(new ParallelActivityMappingStrategy()); - Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService()); + Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService); if (!(activity instanceof ParallelActivity)) { log.error(className+": activity not ParallelActivity "+activity.getActivityId()); return mapping.findForward(ActivityMapping.ERROR); @@ -98,6 +98,8 @@ } form.setActivityURLs(activityURLs); + LearningWebUtil.setupProgressInRequest((ActivityForm)actionForm, request, LearningWebUtil.getLearnerProgress(request, learnerService)); + return mapping.findForward("displayParallel"); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java (.../DisplayToolActivityAction.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java (.../DisplayToolActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -31,6 +31,7 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.learning.service.ICoreLearnerService; +import org.lamsfoundation.lams.learning.web.form.ActivityForm; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.learningdesign.Activity; @@ -59,20 +60,21 @@ HttpServletRequest request, HttpServletResponse response) { - setupProgressString(actionForm, request); - //ActivityForm form = (ActivityForm)actionForm; ActivityMapping actionMappings = LearningWebUtil.getActivityMapping(this.getServlet().getServletContext()); ICoreLearnerService learnerService = getLearnerService(); LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService); Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService); + if (!(activity instanceof ToolActivity)) { log.error(className+": activity not ToolActivity"); return mapping.findForward(ActivityMapping.ERROR); } + LearningWebUtil.setupProgressInRequest((ActivityForm)actionForm, request, learnerProgress); + ToolActivity toolActivity = (ToolActivity)activity; String url = actionMappings.getLearnerToolURL(learnerProgress.getLesson(), toolActivity, learnerProgress.getUser()); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java (.../GateAction.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java (.../GateAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -49,8 +49,6 @@ import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsDispatchAction; import org.lamsfoundation.lams.web.util.AttributeNames; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.support.WebApplicationContextUtils; /** @@ -133,28 +131,32 @@ User learner = LearningWebUtil.getUser(learnerService); Lesson lesson = learnerService.getLesson(lessonId); - if ( activity != null ) { + // don't use LearningWebUtil.getLearnerProgress(request, learnerService) as it may try to get the lesson + // from the activity and the activity may be null (if this was a system stop gate). + LearnerProgress learnerProgress = (LearnerProgress)request.getAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE); + if ( learnerProgress == null ) { + learnerProgress = learnerService.getProgress(learner.getUserId(), lessonId); + } + + if ( activity != null ) { Integer totalNumActiveLearners = learnerService.getCountActiveLearnersByLesson(lesson.getLessonId()); //knock the gate boolean gateOpen = learnerService.knockGate(activityId,learner,forceGate); //if the gate is closed, ask the learner to wait ( updating the cached learner progress on the way ) if ( ! gateOpen) { - return findViewByGateType(mapping, (DynaActionForm)form, activity, totalNumActiveLearners, lesson); + ActionForward forward = findViewByGateType(mapping, (DynaActionForm)form, activity, totalNumActiveLearners, lesson); + LearningWebUtil.setupProgressInRequest((DynaActionForm)form, request, learnerProgress); + return forward; } } // gate is open, so let the learner go to the next activity ( updating the cached learner progress on the way ) - // don't use LearningWebUtil.getLearnerProgress(request, learnerService) as it may try to get the lesson - // from the activity and the activity may be null (if this was a system stop gate). - LearnerProgress learnerProgress = (LearnerProgress)request.getAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE); - if ( learnerProgress == null ) { - learnerProgress = learnerService.getProgress(learner.getUserId(), lessonId); - } return LearningWebUtil.completeActivity(request, response, actionMappings, learnerProgress, activity, learner.getUserId(), learnerService, true); + } //--------------------------------------------------------------------- Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -47,13 +47,10 @@ import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.lesson.LearnerProgress; -import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsDispatchAction; import org.lamsfoundation.lams.web.util.AttributeNames; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.support.WebApplicationContextUtils; /** @@ -151,7 +148,9 @@ groupForm.set("previewLesson",learnerProgress.getLesson().isPreviewLesson()); groupForm.set("title", activity.getTitle()); - if ( groupingDone ) { + LearningWebUtil.setupProgressInRequest(groupForm, request, learnerProgress); + + if ( groupingDone ) { request.setAttribute(FINISHED_BUTTON, Boolean.TRUE); return mapping.findForward(VIEW_GROUP); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LessonCompleteActivityAction.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LessonCompleteActivityAction.java (.../LessonCompleteActivityAction.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LessonCompleteActivityAction.java (.../LessonCompleteActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -30,6 +30,8 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.lamsfoundation.lams.learning.web.form.ActivityForm; +import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; @@ -62,8 +64,7 @@ HttpServletRequest request, HttpServletResponse response) { - - setupProgressString(actionForm, request); + LearningWebUtil.setupProgressInRequest((ActivityForm)actionForm, request, LearningWebUtil.getLearnerProgress(request, getLearnerService())); return mapping.findForward("lessonComplete"); } } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -69,7 +69,6 @@ HttpServletRequest request, HttpServletResponse response) { - setupProgressString(actionForm, request); ActivityForm form = (ActivityForm)actionForm; ActivityMapping actionMappings = LearnerServiceProxy.getActivityMapping(this.getServlet().getServletContext()); @@ -100,6 +99,7 @@ return mapping.findForward(ActivityMapping.ERROR); } + LearningWebUtil.setupProgressInRequest(form, request, learnerProgress); return mapping.findForward("displayTool"); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java =================================================================== diff -u -r83a60b6d3abdd08250edce24a25a78263cd6b984 -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java (.../SequenceActivityAction.java) (revision 83a60b6d3abdd08250edce24a25a78263cd6b984) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/SequenceActivityAction.java (.../SequenceActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -24,26 +24,17 @@ /* $$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.ActivityForm; -import org.lamsfoundation.lams.learning.web.form.OptionsActivityForm; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.NullActivity; -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; @@ -102,11 +93,10 @@ 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); + LearningWebUtil.setupProgressInRequest(form, request, learnerProgress); return forward; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java (.../ActivityMappingStrategy.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java (.../ActivityMappingStrategy.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -26,6 +26,7 @@ import java.io.Serializable; +import org.apache.log4j.Logger; import org.lamsfoundation.lams.learningdesign.Activity; /** @@ -34,7 +35,10 @@ */ public class ActivityMappingStrategy implements Serializable { + private static Logger log = Logger.getLogger(ActivityMappingStrategy.class); + private static final String PROGRESS_BROKEN_ACTION = "/progressBroken.do"; + /** * Returns the struts action used to display the specified activity. * @param activity, Activity to be displayed @@ -53,12 +57,13 @@ else if (activity.isOptionsActivity()) strutsAction = "/DisplayOptionsActivity.do"; else if (activity.isBranchingActivity()){ - strutsAction = "/LoadToolActivity.do"; + strutsAction = "/Branching.do?method=performBranching"; } else if ( activity.isSequenceActivity() ) { strutsAction = "/SequenceActivity.do"; } else { - // unexpected type, try the tool loading page - that will work for system tools - strutsAction = "/LoadToolActivity.do"; + // unexpected type + log.error("Unexpected complex activity type "+activity); + strutsAction = PROGRESS_BROKEN_ACTION; } } 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 =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -33,10 +33,13 @@ import org.apache.log4j.Logger; import org.apache.struts.action.ActionForward; +import org.apache.struts.action.DynaActionForm; import org.lamsfoundation.lams.learning.service.ICoreLearnerService; import org.lamsfoundation.lams.learning.service.LearnerServiceException; import org.lamsfoundation.lams.learning.web.action.ActivityAction; +import org.lamsfoundation.lams.learning.web.form.ActivityForm; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.usermanagement.User; @@ -232,5 +235,106 @@ return (ActivityMapping)wac.getBean("activityMapping"); } + /** Setup the progress string, version and lesson id in the activityForm. */ + public static void setupProgressInRequest(ActivityForm activityForm, HttpServletRequest request, LearnerProgress learnerProgress) { + + putLearnerProgressInRequest(request, learnerProgress); + + // Calculate the progress summary. On join this method gets called twice, and we + // only want to calculate once + String progressSummary = activityForm.getProgressSummary(); + if ( progressSummary == null ) { + progressSummary = getProgressSummary(learnerProgress); + activityForm.setProgressSummary(progressSummary); + } + + Lesson currentLesson = learnerProgress.getLesson(); + if(currentLesson != null){ + activityForm.setLessonID(currentLesson.getLessonId()); + + LearningDesign currentDesign = currentLesson.getLearningDesign(); + if(currentDesign != null) + activityForm.setVersion(currentDesign.getDesignVersion()); + } + + + if(log.isDebugEnabled()) + log.debug("Entering activity: progress summary is "+activityForm.getProgressSummary()); + + } + + /** Setup the progress string, version and lesson id in the actionForm. The values will go in the map with the + * keys "progressSummary", "lessonID", "version". */ + public static void setupProgressInRequest(DynaActionForm actionForm, HttpServletRequest request, LearnerProgress learnerProgress) { + + putLearnerProgressInRequest(request, learnerProgress); + // Calculate the progress summary. On join this method gets called twice, and we + // only want to calculate once + String progressSummary = (String) actionForm.get("progressSummary"); + if ( progressSummary == null ) { + progressSummary = getProgressSummary(learnerProgress); + actionForm.set("progressSummary",progressSummary); + } + + Lesson currentLesson = learnerProgress.getLesson(); + if(currentLesson != null){ + actionForm.set("lessonID",currentLesson.getLessonId()); + + LearningDesign currentDesign = currentLesson.getLearningDesign(); + if(currentDesign != null) + actionForm.set("version",currentDesign.getDesignVersion()); + } + + + if(log.isDebugEnabled()) + log.debug("Entering activity: progress summary is "+actionForm.get("progressSummary")); + + } + + private static String getProgressSummary(LearnerProgress learnerProgress) { + StringBuffer progressSummary = new StringBuffer(100); + if ( learnerProgress == null ) { + progressSummary.append("attempted=&completed=¤t="); + progressSummary.append("&lessonID="); + Lesson currentLesson = learnerProgress.getLesson(); + if(currentLesson != null){ + progressSummary.append(currentLesson.getLessonId()); + } + } else { + progressSummary.append("attempted="); + boolean first = true; + for (Object obj : learnerProgress.getAttemptedActivities()) { + Activity activity = (Activity ) obj; + if ( ! first ) { + progressSummary.append("_"); + } else { + first = false; + } + progressSummary.append(activity.getActivityId()); + } + + progressSummary.append("&completed="); + first = true; + for ( Object obj : learnerProgress.getCompletedActivities() ) { + Activity activity = (Activity ) obj; + if ( ! first ) { + progressSummary.append("_"); + } else { + first = false; + } + progressSummary.append(activity.getActivityId()); + } + + progressSummary.append("¤t="); + Activity currentActivity = learnerProgress.getCurrentActivity(); + if ( currentActivity != null ) { + progressSummary.append(currentActivity.getActivityId()); + } + + } + return progressSummary.toString(); + } + + } Index: lams_learning/web/WEB-INF/struts/struts-config.xml =================================================================== diff -u -r9481bb9c6f8c0e4d6fbed6b230a41c77feda64c6 -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/web/WEB-INF/struts/struts-config.xml (.../struts-config.xml) (revision 9481bb9c6f8c0e4d6fbed6b230a41c77feda64c6) +++ lams_learning/web/WEB-INF/struts/struts-config.xml (.../struts-config.xml) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -26,9 +26,13 @@ type="org.lamsfoundation.lams.learning.web.form.OptionsActivityForm" /> - + + + + + @@ -40,6 +44,9 @@ + + + @@ -50,6 +57,19 @@ + + + + + + + + + + + + + @@ -109,17 +129,17 @@ /> + + + + + + <%@ taglib uri="tags-lams" prefix="lams" %> - /branching.do?method=performBranching&type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID} + /Branching.do?type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID} Index: lams_learning/web/layout/branchingWaitLayout.jsp =================================================================== diff -u -rdd42ee56aadaa0f237dd0766a197cb418f182b7e -r5863520d75343b47f77b05ad3bd7045a9a39af49 --- lams_learning/web/layout/branchingWaitLayout.jsp (.../branchingWaitLayout.jsp) (revision dd42ee56aadaa0f237dd0766a197cb418f182b7e) +++ lams_learning/web/layout/branchingWaitLayout.jsp (.../branchingWaitLayout.jsp) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) @@ -33,7 +33,7 @@ <fmt:message key="${label.branching.title}"/> - /branching.do?method=performBranching&type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID} + /Branching.do?method=performBranching&type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID} &force=true