Index: lams_learning/lib/lams/lams.jar =================================================================== diff -u -rf0f13cd7ba427bab1d37dc3a8a14e290c98245ef -r69343b4e0d3e3cc472943b0d8b15515d83573c39 Binary files differ Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java =================================================================== diff -u -rf0f13cd7ba427bab1d37dc3a8a14e290c98245ef -r69343b4e0d3e3cc472943b0d8b15515d83573c39 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision f0f13cd7ba427bab1d37dc3a8a14e290c98245ef) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision 69343b4e0d3e3cc472943b0d8b15515d83573c39) @@ -37,18 +37,7 @@ { - /** - * Returns a list of all the active Lessons a User is a Learner in. - * @param User the learner - * @return List of Lessons - * @throws LearnerServiceException in case of problems. - */ - public List getActiveLessons(User learner); - - - - /** * Gets the lesson object for the given key. * */ @@ -107,4 +96,12 @@ */ public String completeToolSession(long toolSessionId, User learner); + /** + * Retrieve all lessons that has been started, suspended or finished. All + * finished but archived lesson should not be loaded. + * + * @param learner the user who intend to start a lesson + * @return a list of active lessons. + */ + public List getActiveLessonsFor(User learner); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -rf0f13cd7ba427bab1d37dc3a8a14e290c98245ef -r69343b4e0d3e3cc472943b0d8b15515d83573c39 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision f0f13cd7ba427bab1d37dc3a8a14e290c98245ef) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 69343b4e0d3e3cc472943b0d8b15515d83573c39) @@ -112,14 +112,12 @@ // Service Methods //--------------------------------------------------------------------- /** - * Returns a list of all the active Lessons a User is a Learner in. - * @param User the learner - * @return List of Lessons - * @throws LearnerServiceException in case of problems. + * Delegate to lesson dao to load up the lessons. + * @see org.lamsfoundation.lams.learning.service.ILearnerService#getActiveLessonsFor(org.lamsfoundation.lams.usermanagement.User) */ - public List getActiveLessons(User learner) + public List getActiveLessonsFor(User learner) { - return lessonDAO.getActiveLessonsForLearner(learner); + return this.lessonDAO.getActiveLessonsForLearner(learner); } public Lesson getLesson(Long lessonId) @@ -209,18 +207,18 @@ learnerProgress = progressEngine.calculateProgress(learner, lesson, completedActivity,learnerProgress); learnerProgressDAO.updateLearnerProgress(learnerProgress); - createToolSessionsIfNecessary(learnerProgress); + //createToolSessionsIfNecessary(learnerProgress); } catch (ProgressException e) { throw new LearnerServiceException(e.getMessage()); } - catch (LamsToolServiceException e) +/* catch (LamsToolServiceException e) { throw new LearnerServiceException(e.getMessage()); } +*/ - return learnerProgress; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerServiceProxy.java =================================================================== diff -u -r36c2ed010b8a3893b895d781be1a219f2380e62d -r69343b4e0d3e3cc472943b0d8b15515d83573c39 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerServiceProxy.java (.../LearnerServiceProxy.java) (revision 36c2ed010b8a3893b895d781be1a219f2380e62d) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerServiceProxy.java (.../LearnerServiceProxy.java) (revision 69343b4e0d3e3cc472943b0d8b15515d83573c39) @@ -23,6 +23,7 @@ import javax.servlet.ServletContext; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; @@ -46,18 +47,30 @@ */ public static final ILearnerService getLearnerService(ServletContext servletContext) { - return (ILearnerService)getLearnerDomainService(servletContext); + return (ILearnerService)getDomainService(servletContext,"learnerService"); } /** + * Return the user management domain service object. It will delegate to + * the Spring helper method to retrieve the proper bean from Spring bean + * factory + * @param servletContext the servletContext for current application + * @return user management service object + */ + public static final IUserManagementService getUserManagementService(ServletContext servletContext) + { + return (IUserManagementService)getDomainService(servletContext,"userManagementService"); + } + + /** * Retrieve the proper Spring bean from bean factory. * @param servletContext the servletContext for current application * @return the Spring service bean. */ - private static Object getLearnerDomainService(ServletContext servletContext) + private static Object getDomainService(ServletContext servletContext,String serviceName) { WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); - return wac.getBean("learnerService"); + return wac.getBean(serviceName); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java =================================================================== diff -u -rf0f13cd7ba427bab1d37dc3a8a14e290c98245ef -r69343b4e0d3e3cc472943b0d8b15515d83573c39 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision f0f13cd7ba427bab1d37dc3a8a14e290c98245ef) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision 69343b4e0d3e3cc472943b0d8b15515d83573c39) @@ -33,6 +33,7 @@ import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.usermanagement.*; +import org.lamsfoundation.lams.web.action.LamsAction; import org.lamsfoundation.lams.lesson.*; import org.lamsfoundation.lams.learningdesign.*; import org.springframework.web.context.WebApplicationContext; @@ -43,7 +44,7 @@ * Creation date: 01-12-2005 * */ -public class ActivityAction extends LearnerAction { +public class ActivityAction extends LamsAction { protected static final String ACTIVITY_REQUEST_ATTRIBUTE = "activity"; protected static final String LEARNER_PROGRESS_REQUEST_ATTRIBUTE = "learnerprogress"; @@ -152,4 +153,27 @@ return null; } + /** + * Gets the session bean from session. + * @return SessionBean for this request, null if no session. + */ + protected SessionBean getSessionBean(HttpServletRequest request) { + HttpSession session = request.getSession(false); + if (session == null) { + return null; + } + SessionBean sessionBean = (SessionBean)session.getAttribute(SessionBean.NAME); + return sessionBean; + } + + /** + * Sets the session bean for this session. + */ + protected void setSessionBean(SessionBean sessionBean, HttpServletRequest request) { + HttpSession session = request.getSession(false); + if (session == null) { + return; + } + session.setAttribute(SessionBean.NAME, sessionBean); + } } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java =================================================================== diff -u -r0cbb25df35aa6fc1339d195f69b1aeef7a372680 -r69343b4e0d3e3cc472943b0d8b15515d83573c39 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision 0cbb25df35aa6fc1339d195f69b1aeef7a372680) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision 69343b4e0d3e3cc472943b0d8b15515d83573c39) @@ -21,40 +21,118 @@ package org.lamsfoundation.lams.learning.web.action; -import javax.servlet.http.*; +import java.io.IOException; +import java.util.List; -import org.lamsfoundation.lams.learning.web.bean.SessionBean; -import org.lamsfoundation.lams.web.action.Action; +import javax.servlet.ServletException; +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.service.LearnerServiceProxy; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.action.LamsDispatchAction; + + /** - * MyEclipse Struts - * Creation date: 01-12-2005 * + *

The action servlet that interacts with learner to start a lams learner + * module, join a user to the lesson and allows a user to exit a lesson.

+ * + *

It is also responsible for the interaction between lams server and + * flash. Flash will call method implemented in this class to get progress + * data or trigger a lams server calculation here

+ * + * Note:It needs to extend the LamsDispatchAction which has + * been customized to accomodate struts features to solve duplicate + * submission problem. + * + * @author Jacky Fang + * @since 3/03/2005 + * @version 1.1 + * + * ----------------XDoclet Tags-------------------- + * + * @struts:action path="/learner" + * parameter="method" + * validate="false" + * @struts.action-exception key="error.system.survey" scope="request" + * type="org.lamsfoundation.lams.learning.service.LearnerServiceException" + * path=".systemError" + * handler="org.lamsfoundation.lams.util.CustomStrutsExceptionHandler" + * @struts:action-forward name="" path="" + * + * ----------------XDoclet Tags-------------------- + * */ -public class LearnerAction extends Action { +public class LearnerAction extends LamsDispatchAction +{ - /** - * Gets the session bean from session. - * @return SessionBean for this request, null if no session. - */ - protected SessionBean getSessionBean(HttpServletRequest request) { - HttpSession session = request.getSession(false); - if (session == null) { - return null; - } - SessionBean sessionBean = (SessionBean)session.getAttribute(SessionBean.NAME); - return sessionBean; - } - - /** - * Sets the session bean for this session. - */ - protected void setSessionBean(SessionBean sessionBean, HttpServletRequest request) { - HttpSession session = request.getSession(false); - if (session == null) { - return; - } - session.setAttribute(SessionBean.NAME, sessionBean); - } - + + private static final String PARAM_USERDATA = "userId"; + private static final String ATTR_USERDATA = "user"; + + + /** + * + * + * + * @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 getActiveLessons(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + + User learner = getUserData(request); + + ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext()); + + List lessons = learnerService.getActiveLessonsFor(learner); + + + 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. + * @param request A standard Servlet HttpServletRequest class. + * @param surveyService the service facade of survey tool + * @return the user data value object + */ + private User getUserData(HttpServletRequest request) + { + //retrieve complete user data from http session + User currentUser = (User) request.getSession() + .getAttribute(ATTR_USERDATA); + //if no session cache available, retrieve it from data source + if (currentUser == null) + { + int userId = WebUtil.readIntParam(request,PARAM_USERDATA); + currentUser = LearnerServiceProxy.getUserManagementService(getServlet().getServletContext()) + .getUserById(new Integer(userId)); + //create session cache + request.getSession().setAttribute(ATTR_USERDATA, currentUser); + } + return currentUser; + } } \ No newline at end of file Index: lams_learning/web/WEB-INF/lib/lams.jar =================================================================== diff -u -rf0f13cd7ba427bab1d37dc3a8a14e290c98245ef -r69343b4e0d3e3cc472943b0d8b15515d83573c39 Binary files differ