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.16 -r1.17 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java 5 Apr 2005 00:20:55 -0000 1.16 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java 16 Nov 2005 05:25:03 -0000 1.17 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java,v diff -u -r1.3 -r1.4 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java 17 Mar 2005 00:07:34 -0000 1.3 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java 16 Nov 2005 05:25:03 -0000 1.4 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java,v diff -u -r1.3 -r1.4 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java 17 Mar 2005 00:07:34 -0000 1.3 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java 16 Nov 2005 05:25:03 -0000 1.4 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java,v diff -u -r1.7 -r1.8 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java 31 Mar 2005 07:36:22 -0000 1.7 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java 16 Nov 2005 05:25:03 -0000 1.8 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java,v diff -u -r1.2 -r1.3 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java 17 Mar 2005 00:07:34 -0000 1.2 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java 16 Nov 2005 05:25:03 -0000 1.3 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java,v diff -u -r1.4 -r1.5 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java 31 Mar 2005 07:36:22 -0000 1.4 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java 16 Nov 2005 05:25:03 -0000 1.5 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java,v diff -u -r1.2 -r1.3 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java 17 Mar 2005 00:07:34 -0000 1.2 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java 16 Nov 2005 05:25:03 -0000 1.3 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java,v diff -u -r1.5 -r1.6 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java 14 Sep 2005 01:00:39 -0000 1.5 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java 16 Nov 2005 05:25:03 -0000 1.6 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java,v diff -u -r1.3 -r1.4 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java 17 Mar 2005 00:07:34 -0000 1.3 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java 16 Nov 2005 05:25:03 -0000 1.4 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java,v diff -u -r1.10 -r1.11 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java 9 Nov 2005 04:48:50 -0000 1.10 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java 16 Nov 2005 05:25:03 -0000 1.11 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java,v diff -u -r1.4 -r1.5 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java 31 Mar 2005 07:36:22 -0000 1.4 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java 16 Nov 2005 05:25:04 -0000 1.5 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/Attic/TestGroupingAction.java,v diff -u -r1.6 -r1.7 --- lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGroupingAction.java 30 Aug 2005 04:52:10 -0000 1.6 +++ lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGroupingAction.java 16 Nov 2005 05:25:04 -0000 1.7 @@ -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();