Index: lams_learning/lib/lams/lams.jar =================================================================== diff -u -r47a0b22c0f3ff85ed2d419ad50912025d55c9cfa -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a Binary files differ Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java =================================================================== diff -u -r47a0b22c0f3ff85ed2d419ad50912025d55c9cfa -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision 47a0b22c0f3ff85ed2d419ad50912025d55c9cfa) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -101,4 +101,13 @@ * @return a list of active lessons. */ public LessonDTO[] getActiveLessonsFor(User learner); + + /** + * Mark the learner progress as restarting to indicate the current learner + * has exit the lesson + * @param progress the current learner progress. + */ + public void exitLesson(LearnerProgress progress); + + } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r47a0b22c0f3ff85ed2d419ad50912025d55c9cfa -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 47a0b22c0f3ff85ed2d419ad50912025d55c9cfa) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -258,7 +258,17 @@ throw new LearnerServiceException(e.getMessage()); } } - + + /** + * Exit a lesson. + * @see org.lamsfoundation.lams.learning.service.ILearnerService#exitLesson(org.lamsfoundation.lams.lesson.LearnerProgress) + */ + public void exitLesson(LearnerProgress progress) + { + progress.setRestarting(true); + learnerProgressDAO.updateLearnerProgress(progress); + } + //--------------------------------------------------------------------- // Helper Methods //--------------------------------------------------------------------- @@ -352,5 +362,6 @@ lessonDTOList.add(currentLesson.getLessonData()); } return (LessonDTO[])lessonDTOList.toArray(new LessonDTO[lessonDTOList.size()]); - } + } + } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java =================================================================== diff -u -r47a0b22c0f3ff85ed2d419ad50912025d55c9cfa -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java (.../DisplayActivityAction.java) (revision 47a0b22c0f3ff85ed2d419ad50912025d55c9cfa) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java (.../DisplayActivityAction.java) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -47,7 +47,6 @@ * @struts:action-forward name="loadToolActivity" path="/LoadToolActivity.do" * @struts:action-forward name="parallelWait" path="/parallelWait.do" * @struts:action-forward name="lessonComplete" path="/lessonComplete.do" - * @struts:action-forward name="requestDisplay" path="/requestDisplay.do" * * * ----------------XDoclet Tags-------------------- @@ -74,6 +73,7 @@ ActivityForm form = (ActivityForm) actionForm; ActivityMapping actionMappings = getActivityMapping(); + //TODO check up the learner progress, if not present, get it from db. SessionBean sessionBean = getSessionBean(request); // forward to the no session error page if (sessionBean == null) Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java =================================================================== diff -u -r4e049aced5079eff1ff599aa4572624cc0314e59 -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java (.../DisplayParallelActivityAction.java) (revision 4e049aced5079eff1ff599aa4572624cc0314e59) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayParallelActivityAction.java (.../DisplayParallelActivityAction.java) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -54,11 +54,11 @@ * 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) { + public ActionForward execute(ActionMapping mapping, + ActionForm actionForm, + HttpServletRequest request, + HttpServletResponse response) + { ActivityForm form = (ActivityForm)actionForm; ActivityMapping actionMappings = getActivityMapping(); actionMappings.setActivityMappingStrategy(new ParallelActivityMappingStrategy()); @@ -90,8 +90,7 @@ } form.setActivityURLs(activityURLs); - String forward = "displayParallel"; - return mapping.findForward(forward); + return mapping.findForward("displayParallel"); } } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java =================================================================== diff -u -r47a0b22c0f3ff85ed2d419ad50912025d55c9cfa -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision 47a0b22c0f3ff85ed2d419ad50912025d55c9cfa) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -90,6 +90,7 @@ private static final String PARAM_LESSON_ID = "lessonId"; private static final String ATTR_USERDATA = "user"; + //private static final String PARAM_LEARNER_PROGRESS="?learnerProgressId="; //--------------------------------------------------------------------- // Class level constants - Struts forward //--------------------------------------------------------------------- @@ -176,21 +177,96 @@ log.debug("The learner ["+learner.getUserId()+"],["+learner.getFullName() +"is joining the lesson ["+lessonId+"],["+lesson.getLessonName()+"]"); - + //join user to the lesson on the server LearnerProgress learnerProgress = learnerService.joinLesson(learner,lesson); if(log.isDebugEnabled()) log.debug("The learner ["+learner.getUserId()+"] joined lesson. The" +"porgress data is:"+learnerProgress.toString()); - + //setup session attributes request.getSession().setAttribute(SessionBean.NAME,new SessionBean(learner, lesson, learnerProgress)); - - return mapping.findForward(DISPLAY_ACTIVITY); + + //serialize a acknowledgement flash message with the path of display next + //activity + String lessonJoined = WDDXProcessor.serialize(new FlashMessage("joinLesson", + mapping.findForward(DISPLAY_ACTIVITY).getPath())); + + if(log.isDebugEnabled()) + log.debug("Sending Lesson joined acknowledge message to flash:"+lessonJoined); + + //we hand over the control to flash. + response.getWriter().print(lessonJoined); + //as flash is called the next struts action, we don't need to forward to + //anything. + return null; } /** + *

Exit the current lesson that is running in the leaner window. It + * expects lesson id passed as parameter from flash component. + * + * @param mapping An ActionMapping class that will be used by the Action class to tell + * the ActionServlet where to send the end-user. + * + * @param form The ActionForm class that will contain any data submitted + * by the end-user via a form. + * @param request A standard Servlet HttpServletRequest class. + * @param response A standard Servlet HttpServletResponse class. + * @return An ActionForward class that will be returned to the ActionServlet indicating where + * the user is to go next. + * + * @throws IOException + * @throws ServletException + */ + public ActionForward exitLesson(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + + return null; + } + + /** + *

The struts dispatch action to retrieve the progress data from the + * server and tailor it into the object struture that expected by flash. + * A wddx packet with object data struture is sent back in the end of this + * call. It is used to construct or restore the flash learner progress + * bar

+ * + *

As this process is expensive, the server is only expecting this call + * whenever is necessary. For example, starting, resuming and restoring + * a new lesson. And it should not happen every time that learner is + * progressing to next activity.

+ * + * @param mapping An ActionMapping class that will be used by the Action class to tell + * the ActionServlet where to send the end-user. + * + * @param form The ActionForm class that will contain any data submitted + * by the end-user via a form. + * @param request A standard Servlet HttpServletRequest class. + * @param response A standard Servlet HttpServletResponse class. + * @return An ActionForward class that will be returned to the ActionServlet indicating where + * the user is to go next. + * @throws IOException + * @throws ServletException + */ + public ActionForward getFlashProgressData(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + + return null; + } + + + + /** * Helper method to retrieve the user data. We always load up from http * session first to optimize the performance. If no session cache available, * we load it from data source. Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java =================================================================== diff -u -r4e049aced5079eff1ff599aa4572624cc0314e59 -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision 4e049aced5079eff1ff599aa4572624cc0314e59) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -52,11 +52,11 @@ * Gets an activity from the request (attribute) and forwards onto a * loading page. */ - public ActionForward execute( - ActionMapping mapping, - ActionForm actionForm, - HttpServletRequest request, - HttpServletResponse response) { + public ActionForward execute(ActionMapping mapping, + ActionForm actionForm, + HttpServletRequest request, + HttpServletResponse response) + { ActivityForm form = (ActivityForm)actionForm; ActivityMapping actionMappings = getActivityMapping(); @@ -78,8 +78,7 @@ activityURLs.add(activityURL); form.setActivityURLs(activityURLs); - String forward = "displayTool"; - return mapping.findForward(forward); + return mapping.findForward("displayTool"); } } \ No newline at end of file Index: lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java =================================================================== diff -u -ra1c82d1d104334920095e4e9132ac6d2c52bbce9 -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision a1c82d1d104334920095e4e9132ac6d2c52bbce9) +++ lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -253,6 +253,15 @@ assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size()); } + public void testExitLesson() + { + learnerService.exitLesson(testProgress); + + LearnerProgress progress = learnerProgressDao.getLearnerProgressByLearner(testUser,testLesson); + + assertTrue("verify it should be restarting",progress.isRestarting()); + + } /** * @param numberOfAttemptedAct * @param testCompletedActivity Index: lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestDisplayActivityAction.java =================================================================== diff -u -r47a0b22c0f3ff85ed2d419ad50912025d55c9cfa -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestDisplayActivityAction.java (.../TestDisplayActivityAction.java) (revision 47a0b22c0f3ff85ed2d419ad50912025d55c9cfa) +++ lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestDisplayActivityAction.java (.../TestDisplayActivityAction.java) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -23,6 +23,10 @@ package org.lamsfoundation.lams.learning.web.action; import org.lamsfoundation.lams.AbstractLamsStrutsTestCase; +import org.lamsfoundation.lams.learning.web.bean.SessionBean; +import org.lamsfoundation.lams.learningdesign.OptionsActivity; +import org.lamsfoundation.lams.learningdesign.ParallelActivity; +import org.lamsfoundation.lams.lesson.LearnerProgress; /** @@ -36,7 +40,7 @@ { private static final String TEST_USER_ID = "2"; private static final String TEST_LESSON_ID = "2"; - + private static SessionBean testBean = null; /** * Constructor for TestDisplayActivityAction. * @param arg0 @@ -87,10 +91,87 @@ addRequestParameter("lessonId", TEST_LESSON_ID); actionPerform(); + testBean = (SessionBean)httpSession.getAttribute(SessionBean.NAME); + //test page loading. setRequestPathInfo("/DisplayActivity.do"); actionPerform(); verifyForward("loadToolActivity"); } + + public void testDisplayToolActivityFollowingParallelActivity() + { + //setup the session bean to display option page. + LearnerProgress progress = testBean.getLearnerProgress(); + ParallelActivity parallelActivity= new ParallelActivity(); + progress.setPreviousActivity(parallelActivity); + testBean.setLearnerProgress(progress); + httpSession.setAttribute(SessionBean.NAME,testBean); + + setRequestPathInfo("/DisplayActivity.do"); + actionPerform(); + verifyForwardPath("/requestDisplay.do?url=http://localhost:8080/lams_learning//LoadToolActivity.do?activityId=26"); + + //restore the progress + progress = testBean.getLearnerProgress(); + progress.setPreviousActivity(null); + testBean.setLearnerProgress(progress); + } + + public void testDisplayOptionsActivity() + { + //setup the session bean to display option page. + LearnerProgress progress = testBean.getLearnerProgress(); + OptionsActivity optionActivity= new OptionsActivity(); + progress.setNextActivity(optionActivity); + testBean.setLearnerProgress(progress); + httpSession.setAttribute(SessionBean.NAME,testBean); + + setRequestPathInfo("/DisplayActivity.do"); + actionPerform(); + verifyForward("displayOptionsActivity"); + } + public void testDisplayParallelActivity() + { + //setup the session bean to display option page. + LearnerProgress progress = testBean.getLearnerProgress(); + ParallelActivity parallelActivity= new ParallelActivity(); + progress.setNextActivity(parallelActivity); + testBean.setLearnerProgress(progress); + httpSession.setAttribute(SessionBean.NAME,testBean); + + setRequestPathInfo("/DisplayActivity.do"); + actionPerform(); + verifyForward("displayParallelActivity"); + } + + + + public void testDisplayWaitingParallelActivity() + { + //setup the session bean to display parallel waiting. + LearnerProgress progress = testBean.getLearnerProgress(); + progress.setParallelWaiting(true); + testBean.setLearnerProgress(progress); + httpSession.setAttribute(SessionBean.NAME,testBean); + + setRequestPathInfo("/DisplayActivity.do"); + actionPerform(); + verifyForward("parallelWait"); + } + + public void testDisplayCompletionPage() + { + //setup the session bean to display completion page. + LearnerProgress progress = testBean.getLearnerProgress(); + progress.setLessonComplete(true); + testBean.setLearnerProgress(progress); + httpSession.setAttribute(SessionBean.NAME,testBean); + + setRequestPathInfo("/DisplayActivity.do"); + actionPerform(); + verifyForward("lessonComplete"); + + } } Index: lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestLearnerAction.java =================================================================== diff -u -r47a0b22c0f3ff85ed2d419ad50912025d55c9cfa -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestLearnerAction.java (.../TestLearnerAction.java) (revision 47a0b22c0f3ff85ed2d419ad50912025d55c9cfa) +++ lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestLearnerAction.java (.../TestLearnerAction.java) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -94,7 +94,6 @@ actionPerform(); - verifyForward("displayActivity"); verifyNoActionErrors(); SessionBean bean = (SessionBean)httpSession.getAttribute(SessionBean.NAME); Index: lams_learning/test/web/WEB-INF/spring/learningApplicationContext.xml =================================================================== diff -u -r47a0b22c0f3ff85ed2d419ad50912025d55c9cfa -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/test/web/WEB-INF/spring/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision 47a0b22c0f3ff85ed2d419ad50912025d55c9cfa) +++ lams_learning/test/web/WEB-INF/spring/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -30,6 +30,7 @@ PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED PROPAGATION_REQUIRES_NEW,ISOLATION_READ_COMMITTED + PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED Index: lams_learning/web/WEB-INF/spring/learningApplicationContext.xml =================================================================== diff -u -rf0f13cd7ba427bab1d37dc3a8a14e290c98245ef -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/web/WEB-INF/spring/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision f0f13cd7ba427bab1d37dc3a8a14e290c98245ef) +++ lams_learning/web/WEB-INF/spring/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -11,11 +11,6 @@ - - @@ -35,17 +30,19 @@ PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED PROPAGATION_REQUIRES_NEW,ISOLATION_READ_COMMITTED + PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED + - + http://localhost:8080/lams_learning/ Index: lams_learning/web/WEB-INF/struts/tiles-defs.xml =================================================================== diff -u -r6d31aeb68451bb07b195715fed146e8e40b4705e -red8afe78a454a4b3b9d2ae039ac12d7ad9dc809a --- lams_learning/web/WEB-INF/struts/tiles-defs.xml (.../tiles-defs.xml) (revision 6d31aeb68451bb07b195715fed146e8e40b4705e) +++ lams_learning/web/WEB-INF/struts/tiles-defs.xml (.../tiles-defs.xml) (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -65,6 +65,10 @@ + + + + Index: lams_learning/web/welcome.jsp =================================================================== diff -u --- lams_learning/web/welcome.jsp (revision 0) +++ lams_learning/web/welcome.jsp (revision ed8afe78a454a4b3b9d2ae039ac12d7ad9dc809a) @@ -0,0 +1,11 @@ + + + + + +
+
+

Select an Activity Sequence from the panel on the left to begin.

+

You may start a new sequence, resume an existing sequence or view a completed sequence.

+
+