Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java =================================================================== diff -u -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 -rd9e5194732537256537b5e5896cf9656f2f9a435 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision d9e5194732537256537b5e5896cf9656f2f9a435) @@ -12,11 +12,15 @@ import org.lamsfoundation.lams.learning.service.DummyLearnerService; import org.lamsfoundation.lams.learning.web.bean.SessionBean; import org.lamsfoundation.lams.learning.web.form.ActivityForm; +import org.lamsfoundation.lams.learning.web.util.ActionMappings; +import org.lamsfoundation.lams.learning.web.util.ActionMappingsWithToolWait; import org.lamsfoundation.lams.usermanagement.*; import org.lamsfoundation.lams.web.action.Action; import org.lamsfoundation.lams.lesson.*; import org.lamsfoundation.lams.learningdesign.*; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; /** * MyEclipse Struts @@ -28,6 +32,9 @@ protected static final String ACTIVITY_REQUEST_ATTRIBUTE = "activity"; protected static final String LEARNER_PROGRESS_REQUEST_ATTRIBUTE = "learnerprogress"; + //protected ActionMappings actionMappings = new ActionMappingsWithToolWait(); + //protected ActionMappings actionMappings; + /** * Gets the session bean from session. * @return SessionBean for this request, null if no session. @@ -52,21 +59,37 @@ session.setAttribute(SessionBean.NAME, sessionBean); } + /** + * Get the learner service. + */ protected ILearnerService getLearnerService(HttpServletRequest request) { DummyLearnerService learnerService = (DummyLearnerService)LearnerServiceProxy.getLearnerService(this.getServlet().getServletContext()); learnerService.setRequest(request); + //learnerService.setActionMappings(actionMappings); return learnerService; } + /** + * Get the ActionMappings. + */ + protected ActionMappings getActionMappings() { + WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServlet().getServletContext()); + return (ActionMappings)wac.getBean("actionMappings"); + } + + /** + * Get the current learner progress. The request attributes are checked + * first, if not in request then a new LearnerProgress is loaded using + * the LearnerService. The LearnerProgress is also stored in the + * session so that the Flash requests don't have to reload it. + */ protected LearnerProgress getLearnerProgress(HttpServletRequest request, ActivityForm form) { LearnerProgress learnerProgress = (LearnerProgress)request.getAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE); if (learnerProgress == null) { SessionBean sessionBean = getSessionBean(request); User learner = sessionBean.getLeaner(); Lesson lesson = sessionBean.getLesson(); - //TestLearnerService learnerService = (TestLearnerService)LearnerServiceProxy.getLearnerService(this.getServlet().getServletContext()); - //learnerService.setRequest(request); ILearnerService learnerService = getLearnerService(request); learnerProgress = learnerService.getProgress(learner, lesson); @@ -77,6 +100,10 @@ return learnerProgress; } + /** + * Sets the LearnerProgress in session so that the Flash requests don't + * have to reload it. + */ protected void setLearnerProgress(HttpServletRequest request, LearnerProgress learnerProgress) { request.setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE, learnerProgress); @@ -86,21 +113,33 @@ setSessionBean(sessionBean, request); } + /** + * 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) { - // TODO: should this be current or next? - activity = learnerProgress.getCurrentActivity(); - } - else { + if (activityId != null) { activity = getActivity(activityId.longValue(), learnerProgress); } } 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); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivity.java =================================================================== diff -u -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 -rd9e5194732537256537b5e5896cf9656f2f9a435 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivity.java (.../ChooseActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivity.java (.../ChooseActivity.java) (revision d9e5194732537256537b5e5896cf9656f2f9a435) @@ -13,7 +13,6 @@ 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.Utils; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; @@ -43,18 +42,19 @@ HttpServletRequest request, HttpServletResponse response) { ActivityForm form = (ActivityForm) actionForm; + ActionMappings actionMappings = getActionMappings(); SessionBean sessionBean = ActivityAction.getSessionBean(request); if (sessionBean == null) { // forward to the no session error page - return mapping.findForward(ActionMappings.NO_SESSION_ERROR); + return mapping.findForward(actionMappings.NO_SESSION_ERROR); } // check token if (!this.isTokenValid(request, true)) { // didn't come here from options page log.info(className+": No valid token in request"); - return mapping.findForward(ActionMappings.DOUBLE_SUBMIT_ERROR); + return mapping.findForward(actionMappings.DOUBLE_SUBMIT_ERROR); } // Get learner @@ -66,13 +66,13 @@ if (activity == null) { log.error(className+": No activity in request or session"); - return mapping.findForward(ActionMappings.ERROR); + return mapping.findForward(actionMappings.ERROR); } ILearnerService learnerService = getLearnerService(request); learnerService.chooseActivity(learner, lesson, activity); - ActionForward forward = Utils.getActivityForward(activity, progress, true); + ActionForward forward = actionMappings.getActivityForward(activity, progress, true); return forward; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivity.java =================================================================== diff -u -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 -rd9e5194732537256537b5e5896cf9656f2f9a435 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivity.java (.../CompleteActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivity.java (.../CompleteActivity.java) (revision d9e5194732537256537b5e5896cf9656f2f9a435) @@ -13,7 +13,6 @@ 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.Utils; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; @@ -46,18 +45,19 @@ HttpServletRequest request, HttpServletResponse response) { ActivityForm form = (ActivityForm)actionForm; + ActionMappings actionMappings = getActionMappings(); SessionBean sessionBean = ActivityAction.getSessionBean(request); if (sessionBean == null) { // forward to the no session error page - return mapping.findForward(ActionMappings.NO_SESSION_ERROR); + return mapping.findForward(actionMappings.NO_SESSION_ERROR); } // check token if (!this.isTokenValid(request, true)) { // didn't come here from options page log.info(className+": No valid token in request"); - return mapping.findForward(ActionMappings.DOUBLE_SUBMIT_ERROR); + return mapping.findForward(actionMappings.DOUBLE_SUBMIT_ERROR); } // Get learner @@ -69,26 +69,25 @@ if (activity == null) { log.error(className+": No activity in request or session"); - return mapping.findForward(ActionMappings.ERROR); + return mapping.findForward(actionMappings.ERROR); } ILearnerService learnerService = getLearnerService(request); // Set activity as complete - LearnerProgress nextProgress = null; try { - nextProgress = learnerService.calculateProgress(activity, learner, lesson); + progress = learnerService.calculateProgress(activity, learner, lesson); } catch (ProgressException e) { return mapping.findForward("error"); } - request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE, nextProgress.getNextActivity()); + request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE, progress.getNextActivity()); // Save progress in session for Flash request - sessionBean.setLearnerProgress(nextProgress); + sessionBean.setLearnerProgress(progress); setSessionBean(sessionBean, request); - ActionForward forward = Utils.getNextActivityForward(progress, nextProgress, true); + ActionForward forward = actionMappings.getNextActivityForward(progress, true); return forward; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivity.java =================================================================== diff -u -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 -rd9e5194732537256537b5e5896cf9656f2f9a435 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivity.java (.../DisplayActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivity.java (.../DisplayActivity.java) (revision d9e5194732537256537b5e5896cf9656f2f9a435) @@ -19,8 +19,7 @@ import org.lamsfoundation.lams.lesson.*; /** - * MyEclipse Struts - * Creation date: 01-12-2005 + * Action class to display an activity. * * XDoclet definition: * @@ -32,21 +31,23 @@ protected static String className = "DisplayActivity"; - /** display - * Gets an activity from the request (attribute) and forwards onto the required - * jsp (SingleActivity or ParallelActivity). + /** + * Gets an activity from the request (attribute) and forwards onto a + * display action using the ActionMappings class. If no activity is + * in request then use the current activity in learnerProgress. */ public ActionForward execute( ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { ActivityForm form = (ActivityForm) actionForm; + ActionMappings actionMappings = getActionMappings(); SessionBean sessionBean = ActivityAction.getSessionBean(request); if (sessionBean == null) { // forward to the no session error page - return mapping.findForward(ActionMappings.NO_SESSION_ERROR); + return mapping.findForward(actionMappings.NO_SESSION_ERROR); } // Get learner @@ -57,48 +58,15 @@ Activity activity = getActivity(request, form, learnerProgress); if (activity == null) { - log.error(className+": No activity in request or session"); - return mapping.findForward(ActionMappings.ERROR); + /*log.error(className+": No activity in request or session"); + return mapping.findForward(actionMappings.ERROR);*/ + // Get current activity from learnerProgress + activity = learnerProgress.getCurrentActivity(); } + setActivity(request, activity); - ActionForward forward = displayActivity(activity, learnerProgress, mapping, form, request, response); + ActionForward forward = actionMappings.getActivityForward(activity, learnerProgress, false); return forward; } - /** - * Returns an ActionForward to display an activity. The forward returned is - * displayToolActivity for a ToolActivity, displayParallelActivity for a - * ParallelActivity and displayOptionsActivity for an OptionsActivity. The - * activity ID is also set as a request attribute (read by DisplayActivity). - */ - private ActionForward displayActivity(Activity activity, LearnerProgress progress, - ActionMapping mapping, ActivityForm activityForm, HttpServletRequest request, HttpServletResponse response) { - String forwardName = null; - - // This should not be done with instanceof, perhaps should use the class name - if (activity instanceof ComplexActivity) { - if (activity instanceof OptionsActivity) forwardName = "displayOptionsActivity"; - else if (activity instanceof ParallelActivity) forwardName = "displayParallelActivity"; - } - else if (activity instanceof SimpleActivity) { - forwardName = "displayToolActivity"; - } - - ActionForward forward = mapping.findForward(forwardName); - return forward; - } - - - private Activity getActivity(long activityId, LearnerProgress progress) { - Set activities = progress.getLesson().getLearningDesign().getActivities(); - Iterator i = activities.iterator(); - while (i.hasNext()) { - Activity activity = (Activity)i.next(); - if (activity.getActivityId().longValue() == activityId) { - return activity; - } - } - return null; - } - } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayLoadToolActivity.java =================================================================== diff -u --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayLoadToolActivity.java (revision 0) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayLoadToolActivity.java (revision d9e5194732537256537b5e5896cf9656f2f9a435) @@ -0,0 +1,65 @@ +//Created by MyEclipse Struts +// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.8.2/xslt/JavaClass.xsl + +package org.lamsfoundation.lams.learning.web.action; + +import javax.servlet.http.*; + +import java.util.*; + +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; +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.ActionMappings; + +/** + * Action class to forward the user to a Tool using an intermediate loading page. + * + * XDoclet definition: + * + * @struts:action path="/DisplayLoadToolActivity" name="activityForm" + * validate="false" scope="request" + * + * @struts:action-forward name="displayTool" path=".toolActivity" + * + */ +public class DisplayLoadToolActivity extends ActivityAction { + + /** + * Gets an activity from the request (attribute) and forwards onto a + * loading page. + */ + public ActionForward execute( + ActionMapping mapping, + ActionForm actionForm, + HttpServletRequest request, + HttpServletResponse response) { + ActivityForm form = (ActivityForm)actionForm; + ActionMappings actionMappings = getActionMappings(); + + LearnerProgress learnerProgress = getLearnerProgress(request, form); + Activity activity = getActivity(request, form, learnerProgress); + if (!(activity instanceof ToolActivity)) { + log.error(className+": activity not ToolActivity"); + return mapping.findForward(actionMappings.ERROR); + } + + ToolActivity toolActivity = (ToolActivity)activity; + + form.setActivityId(activity.getActivityId()); + + List activityURLs = new ArrayList(); + ActivityURL url = actionMappings.getToolURL(toolActivity, learnerProgress); + activityURLs.add(url); + form.setActivityURLs(activityURLs); + + String forward = "displayTool"; + return mapping.findForward(forward); + } + +} \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivity.java =================================================================== diff -u -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 -rd9e5194732537256537b5e5896cf9656f2f9a435 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivity.java (.../DisplayOptionsActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivity.java (.../DisplayOptionsActivity.java) (revision d9e5194732537256537b5e5896cf9656f2f9a435) @@ -18,14 +18,15 @@ import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.learning.web.bean.ActivityURL; import org.lamsfoundation.lams.learning.web.form.OptionsActivityForm; -import org.lamsfoundation.lams.learning.web.util.Utils; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.OptionsActivity; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.learning.web.util.ActionMappings; /** + * Action class to display an OptionsActivity. + * * @author daveg * * XDoclet definition: @@ -39,18 +40,23 @@ public class DisplayOptionsActivity extends ActivityAction { + /** + * Gets an options activity from the request (attribute) and forwards to + * the display JSP. + */ public ActionForward execute( ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { OptionsActivityForm form = (OptionsActivityForm)actionForm; + ActionMappings actionMappings = getActionMappings(); LearnerProgress learnerProgress = getLearnerProgress(request, form); Activity activity = getActivity(request, form, learnerProgress); if (!(activity instanceof OptionsActivity)) { log.error(className+": activity not OptionsActivity "+activity.getActivityId()); - return mapping.findForward(ActionMappings.ERROR); + return mapping.findForward(actionMappings.ERROR); } OptionsActivity optionsActivity = (OptionsActivity)activity; @@ -64,16 +70,21 @@ int completedCount = 0; while (i.hasNext()) { Activity subActivity = (Activity)i.next(); - ActivityURL url = Utils.getActivityURL(subActivity, learnerProgress); - activityURLs.add(url); + ActivityURL activityURL = actionMappings.getActivityURL(subActivity, learnerProgress); + activityURL.setTitle(subActivity.getTitle()); + activityURL.setDescription(subActivity.getDescription()); if (learnerProgress.getProgressState(subActivity) == LearnerProgress.ACTIVITY_COMPLETED) { + activityURL.setComplete(true); completedCount++; } + activityURLs.add(activityURL); } form.setActivityURLs(activityURLs); if (completedCount >= optionsActivity.getMinNumberOfOptions().intValue()) { form.setFinished(true); } + form.setMinimum(optionsActivity.getMinNumberOfOptions().intValue()); + form.setMaximum(optionsActivity.getMaxNumberOfOptions().intValue()); this.saveToken(request); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivity.java =================================================================== diff -u -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 -rd9e5194732537256537b5e5896cf9656f2f9a435 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivity.java (.../DisplayParallelActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivity.java (.../DisplayParallelActivity.java) (revision d9e5194732537256537b5e5896cf9656f2f9a435) @@ -12,15 +12,13 @@ import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.learning.web.bean.ActivityURL; import org.lamsfoundation.lams.learning.web.form.ActivityForm; -import org.lamsfoundation.lams.learning.web.util.Utils; import org.lamsfoundation.lams.learningdesign.*; import org.lamsfoundation.lams.lesson.*; import org.lamsfoundation.lams.learning.web.util.ActionMappings; /** - * MyEclipse Struts - * Creation date: 01-12-2005 + * Action class to display a ParallelActivity. * * XDoclet definition: * @@ -33,18 +31,23 @@ public class DisplayParallelActivity extends ActivityAction { + /** + * Gets a parallel activity from the request (attribute) and forwards to + * the display JSP. + */ public ActionForward execute( ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { ActivityForm form = (ActivityForm)actionForm; + ActionMappings actionMappings = getActionMappings(); LearnerProgress learnerProgress = getLearnerProgress(request, form); Activity activity = getActivity(request, form, learnerProgress); if (!(activity instanceof ParallelActivity)) { log.error(className+": activity not ParallelActivity "+activity.getActivityId()); - return mapping.findForward(ActionMappings.ERROR); + return mapping.findForward(actionMappings.ERROR); } ParallelActivity parallelActivity = (ParallelActivity)activity; @@ -57,12 +60,12 @@ Iterator i = subActivities.iterator(); while (i.hasNext()) { Activity subActivity = (Activity)i.next(); - ActivityURL url = Utils.getActivityURL(subActivity, learnerProgress); + ActivityURL url = actionMappings.getActivityURL(subActivity, learnerProgress); activityURLs.add(url); } if (activityURLs.size() == 0) { log.error(className+": No sub-activity URLs for activity "+activity.getActivityId()); - return mapping.findForward(ActionMappings.ERROR); + return mapping.findForward(actionMappings.ERROR); } form.setActivityURLs(activityURLs); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivity.java =================================================================== diff -u -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 -rd9e5194732537256537b5e5896cf9656f2f9a435 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivity.java (.../DisplayToolActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivity.java (.../DisplayToolActivity.java) (revision d9e5194732537256537b5e5896cf9656f2f9a435) @@ -12,55 +12,51 @@ import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.learning.web.bean.ActivityURL; import org.lamsfoundation.lams.learning.web.form.ActivityForm; -import org.lamsfoundation.lams.learning.web.util.Utils; import org.lamsfoundation.lams.learningdesign.*; import org.lamsfoundation.lams.lesson.*; import org.lamsfoundation.lams.learning.web.util.ActionMappings; /** - * MyEclipse Struts - * Creation date: 01-12-2005 + * Action class to forward the user to a Tool. * * XDoclet definition: * * @struts:action path="/DisplayToolActivity" name="activityForm" * validate="false" scope="request" * - * @struts:action-forward name="displayTool" path=".toolActivity" - * */ public class DisplayToolActivity extends ActivityAction { /** - * Gets an activity from the request (attribute) and forwards onto the required - * jsp (SingleActivity or ParallelActivity). + * Gets a tool activity from the request (attribute) and uses a redirect + * to forward the user to the tool. */ public ActionForward execute( ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { ActivityForm form = (ActivityForm)actionForm; + ActionMappings actionMappings = getActionMappings(); LearnerProgress learnerProgress = getLearnerProgress(request, form); Activity activity = getActivity(request, form, learnerProgress); if (!(activity instanceof ToolActivity)) { log.error(className+": activity not ToolActivity"); - return mapping.findForward(ActionMappings.ERROR); + return mapping.findForward(actionMappings.ERROR); } ToolActivity toolActivity = (ToolActivity)activity; - form.setActivityId(activity.getActivityId()); - - List activityURLs = new ArrayList(); - ActivityURL url = Utils.getToolURL(toolActivity, learnerProgress); - activityURLs.add(url); - form.setActivityURLs(activityURLs); - - String forward = "displayTool"; - return mapping.findForward(forward); + ActivityURL activityURL = actionMappings.getToolURL(toolActivity, learnerProgress); + try { + response.sendRedirect(activityURL.getUrl()); + } + catch (java.io.IOException e) { + return mapping.findForward(actionMappings.ERROR); + } + return null; } } \ No newline at end of file