Index: lams_learning/lib/lams/lams.jar =================================================================== diff -u -rf73c3d7878d6f6c013a43da96353e4e0983e1a61 -r09b65e403c9fcb6cc894e6af85c408e654b46f8c Binary files differ Index: lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java =================================================================== diff -u -rf73c3d7878d6f6c013a43da96353e4e0983e1a61 -r09b65e403c9fcb6cc894e6af85c408e654b46f8c --- lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision f73c3d7878d6f6c013a43da96353e4e0983e1a61) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision 09b65e403c9fcb6cc894e6af85c408e654b46f8c) @@ -52,38 +52,44 @@ * the learner to the next step. * @throws ProgressException if progress cannot be calculated successfully. */ - public LearnerProgress calculateProgress(User learner, Lesson lesson, Activity completedActivity) throws ProgressException + public LearnerProgress calculateProgress(User learner, + Lesson lesson, + Activity completedActivity, + LearnerProgress learnerProgress) throws ProgressException { - //mark activity as complete for user + learnerProgress.setProgressState(completedActivity,LearnerProgress.ACTIVITY_COMPLETED); - //if activity has transition + Transition transition = completedActivity.getTransitionTo(); - //follow transition to get next activity - - //mark next activit as current act for user - - //fill in VO with right data for next act. - - //else if activity has a parent activity - - //get parent - - //notify parent activity that child is complete - - //if parent is now complete - - //recurse - - //else (if no parent and no transtions) - - //mark learner as having finished sequence - - //fill in VO with right data for the end of sequence - + if(transition !=null) + return progressCompletedActivity(completedActivity, learnerProgress, transition); + else + { + Activity parent = completedActivity.getParentActivity(); + //if(parent!=null) + + + } return null; } /** + * @param completedActivity + * @param learnerProgress + * @param transition + * @return + */ + private LearnerProgress progressCompletedActivity(Activity completedActivity, LearnerProgress learnerProgress, Transition transition) + { + learnerProgress.setPreviousActivity(completedActivity); + learnerProgress.setCurrentActivity(transition.getActivityByToActivityId()); + learnerProgress.setNextActivity(transition.getActivityByToActivityId()); + learnerProgress.setProgressState(transition.getActivityByToActivityId(), + LearnerProgress.ACTIVITY_ATTEMPTED); + return learnerProgress; + } + + /** * Method determines the start point for a learner when they begin a Lesson. * @param learner the User who is starting the Lesson. * @param lesson the Lesson the learner is starting. Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -rf73c3d7878d6f6c013a43da96353e4e0983e1a61 -r09b65e403c9fcb6cc894e6af85c408e654b46f8c --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision f73c3d7878d6f6c013a43da96353e4e0983e1a61) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 09b65e403c9fcb6cc894e6af85c408e654b46f8c) @@ -46,7 +46,7 @@ import org.lamsfoundation.lams.usermanagement.User; /** * This class is a facade over the Learning middle tier. - * @author chris + * @author chris, Jacky Fang */ public class LearnerService implements ILearnerService { @@ -62,6 +62,7 @@ //--------------------------------------------------------------------- // Inversion of Control Methods - Constructor injection //--------------------------------------------------------------------- + /** Creates a new instance of LearnerService */ public LearnerService(ProgressEngine progressEngine) { @@ -177,9 +178,13 @@ * @return the bean containing the display data for the Learner * @throws LearnerServiceException in case of problems. */ - public LearnerProgress calculateProgress(Activity completedActivity, User learner, Lesson lesson) throws ProgressException + public LearnerProgress calculateProgress(Activity completedActivity, + User learner, + Lesson lesson) throws ProgressException { - return progressEngine.calculateProgress(learner, lesson, completedActivity); + LearnerProgress learnerProgress = learnerProgressDAO.getLearnerProgressByLearner(learner,lesson); + + return progressEngine.calculateProgress(learner, lesson, completedActivity,learnerProgress); } @@ -232,7 +237,7 @@ { ToolActivity toolActivity = (ToolActivity)i.next(); if(shouldCreateToolSession(learnerProgress,toolActivity)) - createToolSessionFor(toolActivity, learnerProgress.getUser()); + createToolSessionFor(toolActivity, learnerProgress.getUser(),learnerProgress.getLesson()); } } @@ -255,20 +260,23 @@ } /** - * Create a tool session for learner against a tool activity. This will + *

Create a lams tool session for learner against a tool activity. This will * have concurrency issues interms of grouped tool session because it might * be inserting some tool session that has already been inserted by other * member in the group. If the unique_check is broken, we need to query * the database to get the instance instead of inserting it. It should be - * done in the Spring rollback strategy. - * + * done in the Spring rollback strategy.

+ * + * Once lams tool session is inserted, we need to notify the tool to its + * own session. + * * @param toolActivity * @param learner * @throws LamsToolServiceException */ - private void createToolSessionFor(ToolActivity toolActivity,User learner) throws LamsToolServiceException + private void createToolSessionFor(ToolActivity toolActivity,User learner,Lesson lesson) throws LamsToolServiceException { - ToolSession toolSession = lamsToolService.createToolSession(learner,toolActivity); + ToolSession toolSession = lamsToolService.createToolSession(learner,toolActivity,lesson); toolActivity.getToolSessions().add(toolSession); Index: lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java =================================================================== diff -u -rf73c3d7878d6f6c013a43da96353e4e0983e1a61 -r09b65e403c9fcb6cc894e6af85c408e654b46f8c --- lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision f73c3d7878d6f6c013a43da96353e4e0983e1a61) +++ lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision 09b65e403c9fcb6cc894e6af85c408e654b46f8c) @@ -115,7 +115,6 @@ ((ToolActivity)testProgress.getNextActivity()).getToolSessions()); assertEquals("verify number of tool sessions created",1, ((ToolActivity)testProgress.getNextActivity()).getToolSessions().size()); - assertTrue(true); } } Index: lams_monitoring/lib/lams/lams.jar =================================================================== diff -u -r5527b41a5f478e30cd0f6b100a217d1046604343 -r09b65e403c9fcb6cc894e6af85c408e654b46f8c Binary files differ Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -r5527b41a5f478e30cd0f6b100a217d1046604343 -r09b65e403c9fcb6cc894e6af85c408e654b46f8c --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 5527b41a5f478e30cd0f6b100a217d1046604343) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 09b65e403c9fcb6cc894e6af85c408e654b46f8c) @@ -22,6 +22,7 @@ import java.util.List; +import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.service.LamsToolServiceException; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; @@ -45,7 +46,7 @@ * @param organizationUsers a list of learner will be in this new lessons. * @param staffs a list of staffs who will be in charge of this lesson. */ - public void createLesson(long learningDesignId,User user,Organisation organisation,List organizationUsers,List staffs);; + public Lesson createLesson(long learningDesignId,User user,Organisation organisation,List organizationUsers,List staffs);; /** * Start the specified the lesson. It must be created before calling this Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r5527b41a5f478e30cd0f6b100a217d1046604343 -r09b65e403c9fcb6cc894e6af85c408e654b46f8c --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 5527b41a5f478e30cd0f6b100a217d1046604343) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 09b65e403c9fcb6cc894e6af85c408e654b46f8c) @@ -111,11 +111,11 @@ * * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#createLesson(long, org.lamsfoundation.lams.usermanagement.User, java.util.List, java.util.List) */ - public void createLesson(long learningDesignId, - User user, - Organisation organisation, - List organizationUsers, - List staffs) + public Lesson createLesson(long learningDesignId, + User user, + Organisation organisation, + List organizationUsers, + List staffs) { LearningDesign originalLearningDesign = authoringService.getLearningDesign(new Long(learningDesignId)); //copy the current learning design @@ -133,11 +133,11 @@ } authoringService.updateLearningDesign(copiedLearningDesign); //create the new lesson - createNewLesson(user, - organisation, - organizationUsers, - staffs, - copiedLearningDesign); + return createNewLesson(user, + organisation, + organizationUsers, + staffs, + copiedLearningDesign); } @@ -160,7 +160,8 @@ if (shouldInitToolSessionFor(activity)&&this.isSurvey((ToolActivity)activity)) { initToolSessionFor((ToolActivity) activity, - requestedLesson.getAllLearners()); + requestedLesson.getAllLearners(), + requestedLesson); } } //update lesson status @@ -191,11 +192,11 @@ * @param copiedLearningDesign the new run-time learning design copy * for this lesson. */ - private void createNewLesson(User user, - Organisation organisation, - List organizationUsers, - List staffs, - LearningDesign copiedLearningDesign) + private Lesson createNewLesson(User user, + Organisation organisation, + List organizationUsers, + List staffs, + LearningDesign copiedLearningDesign) { //create a new lesson object LessonClass newLessonClass = createNewLessonClass(copiedLearningDesign); @@ -217,6 +218,8 @@ newLessonClass); newLessonClass.setLesson(newLesson); lessonDAO.saveLesson(newLesson); + + return newLesson; } /** @@ -250,14 +253,14 @@ * @param activity * @throws LamsToolServiceException */ - private void initToolSessionFor(ToolActivity activity, Set learners) throws LamsToolServiceException + private void initToolSessionFor(ToolActivity activity, Set learners,Lesson lesson) throws LamsToolServiceException { activity.setToolSessions(new HashSet()); for (Iterator i = learners.iterator(); i.hasNext();) { User learner = (User) i.next(); - ToolSession toolSession = lamsToolService.createToolSession(learner,activity); + ToolSession toolSession = lamsToolService.createToolSession(learner,activity,lesson); //ask tool to create their own tool sessions using the given id. lamsToolService.notifyToolsToCreateSession(toolSession.getToolSessionId(), activity); //update the hibernate persistent object Index: lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/service/TestMonitoringService.java =================================================================== diff -u -r5527b41a5f478e30cd0f6b100a217d1046604343 -r09b65e403c9fcb6cc894e6af85c408e654b46f8c --- lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/service/TestMonitoringService.java (.../TestMonitoringService.java) (revision 5527b41a5f478e30cd0f6b100a217d1046604343) +++ lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/service/TestMonitoringService.java (.../TestMonitoringService.java) (revision 09b65e403c9fcb6cc894e6af85c408e654b46f8c) @@ -56,7 +56,7 @@ private final Integer TEST_ORGANIZATION_ID = new Integer(1); //it might be different because it is automatically generated by database //TODO create a get lesson by design method in lesson dao. - private final Long TEST_LESSON_ID = new Long(1); + private static Long TEST_LESSON_ID = null; //--------------------------------------------------------------------- // Testing Data - Instance Variables //--------------------------------------------------------------------- @@ -115,12 +115,12 @@ LinkedList staffs = new LinkedList(); staffs.add(testStaff); - monitoringService.createLesson(TEST_LEARNING_DESIGN_ID, - testUser, - testOrganisation, - learners, - staffs); - + Lesson testLesson = monitoringService.createLesson(TEST_LEARNING_DESIGN_ID, + testUser, + testOrganisation, + learners, + staffs); + TEST_LESSON_ID=testLesson.getLessonId(); Lesson createdLesson = lessonDao.getLesson(TEST_LESSON_ID); assertNotNull(createdLesson); assertEquals("verify the design",TEST_LEARNING_DESIGN_ID,createdLesson.getLearningDesign().getLearningDesignId().longValue());