Index: lams_build/lib/lams/lams-learning.jar =================================================================== diff -u -rf4c79beeec8eea50e99a8d2cde21c27d45aa446d -r0977a832c3e57655f1031778702ce6ea0e122985 Binary files differ Index: lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml =================================================================== diff -u -ra7766445094c16b343aa56dc1f73fd3051cef1db -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision a7766445094c16b343aa56dc1f73fd3051cef1db) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -43,7 +43,7 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED - PROPAGATION_REQUIRED + PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java =================================================================== diff -u -rd61e53f3f98df777cb3006fe79f844214d40d073 -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision d61e53f3f98df777cb3006fe79f844214d40d073) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -29,8 +29,9 @@ import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.GateActivity; import org.lamsfoundation.lams.learningdesign.GroupingActivity; -import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.lesson.dto.LearnerProgressDTO; import org.lamsfoundation.lams.lesson.dto.LessonDTO; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.MessageService; @@ -78,6 +79,14 @@ public LearnerProgress getProgressById(Long progressId); /** + * Return the current progress data against progress id. + * Returns a DTO suitable to send to Flash. + * @param progressId + * @return + */ + public LearnerProgressDTO getProgressDTOById(Long progressId); + + /** * Marks an activity as attempted. Called when a user selects an OptionsActivity. * @param learner the Learner * @param lesson the Lesson to get progress from. @@ -113,18 +122,29 @@ * Complete the activity in the progress engine and delegate to the progress * engine to calculate the next activity in the learning design. This * process might be triggerred by system controlled the activity, such as - * grouping and gate. It might also be triggerred by complete tool session - * progress from tool. Therefore, the transaction demarcation needs to be - * configured as REQURIED. + * grouping and gate. This method should be used when we don't have an activity + * that is already part of the Hibernate session. * + * @param learner the learner who are running this activity in the design. + * @param activity the activity is being run. + * @param lesson the lesson this learner is currently in. + * @return the url for next activity. + */ + public String completeActivity(User learner,Long activityId,Lesson lesson); + + /** + * Complete the activity in the progress engine and delegate to the progress + * engine to calculate the next activity in the learning design. This method should + * be used when we t have an activity that is already part of the Hibernate session. + * It is currently triggered by complete tool session progress from tool. * * @param learner the learner who are running this activity in the design. - * @param activity the activity is being runned. + * @param activity the activity is being run. * @param lesson the lesson this learner is currently in. * @return the url for next activity. */ public String completeActivity(User learner,Activity activity,Lesson lesson); - + /** * Retrieve all lessons that has been started, suspended or finished. All * finished but archived lesson should not be loaded. @@ -136,10 +156,11 @@ /** * Mark the learner progress as restarting to indicate the current learner - * has exit the lesson - * @param progress the current learner progress. + * has exit the lesson. Doesn't use the cached progress object in case it + * + * @param progressId the current learner progress. */ - public void exitLesson(LearnerProgress progress); + public void exitLesson(Long progressId); /** * Returns an activity according to the activity id. @@ -157,25 +178,52 @@ /** * Perform random grouping for a list of learners based on the grouping - * activity. - * @param groupingActivity the activity that has create grouping. + * activity. This method should be used when we don't have an grouping activity + * that is already part of the Hibernate session. + * + * @param groupingActivityId the activity that has create grouping. * @param learners the list of learners need to be grouped. */ public void performGrouping(GroupingActivity groupingActivity, List learners); + /** + * Perform random grouping for a list of learners based on the grouping + * activity. This method should be used when we do have an grouping activity + * that is already part of the Hibernate session. + * @param groupingActivityId the activity that has create grouping. + * @param learners the list of learners need to be grouped. + */ + public void performGrouping(Long groupingActivityId, List learners); + + /** * Perform random grouping a single learner based on the grouping activity. - * @param groupingActivity the activity that has create grouping. + * @param groupingActivityId the activity that has create grouping. * @param learner the learner needs to be grouped */ - public void performGrouping(GroupingActivity groupingActivity, User learner); + public void performGrouping(Long groupingActivityId, User learner); /** - * Check up the gate status to go through the gate. + * Check up the gate status to go through the gate. This also updates the gate. + * This method should be used when we do not have an grouping activity + * that is already part of the Hibernate session. + * @param gateid the gate that current learner is facing. It could be + * synch gate, schedule gate or permission gate. + * @param knocker the learner who wants to go through the gate. + * @param lessonLearners the entire lesson learners. + */ + public boolean knockGate(Long gateActivityId,User knocker,List lessonLearners); + + /** + * Check up the gate status to go through the gate. This also updates the gate. + * This method should be used when we do have an grouping activity + * that is already part of the Hibernate session. * @param gate the gate that current learner is facing. It could be * synch gate, schedule gate or permission gate. + * Don't supply the actual gate from the cached web version + * as it might be out of date or not attached to the session * @param knocker the learner who wants to go through the gate. * @param lessonLearners the entire lesson learners. */ - public boolean knockGate(GateActivity gate,User knocker,List lessonLearners); + public boolean knockGate(GateActivity gateActivity,User knocker,List lessonLearners); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r7d5e18b6ddc40f4de3d34eefa114afc297724289 -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 7d5e18b6ddc40f4de3d34eefa114afc297724289) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -47,6 +47,7 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; +import org.lamsfoundation.lams.lesson.dto.LearnerProgressDTO; import org.lamsfoundation.lams.lesson.dto.LessonDTO; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.dao.IToolSessionDAO; @@ -260,6 +261,14 @@ } /** + * @see org.lamsfoundation.lams.learning.service.ILearnerService#getProgressDTOById(java.lang.Long) + */ + public LearnerProgressDTO getProgressDTOById(Long progressId) + { + return learnerProgressDAO.getLearnerProgress(progressId).getLearnerProgressData(); + } + + /** * @see org.lamsfoundation.lams.learning.service.ILearnerService#chooseActivity(org.lamsfoundation.lams.usermanagement.User, org.lamsfoundation.lams.lesson.Lesson, org.lamsfoundation.lams.learningdesign.Activity) */ public LearnerProgress chooseActivity(User learner, Lesson lesson, Activity activity) @@ -313,19 +322,26 @@ */ public String completeToolSession(Long toolSessionId, Long learnerId) { - User learner = userManagementService.getUserById(new Integer(learnerId.intValue())); - //update tool session state in lams ToolSession toolSession = lamsCoreToolService.getToolSessionById(toolSessionId); toolSession.setToolSessionStateId(ToolSession.ENDED_STATE); lamsCoreToolService.updateToolSession(toolSession); + User learner = userManagementService.getUserById(new Integer(learnerId.intValue())); return completeActivity(learner, toolSession.getToolActivity(), toolSession.getLesson()); } /** + * @see org.lamsfoundation.lams.learning.service.ILearnerService#completeActivity(org.lamsfoundation.lams.usermanagement.User, java.lang.Long, org.lamsfoundation.lams.lesson.Lesson) + */ + public String completeActivity(User learner,Long activityId,Lesson lesson) { + Activity activity = getActivity(activityId); + return completeActivity(learner, activity,lesson); + } + + /** * @see org.lamsfoundation.lams.learning.service.ILearnerService#completeActivity(org.lamsfoundation.lams.usermanagement.User, org.lamsfoundation.lams.learningdesign.Activity, org.lamsfoundation.lams.lesson.Lesson) */ public String completeActivity(User learner,Activity activity,Lesson lesson) @@ -353,10 +369,17 @@ * Exit a lesson. * @see org.lamsfoundation.lams.learning.service.ILearnerService#exitLesson(org.lamsfoundation.lams.lesson.LearnerProgress) */ - public void exitLesson(LearnerProgress progress) + public void exitLesson(Long progressId) { - progress.setRestarting(true); - learnerProgressDAO.updateLearnerProgress(progress); + LearnerProgress progress = learnerProgressDAO.getLearnerProgress(progressId); + if ( progress != null ) { + progress.setRestarting(true); + learnerProgressDAO.updateLearnerProgress(progress); + } else { + String error = "Learner Progress "+progressId+" does not exist. Cannot exit lesson successfully."; + log.error(error); + throw new LearnerServiceException(error); + } } /** @@ -368,48 +391,89 @@ } /** - * @see org.lamsfoundation.lams.learning.service.ILearnerService#performGrouping(org.lamsfoundation.lams.learningdesign.GroupingActivity, java.util.List) + * @see org.lamsfoundation.lams.learning.service.ILearnerService#performGrouping(java.lang.Long, java.util.List) */ - public void performGrouping(GroupingActivity groupingActivity, List learners) + public void performGrouping(Long groupingActivityId, List learners) { - Grouping grouping = groupingActivity.getCreateGrouping(); - - grouping.doGrouping(learners); - - groupingDAO.update(grouping); + GroupingActivity groupingActivity = (GroupingActivity) activityDAO.getActivityByActivityId(groupingActivityId, GroupingActivity.class); + if ( groupingActivity != null ) { + performGrouping(groupingActivity, learners); + + } else { + + String error = "Grouping activity "+groupingActivityId+" does not exist. Cannot perform grouping."; + log.error(error); + throw new LearnerServiceException(error); + + } } + /** + * @see org.lamsfoundation.lams.learning.service.ILearnerService#performGrouping(org.lamsfoundation.lams.learningdesign.GroupingActivity, java.util.List) + */ + public void performGrouping(GroupingActivity groupingActivity, List learners) { + + Grouping grouping = groupingActivity.getCreateGrouping(); + grouping.doGrouping(learners); + groupingDAO.update(grouping); + } + + + /** * @see org.lamsfoundation.lams.learning.service.ILearnerService#performGrouping(org.lamsfoundation.lams.learningdesign.GroupingActivity, org.lamsfoundation.lams.usermanagement.User) */ - public void performGrouping(GroupingActivity groupingActivity, User learner) + public void performGrouping(Long groupingActivityId, User learner) { - Grouping grouping = groupingActivity.getCreateGrouping(); + GroupingActivity groupingActivity = (GroupingActivity) activityDAO.getActivityByActivityId(groupingActivityId, GroupingActivity.class); + if ( groupingActivity != null ) { + + Grouping grouping = groupingActivity.getCreateGrouping(); + grouping.doGrouping(learner); + groupingDAO.update(grouping); + + } else { + + String error = "Grouping activity "+groupingActivityId+" does not exist. Cannot perform grouping."; + log.error(error); + throw new LearnerServiceException(error); + + } - grouping.doGrouping(learner); - - groupingDAO.update(grouping); - } /** + * @see org.lamsfoundation.lams.learning.service.ILearnerService#knockGate(java.lang.Long, org.lamsfoundation.lams.usermanagement.User, java.util.List) + */ + public boolean knockGate(Long gateActivityId, User knocker, List lessonLearners) { + GateActivity gate = (GateActivity) activityDAO.getActivityByActivityId(gateActivityId, GateActivity.class); + if ( gate != null ) { + return knockGate(gate,knocker,lessonLearners); + } + + String error = "Gate activity "+gateActivityId+" does not exist. Cannot knock on gate."; + log.error(error); + throw new LearnerServiceException(error); + } + /** * @see org.lamsfoundation.lams.learning.service.ILearnerService#knockGate(org.lamsfoundation.lams.learningdesign.GateActivity, org.lamsfoundation.lams.usermanagement.User, java.util.List) */ public boolean knockGate(GateActivity gate, User knocker, List lessonLearners) { - boolean gateOpen = false; - //knock the gate. - if(gate.shouldOpenGateFor(knocker,lessonLearners)) - gateOpen = true; - else - gateOpen = false; - - //update gate including updating the waiting list and gate status in - //the database. - activityDAO.update(gate); - - return gateOpen; + boolean gateOpen = false; + //knock the gate. + if(gate.shouldOpenGateFor(knocker,lessonLearners)) + gateOpen = true; + else + gateOpen = false; + + //update gate including updating the waiting list and gate status in + //the database. + activityDAO.update(gate); + return gateOpen; + } + //--------------------------------------------------------------------- // Helper Methods //--------------------------------------------------------------------- Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DummyLearnerAction.java =================================================================== diff -u -r7d5e18b6ddc40f4de3d34eefa114afc297724289 -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DummyLearnerAction.java (.../DummyLearnerAction.java) (revision 7d5e18b6ddc40f4de3d34eefa114afc297724289) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DummyLearnerAction.java (.../DummyLearnerAction.java) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -161,7 +161,7 @@ log.debug("The learner ["+learner.getUserId()+"] joined lesson. The" +"porgress data is:"+learnerProgress.toString()); - request.getSession().setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE,learnerProgress); + LearningWebUtil.setLearnerProgress(learnerProgress); return mapping.findForward(DISPLAY_ACTIVITY); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java =================================================================== diff -u -rcdb910b6cd3de106725e2c22ded380c5c0fab650 -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java (.../GateAction.java) (revision cdb910b6cd3de106725e2c22ded380c5c0fab650) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java (.../GateAction.java) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -40,6 +40,7 @@ import org.lamsfoundation.lams.learning.service.LearnerServiceProxy; import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.learning.web.util.LessonLearnerDataManager; +import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.GateActivity; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.web.action.LamsDispatchAction; @@ -116,21 +117,25 @@ learnerProgress.getLesson().getLessonId().longValue(), learnerService); //knock the gate - boolean gateOpen = learnerService.knockGate((GateActivity)learnerProgress.getNextActivity(), + boolean gateOpen = learnerService.knockGate(learnerProgress.getNextActivity().getActivityId(), learnerProgress.getUser(), currentLessonLearners); - //if the gate is open, let the learner go to the next activity. + //if the gate is open, let the learner go to the next activity ( updating the cached learner progress on the way ) if(gateOpen) { String nextActivityUrl = learnerService.completeActivity(learnerProgress.getUser(), - learnerProgress.getNextActivity(), + learnerProgress.getNextActivity().getActivityId(), learnerProgress.getLesson()); - response.sendRedirect(nextActivityUrl); + // get the update + LearningWebUtil.setLearnerProgress(learnerService.getProgressById(learnerProgress.getLearnerProgressId())); + response.sendRedirect(nextActivityUrl); return null; } - //if the gate is closed, ask the learner to wait - else + //if the gate is closed, ask the learner to wait ( updating the cached learner progress on the way ) + else { + LearningWebUtil.setLearnerProgress(learnerService.getProgressById(learnerProgress.getLearnerProgressId())); return mapping.findForward(WAITING); + } } //--------------------------------------------------------------------- @@ -148,7 +153,7 @@ if(!isNextActivityValid(learnerProgress)) throw new LearnerServiceException("Error in progress engine. Getting " +learnerProgress.getNextActivity().toString() - +" where it should be grouping activity"); + +" where it should be gate activity"); } /** @@ -157,6 +162,6 @@ */ private boolean isNextActivityValid(LearnerProgress learnerProgress) { - return learnerProgress.getNextActivity()!=null&&(learnerProgress.getNextActivity() instanceof GateActivity); + return learnerProgress.getNextActivity()!=null&&(learnerProgress.getNextActivity().isGateActivity()); } } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java =================================================================== diff -u -r7d5e18b6ddc40f4de3d34eefa114afc297724289 -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision 7d5e18b6ddc40f4de3d34eefa114afc297724289) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -123,7 +123,7 @@ List currentLearners = LessonLearnerDataManager.getAllLessonLearners(getServlet().getServletContext(), learnerProgress.getLesson().getLessonId().longValue(), learnerService); - learnerService.performGrouping((GroupingActivity)learnerProgress.getNextActivity(), + learnerService.performGrouping(learnerProgress.getNextActivity().getActivityId(), currentLearners); LearningWebUtil.putActivityInRequest(request, learnerProgress.getNextActivity(), learnerService); @@ -228,7 +228,7 @@ */ private boolean isNextActivityValid(LearnerProgress learnerProgress) { - return learnerProgress.getNextActivity()!=null&&(learnerProgress.getNextActivity() instanceof GroupingActivity); + return learnerProgress.getNextActivity()!=null&&(learnerProgress.getNextActivity().isGroupingActivity()); } } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java =================================================================== diff -u -r7d5e18b6ddc40f4de3d34eefa114afc297724289 -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision 7d5e18b6ddc40f4de3d34eefa114afc297724289) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -42,6 +42,7 @@ import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.dto.ProgressActivityDTO; import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.lesson.dto.LearnerProgressDTO; import org.lamsfoundation.lams.lesson.dto.LessonDTO; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.WebUtil; @@ -97,14 +98,22 @@ 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), + /** Handle an exception - either thrown by the service or by the web layer. Allows the exception + * to be logged properly and ensure that an actual message goes back to Flash. + * + * @param e + * @param methodKey + * @param learnerService + * @return + */ + protected 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 @@ -263,7 +272,7 @@ if(log.isDebugEnabled()) log.debug("Lesson id is: "+learnerProgress.getLesson().getLessonId()); - learnerService.exitLesson(learnerProgress); + learnerService.exitLesson(learnerProgress.getLearnerProgressId()); LessonLearnerDataManager.removeLessonUserFromCache(getServlet().getServletContext(), learnerProgress.getLesson(), @@ -289,6 +298,10 @@ * call. It is used to construct or restore the flash learner progress * bar

* + *

Gets the most recent copy from the database - not the cached version. + * That way if the cached version has problems, at least we start off right! + *

+ * *

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 @@ -319,9 +332,12 @@ try { //SessionBean sessionBean = LearningWebUtil.getSessionBean(request,getServlet().getServletContext()); - LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByID(request,getServlet().getServletContext()); + + ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext()); + long learnerProgressId = WebUtil.readLongParam(request,LearningWebUtil.PARAM_PROGRESS_ID); + LearnerProgressDTO learnerProgress = learnerService.getProgressDTOById(new Long(learnerProgressId)); - message = new FlashMessage("getFlashProgressData",learnerProgress.getLearnerProgressData()); + message = new FlashMessage("getFlashProgressData",learnerProgress); } catch (Exception e ) { message = handleException(e, "getFlashProgressData", LearnerServiceProxy.getLearnerService(getServlet().getServletContext())); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java =================================================================== diff -u -rcdb910b6cd3de106725e2c22ded380c5c0fab650 -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java (.../ActivityMapping.java) (revision cdb910b6cd3de106725e2c22ded380c5c0fab650) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java (.../ActivityMapping.java) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -324,8 +324,8 @@ if (activity != null) { - String query = "?activityId=" + activity.getActivityId(); - url += query; + url += url.indexOf("?") > -1 ? "&" : "?"; + url += "activityId=" + activity.getActivityId(); } if (useContext) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java =================================================================== diff -u -rcdb910b6cd3de106725e2c22ded380c5c0fab650 -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java (.../ActivityMappingStrategy.java) (revision cdb910b6cd3de106725e2c22ded380c5c0fab650) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java (.../ActivityMappingStrategy.java) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -53,15 +53,14 @@ else // should be a simple activity { if ( activity.isGroupingActivity()) { - strutsAction = "/grouping.do?"; + strutsAction = "/grouping.do?method=performGrouping"; } else if (activity.isGateActivity()) { - strutsAction = "/gate.do"; + strutsAction = "/gate.do?method=knockGate"; // not completed so return wait URL } else if (activity.isToolActivity()) { strutsAction = "/LoadToolActivity.do"; - //strutsAction = "/DisplayToolActivity.do"; } } return strutsAction; Index: lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java =================================================================== diff -u -rcdab8186de5e9c75a9d6774616ead602dbf9cb69 -r0977a832c3e57655f1031778702ce6ea0e122985 --- lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision cdab8186de5e9c75a9d6774616ead602dbf9cb69) +++ lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision 0977a832c3e57655f1031778702ce6ea0e122985) @@ -324,7 +324,7 @@ public void testExitLesson() { - learnerService.exitLesson(testProgress); + learnerService.exitLesson(testProgress.getLearnerProgressId()); LearnerProgress progress = learnerProgressDao.getLearnerProgressByLearner(testUser,testLesson); @@ -340,7 +340,7 @@ assertTrue("verify the existance of test user",!randomGrouping.doesLearnerExist(testUser)); - learnerService.performGrouping((GroupingActivity)randomGroupingActivity,testUser); + learnerService.performGrouping(randomGroupingActivity.getActivityId(),testUser); assertTrue("verify the existance of test user",randomGrouping.doesLearnerExist(testUser)); } @@ -356,7 +356,7 @@ //get sync gate GateActivity synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID)); - boolean gateOpen = learnerService.knockGate(synchGate,testUser,lessonLearners); + boolean gateOpen = learnerService.knockGate(synchGate.getActivityId(),testUser,lessonLearners); assertTrue("gate is closed",!gateOpen); synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID)); @@ -374,7 +374,7 @@ //get sync gate GateActivity synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID)); - boolean gateOpen = learnerService.knockGate(synchGate,testUser2,lessonLearners); + boolean gateOpen = learnerService.knockGate(synchGate.getActivityId(),testUser2,lessonLearners); assertTrue("gate is closed",gateOpen); synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID));