Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java =================================================================== diff -u -rd7797468cd2f9f6f327ea62eb074f89104743cf9 -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision d7797468cd2f9f6f327ea62eb074f89104743cf9) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) @@ -7,53 +7,32 @@ import java.util.*; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.actions.DispatchAction; -import org.lamsfoundation.lams.learning.service.LearnerServiceException; +import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learning.service.LearnerServiceProxy; -import org.lamsfoundation.lams.learning.service.TestLearnerService; +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.usermanagement.*; +import org.lamsfoundation.lams.web.action.Action; import org.lamsfoundation.lams.lesson.*; import org.lamsfoundation.lams.learningdesign.*; /** * MyEclipse Struts * Creation date: 01-12-2005 * - * XDoclet definition: - * - * @struts:action path="/Activity" name="activityForm" parameter="method" - * validate="false" scope="request" - * - * -- Load one or more URLs to display an activity - * @struts:action-forward name="displayToolActivity" path="/DisplayToolActivity.do" - * @struts:action-forward name="displayParallelActivity" path="/DisplayParallelActivity.do" - * @struts:action-forward name="displayOptionsActivity" path="/DisplayOptionsActivity.do" - * -- Wait message for gate activity - * @struts:action-forward name="displayGateActivity" path="/DisplayGateActivity.do" - * - * -- Tell browser to request next activity. Needed because the parallel - * -- activity frames need to be cleared by the client. - * @struts:action-forward name="requestDisplay" path=".requestDisplay" - * - * -- "Complete other activity" message - * @struts:action-forward name="parallelWait" path=".parallelWait" redirect="true" - * -- Sequence complete message - * @struts:action-forward name="lessonComplete" path=".lessonComplete" redirect="true" - * */ -public class ActivityAction extends DispatchAction { +public class ActivityAction extends Action { + protected static final String ACTIVITY_REQUEST_ATTRIBUTE = "activity"; + protected static final String LEARNER_PROGRESS_REQUEST_ATTRIBUTE = "learnerprogress"; + /** * Gets the session bean from session. * @return SessionBean for this request, null if no session. */ - protected SessionBean getSessionBean(HttpServletRequest request) { + protected static SessionBean getSessionBean(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session == null) { return null; @@ -65,274 +44,70 @@ /** * Sets the session bean for this session. */ - protected void setSessionBean(SessionBean sessionBean, HttpServletRequest request) { + protected static void setSessionBean(SessionBean sessionBean, HttpServletRequest request) { HttpSession session = request.getSession(false); if (session == null) { return; } session.setAttribute(SessionBean.NAME, sessionBean); } - /** - * Temporary method for testing. To use point the browser to /Activity.do?method=test - */ - public ActionForward test( - ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) { - ActivityForm activityForm = (ActivityForm) form; - - SessionBean sessionBean = new SessionBean(); - setSessionBean(sessionBean, request); - - TestLearnerService learnerService = (TestLearnerService)LearnerServiceProxy.getLearnerService(this.getServlet().getServletContext()); + protected ILearnerService getLearnerService(HttpServletRequest request) { + DummyLearnerService learnerService = (DummyLearnerService)LearnerServiceProxy.getLearnerService(this.getServlet().getServletContext()); learnerService.setRequest(request); - learnerService.clearProgress(); - //activityForm.setActivityId(new Long(1)); - - return displayCurrent(mapping, form, request, response); + return learnerService; } - - /** - * Loads an activity using the activityId and forwards onto the required display - * action (displayToolActivity, displayParallelActivity, etc.). - */ - public ActionForward display( - ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) { - ActivityForm activityForm = (ActivityForm) form; - - // TODO: should we use a page forward or throw an exception for no session? - SessionBean sessionBean = getSessionBean(request); - if (sessionBean == null) { - // forward to the no session error page - return mapping.findForward("noSessionError"); - } - - TestLearnerService learnerService = (TestLearnerService)LearnerServiceProxy.getLearnerService(this.getServlet().getServletContext()); - learnerService.setRequest(request); - - // Get learner - User learner = sessionBean.getLeaner(); - // Get lesson - Lesson lesson = sessionBean.getLesson(); - // Get learnerProgress - LearnerProgress progress = sessionBean.getLearnerProgress(); - if (progress == null) { - progress = learnerService.getProgress(learner, lesson); - sessionBean.setLearnerProgress(progress); + + 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); + + // Save progress in session for Flash request + sessionBean.setLearnerProgress(learnerProgress); setSessionBean(sessionBean, request); } - - // Find requested activity - Long activityId = activityForm.getActivityId(); - if (activityId == null) { - return mapping.findForward("error"); - } - Activity activity = getActivity(activityId.longValue(), progress); - if (activity == null) { - // TODO: log error - return mapping.findForward("error"); - } - - ActionForward forward = displayActivity(activity, progress, mapping, activityForm, request, response); - - return forward; + return learnerProgress; } + + protected void setLearnerProgress(HttpServletRequest request, LearnerProgress learnerProgress) { + request.setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE, learnerProgress); - /** - * Loads the current activity and forwards onto the required display - * action (same as for display method). - */ - public ActionForward displayCurrent( - ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) { - ActivityForm activityForm = (ActivityForm) form; - - // TODO: should we use a page forward or throw an exception for no session? SessionBean sessionBean = getSessionBean(request); - if (sessionBean == null) { - // forward to the no session error page - return mapping.findForward("noSessionError"); - } - - TestLearnerService learnerService = (TestLearnerService)LearnerServiceProxy.getLearnerService(this.getServlet().getServletContext()); - learnerService.setRequest(request); - - // Get learner - User learner = sessionBean.getLeaner(); - // Get lesson - Lesson lesson = sessionBean.getLesson(); - // Get learnerProgress - LearnerProgress progress = sessionBean.getLearnerProgress(); - if (progress == null) { - progress = learnerService.getProgress(learner, lesson); - sessionBean.setLearnerProgress(progress); - setSessionBean(sessionBean, request); - } - - // Get current activity - Activity activity = progress.getCurrentActivity(); - - ActionForward forward = null; - // TODO: If null need to check for lesson complete or not started - if (activity == null) { - if (progress.isLessonComplete()) { - forward = mapping.findForward("lessonComplete"); - } - else { - // TODO: log error - return mapping.findForward("error"); - } - } - else { - forward = displayActivity(activity, progress, mapping, activityForm, request, response); - } - - return forward; - } - - /** - * Sets the current activity as complete and uses the progress engine to find - * the next activity (may be null). Note that the activity being completed may be - * part of a parallel activity. - * Forwards onto the required display action (displayToolActivity, - * displayParallelActivity, etc.). - */ - public ActionForward complete( - ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) throws LearnerServiceException { - ActivityForm activityForm = (ActivityForm) form; - - // TODO: should we use a page forward or throw an exception for no session? - SessionBean sessionBean = getSessionBean(request); - if (sessionBean == null) { - // forward to the no session error page - return mapping.findForward("noSessionError"); - } - - TestLearnerService learnerService = (TestLearnerService)LearnerServiceProxy.getLearnerService(this.getServlet().getServletContext()); - learnerService.setRequest(request); - - // Get learner - User learner = sessionBean.getLeaner(); - // Get lesson - Lesson lesson = sessionBean.getLesson(); - // Get learnerProgress - LearnerProgress progress = sessionBean.getLearnerProgress(); - if (progress == null) { - progress = learnerService.getProgress(learner, lesson); - } - - // Find requested activity - // The activity must be a current activity - // TODO: or can the activity be non-current and not complete? - Long activityId = activityForm.getActivityId(); - Activity activity = getActivity(activityId.longValue(), progress); - - // if not current then error - if (activity == null) { - // TODO: log error - return mapping.findForward("error"); - } - - // Set activity as complete - LearnerProgress nextProgress = learnerService.calculateProgress(activity, learner, lesson); - - //ActionForward forward = displayNextActivity(activity, nextProgress, mapping, activityForm, request, response); - ActionForward forward = displayNextActivity(progress, nextProgress, mapping, activityForm, request, response); - sessionBean.setLearnerProgress(nextProgress); + // Save progress in session for Flash request + sessionBean.setLearnerProgress(learnerProgress); setSessionBean(sessionBean, request); - - return forward; } - - - /** - * Display the next activity in progress. - * The just finished activity is needed to display the current progress because - * ParallelActivity may require that the client re-request the activity or display - * a "patially complete" message. - * @param previousProgress, the progress before the activity was completed - * @param progress, the current progress - */ - private ActionForward displayNextActivity(LearnerProgress previousProgress, LearnerProgress progress, - ActionMapping mapping, ActivityForm activityForm, HttpServletRequest request, HttpServletResponse response) throws LearnerServiceException { - - ActionForward forward = null; - - if (progress.isLessonComplete()) { - forward = mapping.findForward("lessonComplete"); - } - else { - Activity nextActivity = progress.getNextActivity(); - Activity currentActivity = progress.getCurrentActivity(); - Activity previousActivity = previousProgress.getCurrentActivity(); - if (nextActivity == null) { - if (previousActivity == currentActivity) { - if (previousActivity instanceof ParallelActivity) { - forward = mapping.findForward("parallelWait"); - } - else { - nextActivity = currentActivity; - forward = displayActivity(nextActivity, progress, mapping, activityForm, request, response); - } - } - else { - if (previousActivity instanceof ParallelActivity) { - nextActivity = currentActivity; - forward = mapping.findForward("requestDisplay"); - } - else { - nextActivity = currentActivity; - forward = displayActivity(nextActivity, progress, mapping, activityForm, request, response); - } - } + + 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 { - forward = displayActivity(nextActivity, progress, mapping, activityForm, request, response); + activity = getActivity(activityId.longValue(), learnerProgress); } - if (nextActivity != null) request.setAttribute("activityId", nextActivity.getActivityId()); } - - return forward; + return activity; } - - /** - * 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"; - } - - Long activityId = activity.getActivityId(); - request.setAttribute("activityId", activityId); - - ActionForward forward = mapping.findForward(forwardName); - return forward; + protected void setActivity(HttpServletRequest request, Activity activity) { + request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE, activity); } - /** A quick method to get an activity from within a progress. This method is + + /** TODO: replace method + * A quick method to get an activity from within a progress. This method is * temporary. */ private Activity getActivity(long activityId, LearnerProgress progress) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivity.java =================================================================== diff -u --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivity.java (revision 0) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivity.java (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) @@ -0,0 +1,79 @@ +/* + * Created on 4/02/2005 + * + */ +package org.lamsfoundation.lams.learning.web.action; + +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.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; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.learning.web.util.ActionMappings; + +/** + * @author daveg + * + * XDoclet definition: + * + * @struts:action path="/ChooseActivity" name="activityForm" + * validate="false" scope="request" + * + */ +public class ChooseActivity extends ActivityAction { + + protected static String className = "ChooseActivity"; + + /** + * Gets an activity from the request (attribute) and forwards onto the required + * jsp (SingleActivity or ParallelActivity). + */ + public ActionForward execute( + ActionMapping mapping, + ActionForm actionForm, + HttpServletRequest request, + HttpServletResponse response) { + ActivityForm form = (ActivityForm) actionForm; + + SessionBean sessionBean = ActivityAction.getSessionBean(request); + if (sessionBean == null) { + // forward to the no session error page + 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); + } + + // Get learner + User learner = sessionBean.getLeaner(); + Lesson lesson = sessionBean.getLesson(); + + LearnerProgress progress = getLearnerProgress(request, form); + Activity activity = getActivity(request, form, progress); + + if (activity == null) { + log.error(className+": No activity in request or session"); + return mapping.findForward(ActionMappings.ERROR); + } + + ILearnerService learnerService = getLearnerService(request); + learnerService.chooseActivity(learner, lesson, activity); + + ActionForward forward = Utils.getActivityForward(activity, progress, true); + return forward; + } + +} Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivity.java =================================================================== diff -u --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivity.java (revision 0) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivity.java (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) @@ -0,0 +1,96 @@ +/* + * Created on 4/02/2005 + * + */ +package org.lamsfoundation.lams.learning.web.action; + +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.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; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.learning.web.util.ActionMappings; + +/** + * @author daveg + * + * XDoclet definition: + * + * @struts:action path="/CompleteActivity" name="activityForm" + * validate="false" scope="request" + * + */ +public class CompleteActivity extends ActivityAction { + + protected static String className = "CompleteActivity"; + + /** + * Sets the current activity as complete and uses the progress engine to find + * the next activity (may be null). Note that the activity being completed may be + * part of a parallel activity. + * Forwards onto the required display action (displayToolActivity, + * displayParallelActivity, etc.). + */ + public ActionForward execute( + ActionMapping mapping, + ActionForm actionForm, + HttpServletRequest request, + HttpServletResponse response) { + ActivityForm form = (ActivityForm)actionForm; + + SessionBean sessionBean = ActivityAction.getSessionBean(request); + if (sessionBean == null) { + // forward to the no session error page + 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); + } + + // Get learner + User learner = sessionBean.getLeaner(); + Lesson lesson = sessionBean.getLesson(); + + LearnerProgress progress = getLearnerProgress(request, form); + Activity activity = getActivity(request, form, progress); + + if (activity == null) { + log.error(className+": No activity in request or session"); + return mapping.findForward(ActionMappings.ERROR); + } + + ILearnerService learnerService = getLearnerService(request); + + // Set activity as complete + LearnerProgress nextProgress = null; + try { + nextProgress = learnerService.calculateProgress(activity, learner, lesson); + } + catch (ProgressException e) { + return mapping.findForward("error"); + } + request.setAttribute(ActivityAction.ACTIVITY_REQUEST_ATTRIBUTE, nextProgress.getNextActivity()); + + // Save progress in session for Flash request + sessionBean.setLearnerProgress(nextProgress); + setSessionBean(sessionBean, request); + + ActionForward forward = Utils.getNextActivityForward(progress, nextProgress, true); + + return forward; + } + +} Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivity.java =================================================================== diff -u -refe4208a1e8dd4ff49e11826b7039f7d04d2ac9e -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivity.java (.../DisplayActivity.java) (revision efe4208a1e8dd4ff49e11826b7039f7d04d2ac9e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivity.java (.../DisplayActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) @@ -4,84 +4,91 @@ 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.apache.struts.action.Action; import org.lamsfoundation.lams.learning.web.bean.SessionBean; import org.lamsfoundation.lams.learning.web.form.ActivityForm; import org.lamsfoundation.lams.usermanagement.*; +import org.lamsfoundation.lams.learning.web.util.ActionMappings; import org.lamsfoundation.lams.learningdesign.*; import org.lamsfoundation.lams.lesson.*; /** * MyEclipse Struts * Creation date: 01-12-2005 - * + * + * XDoclet definition: + * + * @struts:action path="/DisplayActivity" name="activityForm" + * validate="false" scope="request" + * */ -public abstract class DisplayActivity extends Action { - - protected SessionBean getSessionBean(HttpServletRequest request) { - HttpSession session = request.getSession(false); - if (session == null) { - return null; - } - SessionBean sessionBean = (SessionBean)session.getAttribute(SessionBean.NAME); - return sessionBean; - } +public class DisplayActivity extends ActivityAction { + + protected static String className = "DisplayActivity"; /** display * Gets an activity from the request (attribute) and forwards onto the required * jsp (SingleActivity or ParallelActivity). */ public ActionForward execute( ActionMapping mapping, - ActionForm form, + ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { - ActivityForm displayForm = (ActivityForm) form; + ActivityForm form = (ActivityForm) actionForm; - // TODO: should we use a page forward or throw an exception for no session? - SessionBean sessionBean = getSessionBean(request); + SessionBean sessionBean = ActivityAction.getSessionBean(request); if (sessionBean == null) { // forward to the no session error page - return mapping.findForward("noSessionError"); + return mapping.findForward(ActionMappings.NO_SESSION_ERROR); } // Get learner User learner = sessionBean.getLeaner(); - // Get learnerProgress - LearnerProgress progress = sessionBean.getLearnerProgress(); - - Long activityId = (Long)request.getAttribute("activityId"); - if (activityId == null) { - // check the request for an activityId - activityId = displayForm.getActivityId(); - if (activityId == null) { - return mapping.findForward("error"); - } - } + Lesson lesson = sessionBean.getLesson(); - // Find requested activity - // May need special processing if activity is not current - Activity activity = getActivity(activityId.longValue(), progress); + LearnerProgress learnerProgress = getLearnerProgress(request, form); + Activity activity = getActivity(request, form, learnerProgress); - ActionForward forward = displayActivity(activity, progress, mapping, displayForm, request, response); + if (activity == null) { + log.error(className+": No activity in request or session"); + return mapping.findForward(ActionMappings.ERROR); + } + + ActionForward forward = displayActivity(activity, learnerProgress, mapping, form, request, response); return forward; } /** - * Returns an ActionForward to display an activity based on its type. The form bean - * also has its values set for display. Note that this method is over-ridden by the - * DisplayOptionsActivity sub-class. + * 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). */ - protected abstract ActionForward displayActivity(Activity activity, LearnerProgress progress, - ActionMapping mapping, ActivityForm form, HttpServletRequest request, HttpServletResponse response); + 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(); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivity.java =================================================================== diff -u -refe4208a1e8dd4ff49e11826b7039f7d04d2ac9e -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivity.java (.../DisplayOptionsActivity.java) (revision efe4208a1e8dd4ff49e11826b7039f7d04d2ac9e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivity.java (.../DisplayOptionsActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) @@ -1,8 +1,7 @@ /* * Created on 14/01/2005 * - * TODO To change the template for this generated file go to - * Window - Preferences - Java - Code Style - Code Templates + */ package org.lamsfoundation.lams.learning.web.action; @@ -14,16 +13,17 @@ 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.web.bean.ActivityURL; -import org.lamsfoundation.lams.learning.web.form.ActivityForm; 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; /** * @author daveg @@ -36,30 +36,26 @@ * @struts:action-forward name="displayOptions" path=".optionsActivity" * */ -public class DisplayOptionsActivity extends DisplayActivity { +public class DisplayOptionsActivity extends ActivityAction { - /** - * Returns an ActionForward to display an activity and sets the form bean values. - */ - protected ActionForward displayActivity(Activity activity, LearnerProgress progress, - ActionMapping mapping, ActivityForm activityForm, HttpServletRequest request, HttpServletResponse response) { - String forward = null; + public ActionForward execute( + ActionMapping mapping, + ActionForm actionForm, + HttpServletRequest request, + HttpServletResponse response) { + OptionsActivityForm form = (OptionsActivityForm)actionForm; + + LearnerProgress learnerProgress = getLearnerProgress(request, form); + Activity activity = getActivity(request, form, learnerProgress); if (!(activity instanceof OptionsActivity)) { - // error - return mapping.findForward("error"); + log.error(className+": activity not OptionsActivity "+activity.getActivityId()); + return mapping.findForward(ActionMappings.ERROR); } - - OptionsActivityForm form = (OptionsActivityForm)activityForm; - - forward = "displayOptions"; OptionsActivity optionsActivity = (OptionsActivity)activity; + form.setActivityId(activity.getActivityId()); - form.setTitle(activity.getTitle()); - form.setDescription(activity.getDescription()); - form.setMinimum(optionsActivity.getMinNumberOfOptions().intValue()); - form.setMaximum(optionsActivity.getMaxNumberOfOptions().intValue()); List activityURLs = new ArrayList(); // TODO: Need to get order somehow @@ -68,9 +64,9 @@ int completedCount = 0; while (i.hasNext()) { Activity subActivity = (Activity)i.next(); - ActivityURL url = Utils.generateActivityURL(subActivity, progress); + ActivityURL url = Utils.getActivityURL(subActivity, learnerProgress); activityURLs.add(url); - if (progress.getProgressState(subActivity) == LearnerProgress.ACTIVITY_COMPLETED) { + if (learnerProgress.getProgressState(subActivity) == LearnerProgress.ACTIVITY_COMPLETED) { completedCount++; } } @@ -79,10 +75,9 @@ form.setFinished(true); } - if (activityURLs.size() == 0) { - // TODO: error - } + this.saveToken(request); + String forward = "displayOptions"; return mapping.findForward(forward); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivity.java =================================================================== diff -u -refe4208a1e8dd4ff49e11826b7039f7d04d2ac9e -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivity.java (.../DisplayParallelActivity.java) (revision efe4208a1e8dd4ff49e11826b7039f7d04d2ac9e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivity.java (.../DisplayParallelActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) @@ -4,8 +4,10 @@ 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; @@ -14,6 +16,7 @@ import org.lamsfoundation.lams.learningdesign.*; import org.lamsfoundation.lams.lesson.*; +import org.lamsfoundation.lams.learning.web.util.ActionMappings; /** * MyEclipse Struts @@ -27,42 +30,43 @@ * @struts:action-forward name="displayParallel" path=".parallelActivity" * */ -public class DisplayParallelActivity extends DisplayActivity { +public class DisplayParallelActivity extends ActivityAction { - /** - * Returns an ActionForward to display an activity based on its type. The form bean - * also has its values set for display. Note that this method is over-ridden by the - * DisplayOptionsActivity sub-class. - */ - protected ActionForward displayActivity(Activity activity, LearnerProgress progress, - ActionMapping mapping, ActivityForm form, HttpServletRequest request, HttpServletResponse response) { - String forward = null; + public ActionForward execute( + ActionMapping mapping, + ActionForm actionForm, + HttpServletRequest request, + HttpServletResponse response) { + ActivityForm form = (ActivityForm)actionForm; + + LearnerProgress learnerProgress = getLearnerProgress(request, form); + Activity activity = getActivity(request, form, learnerProgress); if (!(activity instanceof ParallelActivity)) { - // error - return mapping.findForward("error"); + log.error(className+": activity not ParallelActivity "+activity.getActivityId()); + return mapping.findForward(ActionMappings.ERROR); } ParallelActivity parallelActivity = (ParallelActivity)activity; - forward = "displayParallel"; - form.setActivityId(activity.getActivityId()); + List activityURLs = new ArrayList(); // TODO: Need to get order somehow Set subActivities = parallelActivity.getActivities(); Iterator i = subActivities.iterator(); while (i.hasNext()) { Activity subActivity = (Activity)i.next(); - ActivityURL url = Utils.generateActivityURL(subActivity, progress); + ActivityURL url = Utils.getActivityURL(subActivity, learnerProgress); activityURLs.add(url); } - form.setActivityURLs(activityURLs); - if (activityURLs.size() == 0) { - // TODO: error + log.error(className+": No sub-activity URLs for activity "+activity.getActivityId()); + return mapping.findForward(ActionMappings.ERROR); } + form.setActivityURLs(activityURLs); + String forward = "displayParallel"; return mapping.findForward(forward); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivity.java =================================================================== diff -u -refe4208a1e8dd4ff49e11826b7039f7d04d2ac9e -r7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivity.java (.../DisplayToolActivity.java) (revision efe4208a1e8dd4ff49e11826b7039f7d04d2ac9e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivity.java (.../DisplayToolActivity.java) (revision 7a837302eeaf0895edc32d1dbcfdfd673f6dc8b2) @@ -4,8 +4,10 @@ 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; @@ -14,6 +16,7 @@ import org.lamsfoundation.lams.learningdesign.*; import org.lamsfoundation.lams.lesson.*; +import org.lamsfoundation.lams.learning.web.util.ActionMappings; /** * MyEclipse Struts @@ -24,37 +27,39 @@ * @struts:action path="/DisplayToolActivity" name="activityForm" * validate="false" scope="request" * - * -- Load one or more URLs to display an activity * @struts:action-forward name="displayTool" path=".toolActivity" * */ -public class DisplayToolActivity extends DisplayActivity { - +public class DisplayToolActivity extends ActivityAction { + /** - * Returns an ActionForward to display an activity based on its type. The form bean - * also has its values set for display. Note that this method is over-ridden by the - * DisplayOptionsActivity sub-class. + * Gets an activity from the request (attribute) and forwards onto the required + * jsp (SingleActivity or ParallelActivity). */ - protected ActionForward displayActivity(Activity activity, LearnerProgress progress, - ActionMapping mapping, ActivityForm form, HttpServletRequest request, HttpServletResponse response) { - + public ActionForward execute( + ActionMapping mapping, + ActionForm actionForm, + HttpServletRequest request, + HttpServletResponse response) { + ActivityForm form = (ActivityForm)actionForm; + + LearnerProgress learnerProgress = getLearnerProgress(request, form); + Activity activity = getActivity(request, form, learnerProgress); if (!(activity instanceof ToolActivity)) { - // error - return mapping.findForward("error"); + log.error(className+": activity not ToolActivity"); + return mapping.findForward(ActionMappings.ERROR); } - ToolActivity toolActivity = (ToolActivity)activity; - List activityURLs = new ArrayList(); - String forward = null; + ToolActivity toolActivity = (ToolActivity)activity; - forward = "displayTool"; - form.setActivityId(activity.getActivityId()); - //ActivityURL url = Utils.generateActivityURL(activity, progress); - ActivityURL url = Utils.getToolURL(toolActivity, progress); + + List activityURLs = new ArrayList(); + ActivityURL url = Utils.getToolURL(toolActivity, learnerProgress); activityURLs.add(url); form.setActivityURLs(activityURLs); + String forward = "displayTool"; return mapping.findForward(forward); }