Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java =================================================================== diff -u -rff293679fc8795a794ba6226076e1775f5aa0f1f -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision ff293679fc8795a794ba6226076e1775f5aa0f1f) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -87,40 +87,6 @@ } /** - * Convenience method to get the requested activity. First check the - * request attribute to see if it has been loaded already this request. - * If not in request then load from the LearnerProgress using the forms - * activityId. If no activityId specified then return null. - * @param request - * @param form - * @param learnerProgress, the current LearerProgress - * @return Activity in request - */ - protected Activity getActivity(HttpServletRequest request, ActivityForm form, LearnerProgress learnerProgress) - { - Activity activity = (Activity)request.getAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE); - if (activity == null) - { - Long activityId = form.getActivityId(); - if (activityId != null) - activity = getLearnerService().getActivity(activityId); - } - return activity; - } - - /** - * Sets an Activity in the request attributes so that it can be used by - * actions forwarded to without reloading it. - * @param request - * @param activity - */ - protected void setActivity(HttpServletRequest request, Activity activity) - { - request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE, activity); - } - - - /** * Gets the session bean from session. * @return SessionBean for this request, null if no session. */ Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java =================================================================== diff -u -rfbdb2da2ab69a24876c89c0f37ca8eb30df40990 -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java (.../ChooseActivityAction.java) (revision fbdb2da2ab69a24876c89c0f37ca8eb30df40990) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java (.../ChooseActivityAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -30,11 +30,12 @@ import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learning.web.bean.SessionBean; 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.usermanagement.User; -import org.lamsfoundation.lams.learning.web.util.ActivityMapping; /** * @author daveg @@ -79,7 +80,7 @@ Lesson lesson = sessionBean.getLesson(); LearnerProgress progress = getLearnerProgress(request); - Activity activity = getActivity(request, form, progress); + Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService()); if (activity == null) { log.error(className+": No activity in request or session"); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java =================================================================== diff -u -rfbdb2da2ab69a24876c89c0f37ca8eb30df40990 -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java (.../CompleteActivityAction.java) (revision fbdb2da2ab69a24876c89c0f37ca8eb30df40990) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java (.../CompleteActivityAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -35,6 +35,7 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; +import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; /** * @author daveg @@ -82,7 +83,7 @@ Lesson lesson = sessionBean.getLesson(); LearnerProgress progress = getLearnerProgress(request); - Activity activity = getActivity(request, form, progress); + Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService()); if (activity == null) { log.error(className+": No activity in request or session"); @@ -98,13 +99,13 @@ catch (LearnerServiceException e) { return mapping.findForward("error"); } - request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE, progress.getNextActivity()); + LearningWebUtil.putActivityInRequest(request, progress.getNextActivity(), learnerService); // Save progress in session for Flash request sessionBean.setLearnerProgress(progress); setSessionBean(sessionBean, request); - ActionForward forward = actionMappings.getProgressForward(progress,true,request); + ActionForward forward = actionMappings.getProgressForward(progress,true,request, learnerService); return forward; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java =================================================================== diff -u -r06dd563d92f6e9e88c76b708f5d9aeb3a61d4dcb -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java (.../DisplayActivityAction.java) (revision 06dd563d92f6e9e88c76b708f5d9aeb3a61d4dcb) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java (.../DisplayActivityAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -79,7 +79,7 @@ log.debug("Entering display activity: the session bean is" + learnerProgress.toString()); - ActionForward forward =actionMappings.getProgressForward(learnerProgress,false,request); + ActionForward forward =actionMappings.getProgressForward(learnerProgress,false,request,getLearnerService()); if(log.isDebugEnabled()) log.debug(forward.toString()); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java =================================================================== diff -u -rfbdb2da2ab69a24876c89c0f37ca8eb30df40990 -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java (.../DisplayOptionsActivityAction.java) (revision fbdb2da2ab69a24876c89c0f37ca8eb30df40990) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java (.../DisplayOptionsActivityAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -39,6 +39,7 @@ import org.lamsfoundation.lams.learningdesign.OptionsActivity; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; +import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; /** * Action class to display an OptionsActivity. @@ -69,7 +70,7 @@ ActivityMapping actionMappings = getActivityMapping(); LearnerProgress learnerProgress = getLearnerProgress(request); - Activity activity = getActivity(request, form, learnerProgress); + Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService()); if (!(activity instanceof OptionsActivity)) { log.error(className+": activity not OptionsActivity "+activity.getActivityId()); return mapping.findForward(ActivityMapping.ERROR); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java =================================================================== diff -u -r06dd563d92f6e9e88c76b708f5d9aeb3a61d4dcb -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java (.../DisplayParallelActivityAction.java) (revision 06dd563d92f6e9e88c76b708f5d9aeb3a61d4dcb) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java (.../DisplayParallelActivityAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -35,6 +35,7 @@ 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; /** @@ -67,7 +68,7 @@ actionMappings.setActivityMappingStrategy(new ParallelActivityMappingStrategy()); LearnerProgress learnerProgress = getLearnerProgress(request); - Activity activity = getActivity(request, form, learnerProgress); + Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService()); if (!(activity instanceof ParallelActivity)) { log.error(className+": activity not ParallelActivity "+activity.getActivityId()); return mapping.findForward(ActivityMapping.ERROR); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java =================================================================== diff -u -rfbdb2da2ab69a24876c89c0f37ca8eb30df40990 -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java (.../DisplayToolActivityAction.java) (revision fbdb2da2ab69a24876c89c0f37ca8eb30df40990) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java (.../DisplayToolActivityAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -31,6 +31,7 @@ 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; /** * Action class to forward the user to a Tool. @@ -58,7 +59,7 @@ ActivityMapping actionMappings = getActivityMapping(); LearnerProgress learnerProgress = getLearnerProgress(request); - Activity activity = getActivity(request, form, learnerProgress); + Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService()); if (!(activity instanceof ToolActivity)) { log.error(className+": activity not ToolActivity"); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java =================================================================== diff -u -r70bc80f5a9f065d4e01234bc06515295eff8edde -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision 70bc80f5a9f065d4e01234bc06515295eff8edde) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -123,8 +123,8 @@ learnerService); learnerService.performGrouping((GroupingActivity)learnerProgress.getNextActivity(), currentLearners); - - request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE,learnerProgress.getNextActivity()); + + LearningWebUtil.putActivityInRequest(request, learnerProgress.getNextActivity(), learnerService); request.getSession().setAttribute(LearningWebUtil.ATTR_USER_DATA, learnerProgress.getUser()); request.getSession().setAttribute(LearningWebUtil.ATTR_LESSON_DATA, Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java =================================================================== diff -u -rfbdb2da2ab69a24876c89c0f37ca8eb30df40990 -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision fbdb2da2ab69a24876c89c0f37ca8eb30df40990) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -35,6 +35,7 @@ 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; /** * Action class to forward the user to a Tool using an intermediate loading page. @@ -52,6 +53,7 @@ /** * Gets an activity from the request (attribute) and forwards onto a * loading page. + * TODO when this is first called after creating a new tool session, ToolActivity isn't a ToolActivity - its a cglib. */ public ActionForward execute(ActionMapping mapping, ActionForm actionForm, @@ -62,8 +64,10 @@ ActivityMapping actionMappings = LearnerServiceProxy.getActivityMapping(this.getServlet().getServletContext()); LearnerProgress learnerProgress = getLearnerProgress(request); - Activity activity = getActivity(request, form, learnerProgress); - + Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService()); + + // With Hibernate 3.x the activity is sometimes the proxy, not a true + // ToolActivity. if (!(activity instanceof ToolActivity)) { log.error(className+": activity not ToolActivity"); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java =================================================================== diff -u -r60a2ec1b6dc4618652303d3c30b3854599942366 -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java (.../ActivityMapping.java) (revision 60a2ec1b6dc4618652303d3c30b3854599942366) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java (.../ActivityMapping.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -30,8 +30,8 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ForwardingActionForward; import org.apache.struts.action.RedirectingActionForward; +import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learning.service.LearnerServiceException; -import org.lamsfoundation.lams.learning.web.action.ActivityAction; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ParallelActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; @@ -109,7 +109,8 @@ */ public ActionForward getProgressForward(LearnerProgress progress, boolean redirect, - HttpServletRequest request) + HttpServletRequest request, + ILearnerService learnerService) { ActionForward actionForward = null; @@ -157,8 +158,9 @@ progress, redirect); //setup activity into request for display - request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE, - progress.getNextActivity()); + LearningWebUtil.putActivityInRequest(request, + progress.getNextActivity(), + learnerService); } } } @@ -349,4 +351,5 @@ { this.activityMappingStrategy = activityMappingStrategy; } + } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java =================================================================== diff -u -r06dd563d92f6e9e88c76b708f5d9aeb3a61d4dcb -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision 06dd563d92f6e9e88c76b708f5d9aeb3a61d4dcb) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -210,4 +210,19 @@ } return activity; } + + /** + * Put an activity into the request. Calls LearnerService to get the activity, to ensure + * that it is a "real" activity, not one of the cglib proxies. + * activity. + * @param request + * @param activity + */ + public static void putActivityInRequest(HttpServletRequest request, Activity activity, + ILearnerService learnerService) + { + Activity realActivity = learnerService.getActivity(activity.getActivityId()); + request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE, realActivity); + } + } Index: lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGroupingAction.java =================================================================== diff -u -r6faa51252d8f8117db65e0a58ff295def4cf7af9 -r571c9c2146353e8a22f613a1283422f0b799928e --- lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGroupingAction.java (.../TestGroupingAction.java) (revision 6faa51252d8f8117db65e0a58ff295def4cf7af9) +++ lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGroupingAction.java (.../TestGroupingAction.java) (revision 571c9c2146353e8a22f613a1283422f0b799928e) @@ -108,7 +108,7 @@ addRequestParameter("method", "viewGrouping"); addRequestParameter(LearningWebUtil.PARAM_USER_ID, TEST_LEARNER_ID); addRequestParameter(LearningWebUtil.PARAM_LESSON_ID, TEST_LESSON_ID); - request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE,groupingActivity); + LearningWebUtil.putActivityInRequest(request,groupingActivity,learnerService); actionPerform();