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

Export Portfolio Failed

This sequence does not support portfolio exports # HTML used to create the export portfolio activity page when an activity does not support export portfolio (stops it being just a blank page) export.html.exportNotSupported=Export Portfolio Unsupported

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 @@ + + + + Index: lams_learning/web/dummyControlBottomFrame.jsp =================================================================== diff -u -r66f147e9d94ea10fa2c2cea70a78d6479096ddc7 -rd61e53f3f98df777cb3006fe79f844214d40d073 --- lams_learning/web/dummyControlBottomFrame.jsp (.../dummyControlBottomFrame.jsp) (revision 66f147e9d94ea10fa2c2cea70a78d6479096ddc7) +++ lams_learning/web/dummyControlBottomFrame.jsp (.../dummyControlBottomFrame.jsp) (revision d61e53f3f98df777cb3006fe79f844214d40d073) @@ -72,7 +72,7 @@
-
&lessonId=" target="contentFrame">Participate +
&lessonId=" target="contentFrame">Participate
exportWaitingPage.jsp?mode=learner&lessonID=');>Export Portfolio


Index: lams_learning/web/exit.jsp =================================================================== diff -u --- lams_learning/web/exit.jsp (revision 0) +++ lams_learning/web/exit.jsp (revision d61e53f3f98df777cb3006fe79f844214d40d073) @@ -0,0 +1,34 @@ +<%-- +Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) +License Information: http://lamsfoundation.org/licensing/lams/2.0/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA + + http://www.gnu.org/licenses/gpl.txt +--%> + +<%@ taglib uri="tags-html" prefix="html"%> +<%@ taglib uri="tags-fmt" prefix="fmt" %> + + + + + +
+
+

+

+
+
Index: lams_learning/web/welcome.jsp =================================================================== diff -u -rcdb910b6cd3de106725e2c22ded380c5c0fab650 -rd61e53f3f98df777cb3006fe79f844214d40d073 --- lams_learning/web/welcome.jsp (.../welcome.jsp) (revision cdb910b6cd3de106725e2c22ded380c5c0fab650) +++ lams_learning/web/welcome.jsp (.../welcome.jsp) (revision d61e53f3f98df777cb3006fe79f844214d40d073) @@ -20,13 +20,14 @@ --%> <%@ taglib uri="tags-html" prefix="html"%> +<%@ taglib uri="tags-fmt" prefix="fmt" %>
-

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.

+

+