Index: lams_learning/conf/language/ApplicationResources.properties =================================================================== diff -u -r66f147e9d94ea10fa2c2cea70a78d6479096ddc7 -rd61e53f3f98df777cb3006fe79f844214d40d073 --- lams_learning/conf/language/ApplicationResources.properties (.../ApplicationResources.properties) (revision 66f147e9d94ea10fa2c2cea70a78d6479096ddc7) +++ lams_learning/conf/language/ApplicationResources.properties (.../ApplicationResources.properties) (revision d61e53f3f98df777cb3006fe79f844214d40d073) @@ -27,6 +27,14 @@ export.html.exportFailed=
Export Portfolio for this activity is unsupported
+# Heading for the "You have exited" screen +exit.heading=You have exited from this Lesson +# Message for the "You have exited" screen +exit.message=You will find it in the "Started Lessons" part of the available lessons panel. You can resume this lesson using the Resume button. +# Heading for the initial Learning "Welcome" screen +welcome.heading=Select a Lesson from the panel on the left to begin. +# Message for the initial Learning "Welcome" screen +welcome.message=You may start a new lesson, resume an existing lesson or view a completed lesson. +# General system error message. +error.system.error=An error has occurred. Please start again. Reason for error: {0} -#monitor.title=Staff :: LAMS - Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java =================================================================== diff -u -rcdb910b6cd3de106725e2c22ded380c5c0fab650 -rd61e53f3f98df777cb3006fe79f844214d40d073 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision cdb910b6cd3de106725e2c22ded380c5c0fab650) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision d61e53f3f98df777cb3006fe79f844214d40d073) @@ -33,13 +33,16 @@ import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.dto.LessonDTO; import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.util.MessageService; /** * * @author chris */ public interface ILearnerService { + /** Get the I18N service. Used by actions for internationalising errors that go back to Flash */ + public MessageService getMessageService(); /** * Gets the lesson object for the given key. Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -rcdb910b6cd3de106725e2c22ded380c5c0fab650 -rd61e53f3f98df777cb3006fe79f844214d40d073 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision cdb910b6cd3de106725e2c22ded380c5c0fab650) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision d61e53f3f98df777cb3006fe79f844214d40d073) @@ -97,7 +97,10 @@ this.messageService = messageService; } - /** + public MessageService getMessageService() { + return messageService; + } + /** * @param toolSessionDAO The toolSessionDAO to set. */ public void setToolSessionDAO(IToolSessionDAO toolSessionDAO) Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DummyLearnerAction.java =================================================================== diff -u -r66f147e9d94ea10fa2c2cea70a78d6479096ddc7 -rd61e53f3f98df777cb3006fe79f844214d40d073 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DummyLearnerAction.java (.../DummyLearnerAction.java) (revision 66f147e9d94ea10fa2c2cea70a78d6479096ddc7) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DummyLearnerAction.java (.../DummyLearnerAction.java) (revision d61e53f3f98df777cb3006fe79f844214d40d073) @@ -37,8 +37,12 @@ import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learning.service.LearnerServiceProxy; import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; +import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.dto.LessonDTO; import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.wddx.FlashMessage; +import org.lamsfoundation.lams.util.wddx.WDDXProcessor; import org.lamsfoundation.lams.web.action.LamsDispatchAction; @@ -57,6 +61,7 @@ * path=".systemError" * handler="org.lamsfoundation.lams.learning.util.CustomStrutsExceptionHandler" * @struts:action-forward name="controlActivity" path="/dummyControlBottomFrame.jsp" + * @struts:action-forward name="displayActivity" path="/DisplayActivity.do" * * ----------------XDoclet Tags-------------------- * @@ -72,7 +77,8 @@ // Class level constants - Struts forward //--------------------------------------------------------------------- private static final String CONTROL_ACTIVITY = "controlActivity"; - + private static final String DISPLAY_ACTIVITY = "displayActivity"; + // Session attributes private static final String PARAM_LESSONS = "lessons"; @@ -113,5 +119,52 @@ } + /** + *The structs dispatch action that joins a learner into a lesson. The + * learner could either start a lesson or resume a lesson.
+ * + * @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 joinLesson(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + //initialize service object + ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext()); + //get user and lesson based on request. + User learner = LearningWebUtil.getUserData(getServlet().getServletContext()); + long lessonID = WebUtil.readLongParam(request,LearningWebUtil.PARAM_LESSON_ID); + + + if(log.isDebugEnabled()) + log.debug("The learner ["+learner.getUserId()+"],["+learner.getFullName() + +"is joining the lesson ["+lessonID+"]"); + + //join user to the lesson on the server + LearnerProgress learnerProgress = learnerService.joinLesson(learner,lessonID); + + if(log.isDebugEnabled()) + log.debug("The learner ["+learner.getUserId()+"] joined lesson. The" + +"porgress data is:"+learnerProgress.toString()); + + request.getSession().setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE,learnerProgress); + return mapping.findForward(DISPLAY_ACTIVITY); + } + + + } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java =================================================================== diff -u -rcdb910b6cd3de106725e2c22ded380c5c0fab650 -rd61e53f3f98df777cb3006fe79f844214d40d073 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision cdb910b6cd3de106725e2c22ded380c5c0fab650) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision d61e53f3f98df777cb3006fe79f844214d40d073) @@ -41,14 +41,9 @@ import org.lamsfoundation.lams.learning.web.util.LessonLearnerDataManager; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.dto.ProgressActivityDTO; - - - import org.lamsfoundation.lams.lesson.LearnerProgress; -import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.dto.LessonDTO; import org.lamsfoundation.lams.usermanagement.User; - import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.util.wddx.FlashMessage; import org.lamsfoundation.lams.util.wddx.WDDXProcessor; @@ -83,6 +78,7 @@ * handler="org.lamsfoundation.lams.learning.util.CustomStrutsExceptionHandler" * @struts:action-forward name="displayActivity" path="/DisplayActivity.do" * @struts:action-forward name="welcome" path=".welcome" + * @struts:action-forward name="exit" path=".exit" * * ----------------XDoclet Tags-------------------- * @@ -99,6 +95,17 @@ //--------------------------------------------------------------------- private static final String DISPLAY_ACTIVITY = "displayActivity"; private static final String WELCOME = "welcome"; + private static final String EXIT = "exit"; + + private FlashMessage handleException(Exception e, String methodKey, ILearnerService learnerService) { + log.error("Exception thrown "+methodKey,e); + String[] msg = new String[1]; + msg[0] = e.getMessage(); + return new FlashMessage(methodKey, + learnerService.getMessageService().getMessage("error.system.error", msg), + FlashMessage.CRITICAL_ERROR); + } + /** *The Struts dispatch method that retrieves all active lessons for a
* requested user from flash. The returned is structured as dto format
@@ -125,21 +132,28 @@
{
//initialize service object
ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
-
- //get learner.
- User learner = LearningWebUtil.getUserData(getServlet().getServletContext());
+ FlashMessage message = null;
+ try {
+
+ //get learner.
+ User learner = LearningWebUtil.getUserData(getServlet().getServletContext());
+ if(log.isDebugEnabled())
+ log.debug("Getting active lessons for leaner:"+learner.getFullName()+"["+learner.getUserId()+"]");
+
+ LessonDTO [] lessons = learnerService.getActiveLessonsFor(learner);
+
+ message = new FlashMessage("getActiveLessons",lessons);
+
+ } catch (Exception e ) {
+ message = handleException(e, "getActiveLessons", learnerService);
+ }
+
+ String wddxPacket = WDDXProcessor.serialize(message);
if(log.isDebugEnabled())
- log.debug("Getting active lessons for leaner:"+learner.getFullName()+"["+learner.getUserId()+"]");
-
- LessonDTO [] lessons = learnerService.getActiveLessonsFor(learner);
+ log.debug("Sending flash active lessons message:"+message);
- String activeLessons = WDDXProcessor.serialize(new FlashMessage("getActiveLessons",lessons));
+ response.getWriter().print(wddxPacket);
- if(log.isDebugEnabled())
- log.debug("Sending flash active lessons message:"+activeLessons);
-
- response.getWriter().print(activeLessons);
-
//don't need to return a action forward because it sent the wddx packet
//back already.
return null;
@@ -171,46 +185,50 @@
//initialize service object
ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
- //get user and lesson based on request.
- User learner = LearningWebUtil.getUserData(getServlet().getServletContext());
- long lessonID = WebUtil.readLongParam(request,LearningWebUtil.PARAM_LESSON_ID);
-
-
+ FlashMessage message = null;
+ try {
+
+ //get user and lesson based on request.
+ User learner = LearningWebUtil.getUserData(getServlet().getServletContext());
+ long lessonID = WebUtil.readLongParam(request,LearningWebUtil.PARAM_LESSON_ID);
+
+
+ if(log.isDebugEnabled())
+ log.debug("The learner ["+learner.getUserId()+"],["+learner.getFullName()
+ +"is joining the lesson ["+lessonID+"]");
+
+ //join user to the lesson on the server
+ LearnerProgress learnerProgress = learnerService.joinLesson(learner,lessonID);
+
+ if(log.isDebugEnabled())
+ log.debug("The learner ["+learner.getUserId()+"] joined lesson. The"
+ +"porgress data is:"+learnerProgress.toString());
+
+ // TODO replace with JBOSS cache
+ //LessonLearnerDataManager.cacheLessonUser(getServlet().getServletContext(),
+ // lesson,learner);
+
+ //setup session attributes
+ //request.getSession().setAttribute(SessionBean.NAME,new SessionBean(learner,
+ // lesson,
+ // learnerProgress));
+ request.getSession().setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE,learnerProgress);
+
+ //serialize a acknowledgement flash message with the path of display next
+ //activity
+ message = new FlashMessage("joinLesson", mapping.findForward(DISPLAY_ACTIVITY).getPath());
+
+ } catch (Exception e ) {
+ message = handleException(e, "joinLesson", learnerService);
+ }
+
+ String wddxPacket = WDDXProcessor.serialize(message);
if(log.isDebugEnabled())
- log.debug("The learner ["+learner.getUserId()+"],["+learner.getFullName()
- +"is joining the lesson ["+lessonID+"]");
-
- //join user to the lesson on the server
- LearnerProgress learnerProgress = learnerService.joinLesson(learner,lessonID);
+ log.debug("Sending Lesson joined acknowledge message to flash:"+wddxPacket);
- if(log.isDebugEnabled())
- log.debug("The learner ["+learner.getUserId()+"] joined lesson. The"
- +"porgress data is:"+learnerProgress.toString());
-
- // TODO replace with JBOSS cache
- //LessonLearnerDataManager.cacheLessonUser(getServlet().getServletContext(),
- // lesson,learner);
-
- //setup session attributes
- //request.getSession().setAttribute(SessionBean.NAME,new SessionBean(learner,
- // lesson,
- // learnerProgress));
- request.getSession().setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE,learnerProgress);
-
- //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);
-
- //TODO this should return null once flash side is done, it should be
- //called by flash side
- return mapping.findForward(DISPLAY_ACTIVITY);
+ response.getWriter().print(wddxPacket);
+ return null;
}
@@ -244,25 +262,32 @@
//initialize service object
ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
- //SessionBean sessionBean = LearningWebUtil.getSessionBean(request,getServlet().getServletContext());
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByUser(request,getServlet().getServletContext());
-
+ FlashMessage message = null;
+ try {
+
+ //SessionBean sessionBean = LearningWebUtil.getSessionBean(request,getServlet().getServletContext());
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByUser(request,getServlet().getServletContext());
+
+ if(log.isDebugEnabled())
+ log.debug("Lesson id is: "+learnerProgress.getLesson().getLessonId());
+
+ learnerService.exitLesson(learnerProgress);
+
+ LessonLearnerDataManager.removeLessonUserFromCache(getServlet().getServletContext(),
+ learnerProgress.getLesson(),
+ learnerProgress.getUser());
+ //send acknowledgment to flash as it is triggerred by flash
+ message = new FlashMessage("exitLesson",mapping.findForward(EXIT).getPath());
+
+ } catch (Exception e ) {
+ message = handleException(e, "exitLesson", learnerService);
+ }
+
+ String wddxPacket = WDDXProcessor.serialize(message);
if(log.isDebugEnabled())
- log.debug("Lesson id is: "+learnerProgress.getLesson().getLessonId());
-
- learnerService.exitLesson(learnerProgress);
-
- LessonLearnerDataManager.removeLessonUserFromCache(getServlet().getServletContext(),
- learnerProgress.getLesson(),
- learnerProgress.getUser());
- //send acknowledgment to flash as it is triggerred by flash
- String lessonExitted = WDDXProcessor.serialize(new FlashMessage("exitLesson",null));
- if(log.isDebugEnabled())
- log.debug("Sending Exit Lesson acknowledge message to flash:"+lessonExitted);
- response.getWriter().print(lessonExitted);
-
- //forward to welcome page
- return mapping.findForward(WELCOME);
+ log.debug("Sending Exit Lesson acknowledge message to flash:"+wddxPacket);
+ response.getWriter().print(wddxPacket);
+ return null;
}
/**
@@ -298,15 +323,22 @@
if(log.isDebugEnabled())
log.debug("Getting Flash progress data...");
- //SessionBean sessionBean = LearningWebUtil.getSessionBean(request,getServlet().getServletContext());
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByID(request,getServlet().getServletContext());
-
- String progressData = WDDXProcessor.serialize(new FlashMessage("getFlashProgressData",
- learnerProgress.getLearnerProgressData()));
+ FlashMessage message = null;
+ try {
+
+ //SessionBean sessionBean = LearningWebUtil.getSessionBean(request,getServlet().getServletContext());
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByID(request,getServlet().getServletContext());
+
+ message = new FlashMessage("getFlashProgressData",learnerProgress.getLearnerProgressData());
+ } catch (Exception e ) {
+ message = handleException(e, "getFlashProgressData", LearnerServiceProxy.getLearnerService(getServlet().getServletContext()));
+ }
+
+ String wddxPacket = WDDXProcessor.serialize(message);
if(log.isDebugEnabled())
- log.debug("Sending learner progress data to flash:"+progressData);
- response.getWriter().print(progressData);
+ log.debug("Sending learner progress data to flash:"+wddxPacket);
+ response.getWriter().print(wddxPacket);
//don't need to return a action forward because it sent the wddx packet
//back already.
@@ -339,29 +371,36 @@
{
if(log.isDebugEnabled())
log.debug("Getting url for learner activity...");
- //get parameter
- long activityId = WebUtil.readLongParam(request,LearningWebUtil.PARAM_ACTIVITY_ID);
-
- //initialize service object
- ActivityMapping activityMapping = LearnerServiceProxy.getActivityMapping(this.getServlet().getServletContext());
- ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
- //getting requested object according to coming parameters
- User learner = LearningWebUtil.getUserData(getServlet().getServletContext());
- Activity requestedActivity = learnerService.getActivity(new Long(activityId));
-
- //preparing tranfer object for flash
- ProgressActivityDTO activityDTO = new ProgressActivityDTO(new Long(activityId),
- activityMapping.calculateActivityURLForProgressView(learner,requestedActivity));
- //send data back to flash.
- String learnerActivityURL = WDDXProcessor.serialize(new FlashMessage("getLearnerActivityURL",
- activityDTO));
+ FlashMessage message = null;
+ try {
+
+ //get parameter
+ long activityId = WebUtil.readLongParam(request,LearningWebUtil.PARAM_ACTIVITY_ID);
+
+ //initialize service object
+ ActivityMapping activityMapping = LearnerServiceProxy.getActivityMapping(this.getServlet().getServletContext());
+ ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
+
+ //getting requested object according to coming parameters
+ User learner = LearningWebUtil.getUserData(getServlet().getServletContext());
+ Activity requestedActivity = learnerService.getActivity(new Long(activityId));
+
+ //preparing tranfer object for flash
+ ProgressActivityDTO activityDTO = new ProgressActivityDTO(new Long(activityId),
+ activityMapping.calculateActivityURLForProgressView(learner,requestedActivity));
+ //send data back to flash.
+ message = new FlashMessage("getLearnerActivityURL",activityDTO);
+ } catch (Exception e ) {
+ message = handleException(e, "getLearnerActivityURL", LearnerServiceProxy.getLearnerService(getServlet().getServletContext()));
+ }
+
+ String wddxPacket = WDDXProcessor.serialize(message);
if(log.isDebugEnabled())
- log.debug("Sending learner activity url data to flash:"+learnerActivityURL);
+ log.debug("Sending learner activity url data to flash:"+wddxPacket);
- //don't need to return a action forward because it sent the wddx packet
- //back already.
+ response.getWriter().print(wddxPacket);
return null;
}
}
\ No newline at end of file
Index: lams_learning/web/WEB-INF/struts/tiles-defs.xml
===================================================================
diff -u -rfc085e0eda6c46d659c5b98f9ee9e29f495af042 -rd61e53f3f98df777cb3006fe79f844214d40d073
--- lams_learning/web/WEB-INF/struts/tiles-defs.xml (.../tiles-defs.xml) (revision fc085e0eda6c46d659c5b98f9ee9e29f495af042)
+++ lams_learning/web/WEB-INF/struts/tiles-defs.xml (.../tiles-defs.xml) (revision d61e53f3f98df777cb3006fe79f844214d40d073)
@@ -71,6 +71,10 @@
&lessonId=
&lessonId=
exportWaitingPage.jsp?mode=learner&lessonID=
+
+
+ |
+
-
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. + |