Index: lams_common/src/java/org/lamsfoundation/lams/lesson/LearnerProgress.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/LearnerProgress.java,v diff -u -r1.5 -r1.6 --- lams_common/src/java/org/lamsfoundation/lams/lesson/LearnerProgress.java 16 Feb 2005 23:46:19 -0000 1.5 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/LearnerProgress.java 17 Feb 2005 05:32:57 -0000 1.6 @@ -2,8 +2,12 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.ActivityOrderComparator; + import java.io.Serializable; import java.util.Set; +import java.util.TreeSet; + import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; @@ -68,8 +72,17 @@ * Indicates is the User has completed this lesson. */ private boolean lessonComplete; - + /** default constructor */ + public LearnerProgress() + { + } + + public LearnerProgress(User user,Lesson lesson) + { + this(null,user,lesson,new TreeSet( new ActivityOrderComparator()),new TreeSet( new ActivityOrderComparator())); + } + /** full constructor */ public LearnerProgress(Long learnerProgressId, User user, Lesson lesson, Set attemptedActivities, Set completedActivities) { @@ -80,11 +93,6 @@ this.completedActivities = completedActivities; } - /** default constructor */ - public LearnerProgress() - { - } - /** * * @@ -126,7 +134,7 @@ } /** - * + * * */ public Set getAttemptedActivities() Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java,v diff -u -r1.2 -r1.3 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java 2 Feb 2005 05:30:54 -0000 1.2 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java 17 Feb 2005 05:32:58 -0000 1.3 @@ -7,6 +7,7 @@ package org.lamsfoundation.lams.lesson.dao; import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.usermanagement.User; /** @@ -22,6 +23,14 @@ * @return the lesson */ public LearnerProgress getLearnerProgress(Long learnerProgressId); + + /** + * Retrieves the learner progress object for user in a lesson. + * @param user the user who owns the learner progress data. + * @return the user's progress data + */ + public LearnerProgress getLearnerProgressByLeaner(final User learner, + final Lesson lesson); /** * Saves or Updates learner progress data. @@ -34,4 +43,10 @@ * @param learnerProgress */ public void deleteLearnerProgress(LearnerProgress learnerProgress); + + /** + * Update learner progress data. + * @param learnerProgress + */ + public void updateLearnerProgress(LearnerProgress learnerProgress); } Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java,v diff -u -r1.4 -r1.5 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java 11 Feb 2005 01:24:23 -0000 1.4 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java 17 Feb 2005 05:32:58 -0000 1.5 @@ -9,7 +9,6 @@ import java.util.List; import org.lamsfoundation.lams.lesson.Lesson; -import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.usermanagement.User; /** @@ -49,14 +48,6 @@ public void deleteLesson(Lesson lesson); /** - * Retrieves the LearnerProgress - * @param learner the User in the Lesson - * @param lesson the Lesson - * @return LearnerProgess object containing the progress and state data. - */ - public LearnerProgress getLearnerProgress(User learner, Lesson lesson); - - /** * Update a requested lesson. * @param createdLesson */ Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java,v diff -u -r1.3 -r1.4 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java 2 Feb 2005 05:30:53 -0000 1.3 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java 17 Feb 2005 05:32:57 -0000 1.4 @@ -6,19 +6,27 @@ package org.lamsfoundation.lams.lesson.dao.hibernate; +import net.sf.hibernate.HibernateException; +import net.sf.hibernate.Session; + +import org.springframework.orm.hibernate.HibernateCallback; +import org.springframework.orm.hibernate.HibernateTemplate; import org.springframework.orm.hibernate.support.HibernateDaoSupport; import org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO; -import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.usermanagement.User; + /** * Hibernate implementation of ILessonDAO * @author chris */ public class LearnerProgressDAO extends HibernateDaoSupport implements ILearnerProgressDAO { - + private final static String LOAD_PROGRESS_BY_LEARNER = + "from LearnerProgress p where p.user = :learner and p.lesson = :lesson"; + /** * Retrieves the Lesson * @param lessonId identifies the lesson to get @@ -46,5 +54,33 @@ { getHibernateTemplate().delete(learnerProgress); } - + + /** + * @see org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO#getLearnerProgressByLeaner(org.lamsfoundation.lams.usermanagement.User) + */ + public LearnerProgress getLearnerProgressByLeaner(final User learner, final Lesson lesson) + { + HibernateTemplate hibernateTemplate = new HibernateTemplate(this.getSessionFactory()); + + return (LearnerProgress)hibernateTemplate.execute( + new HibernateCallback() + { + public Object doInHibernate(Session session) throws HibernateException + { + return session.createQuery(LOAD_PROGRESS_BY_LEARNER) + .setEntity("learner",learner) + .setEntity("lesson",lesson) + .uniqueResult(); + } + } + ); + } + + /** + * @see org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO#updateLearnerProgress(org.lamsfoundation.lams.lesson.LearnerProgress) + */ + public void updateLearnerProgress(LearnerProgress learnerProgress) + { + this.getHibernateTemplate().update(learnerProgress); + } } Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java,v diff -u -r1.5 -r1.6 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java 11 Feb 2005 01:24:22 -0000 1.5 +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java 17 Feb 2005 05:32:57 -0000 1.6 @@ -20,7 +20,6 @@ import org.lamsfoundation.lams.lesson.dao.ILessonDAO; import org.lamsfoundation.lams.lesson.Lesson; -import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.usermanagement.User; /** * Hibernate implementation of ILessonDAO @@ -111,17 +110,6 @@ getHibernateTemplate().delete(lesson); } - /** - * Retrieves the LearnerProgress - * @param learner the User in the Lesson - * @param lesson the Lesson - * @return LearnerProgess object containing the progress and state data. - */ - public LearnerProgress getLearnerProgress(User learner, Lesson lesson) - { - String queryString = "from LearnerProgress l where l.user = ? and l.lesson ! = ?"; - return (LearnerProgress) ((getHibernateTemplate().find(queryString, new Object[]{learner, lesson})).get(0));//shoud only ever be one of these - } /** Index: lams_common/test/java/org/lamsfoundation/lams/lesson/LessonDataAccessTestCase.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/test/java/org/lamsfoundation/lams/lesson/Attic/LessonDataAccessTestCase.java,v diff -u -r1.13 -r1.14 --- lams_common/test/java/org/lamsfoundation/lams/lesson/LessonDataAccessTestCase.java 16 Feb 2005 22:46:02 -0000 1.13 +++ lams_common/test/java/org/lamsfoundation/lams/lesson/LessonDataAccessTestCase.java 17 Feb 2005 05:32:58 -0000 1.14 @@ -23,8 +23,10 @@ import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.dao.ILearningDesignDAO; import org.lamsfoundation.lams.learningdesign.dao.hibernate.LearningDesignDAO; +import org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO; import org.lamsfoundation.lams.lesson.dao.ILessonClassDAO; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; +import org.lamsfoundation.lams.lesson.dao.hibernate.LearnerProgressDAO; import org.lamsfoundation.lams.lesson.dao.hibernate.LessonClassDAO; import org.lamsfoundation.lams.lesson.dao.hibernate.LessonDAO; import org.lamsfoundation.lams.usermanagement.Organisation; @@ -53,7 +55,8 @@ protected ILearningDesignDAO learningDesignDao; protected IOrganisationDAO orgDao; protected ILessonDAO lessonDao; - protected ILessonClassDAO lessonClassDao; + protected ILessonClassDAO lessonClassDao; + protected ILearnerProgressDAO learnerProgressDao; //--------------------------------------------------------------------- // Domain Object instances @@ -63,6 +66,8 @@ protected LearningDesign testLearningDesign; protected Organisation testOrg; protected LessonClass testLessonClass; + protected LearnerProgress testLearnerProgress; + //--------------------------------------------------------------------- // Class level constants //--------------------------------------------------------------------- @@ -102,6 +107,7 @@ //get lesson related daos lessonDao = (LessonDAO)this.context.getBean("lessonDAO"); lessonClassDao = (LessonClassDAO)this.context.getBean("lessonClassDAO"); + learnerProgressDao = (LearnerProgressDAO)this.context.getBean("learnerProgressDAO"); } /** @@ -229,6 +235,18 @@ } + /** + * This init method is called when we need to learner progress testing. + * + */ + protected void initLearnerProgressData() + { + //pre-condition + if(testLesson == null) + throw new IllegalArgumentException("Can't initialize progress without " + + "lesson"); + testLearnerProgress = new LearnerProgress(testUser,testLesson); + } //--------------------------------------------------------------------- // Helper methods //--------------------------------------------------------------------- Index: lams_common/test/java/org/lamsfoundation/lams/lesson/dao/TestLearnerProgressDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/test/java/org/lamsfoundation/lams/lesson/dao/Attic/TestLearnerProgressDAO.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_common/test/java/org/lamsfoundation/lams/lesson/dao/TestLearnerProgressDAO.java 17 Feb 2005 05:32:58 -0000 1.1 @@ -0,0 +1,117 @@ +/* ******************************************************************************** + * Copyright Notice + * ================= + * This file contains propriety information of LAMS Foundation. + * Copying or reproduction with prior written permission is prohibited. + * Copyright (c) 2005 + * Created on 2005-2-17 + ******************************************************************************** */ + +package org.lamsfoundation.lams.lesson.dao; + +import net.sf.hibernate.HibernateException; + +import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.lesson.LessonDataAccessTestCase; + + +/** + * + * @author Jacky Fang 2005-2-17 + * + */ +public class TestLearnerProgressDAO extends LessonDataAccessTestCase +{ + + /* + * @see LessonDataAccessTestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + super.initializeTestLesson(); + super.initLearnerProgressData(); + } + + /* + * @see LessonDataAccessTestCase#tearDown() + */ + protected void tearDown() throws Exception + { + super.tearDown(); + super.cleanUpTestLesson(); + } + + /** + * Constructor for TestLearnerProgressDAO. + * @param testName + */ + public TestLearnerProgressDAO(String testName) + { + super(testName); + } + + public void testGetNullLearnerProgressByLearner() + { + LearnerProgress progress= learnerProgressDao.getLearnerProgressByLeaner(testUser,testLesson); + assertNull("should not get any progress data",progress); + } + + public void testSaveLearnerProgress() + { + super.learnerProgressDao.saveLearnerProgress(this.testLearnerProgress); + + LearnerProgress progress= learnerProgressDao.getLearnerProgressByLeaner(testUser,testLesson); + assertLearnerProgressInitialization(progress); + } + + public void testGetLearnerProgressByLeaner() + { + super.learnerProgressDao.saveLearnerProgress(this.testLearnerProgress); + LearnerProgress progress= learnerProgressDao.getLearnerProgressByLeaner(testUser,testLesson); + assertLearnerProgressInitialization(progress); + } + + public void testGetLearnerProgress() + { + super.learnerProgressDao.saveLearnerProgress(this.testLearnerProgress); + + LearnerProgress progress = learnerProgressDao.getLearnerProgress(testLearnerProgress.getLearnerProgressId()); + assertLearnerProgressInitialization(progress); + } + + + public void testDeleteLearnerProgress() throws HibernateException + { + super.learnerProgressDao.saveLearnerProgress(this.testLearnerProgress); + + LearnerProgress progress = learnerProgressDao.getLearnerProgress(testLearnerProgress.getLearnerProgressId()); + assertLearnerProgressInitialization(progress); + + super.learnerProgressDao.deleteLearnerProgress(testLearnerProgress); + super.getSession().flush(); + LearnerProgress nullProgress= learnerProgressDao.getLearnerProgressByLeaner(testUser,testLesson); + assertNull("should not get any progress data",nullProgress); + + } + + public void testUpdateLearnerProgress() + { + super.learnerProgressDao.saveLearnerProgress(this.testLearnerProgress); + LearnerProgress progress= learnerProgressDao.getLearnerProgressByLeaner(testUser,testLesson); + + + + + } + + /** + * @param progress + */ + private void assertLearnerProgressInitialization(LearnerProgress progress) + { + assertNotNull("There should be a learner progress",progress); + assertEquals("verify user",progress.getUser().getUserId(),testUser.getUserId()); + assertEquals("verify Lesson",progress.getLesson().getLessonId(),testLesson.getLessonId()); + } +} Index: lams_common/test/java/org/lamsfoundation/lams/lesson/dao/TestLessonDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/test/java/org/lamsfoundation/lams/lesson/dao/Attic/TestLessonDAO.java,v diff -u -r1.4 -r1.5 --- lams_common/test/java/org/lamsfoundation/lams/lesson/dao/TestLessonDAO.java 11 Feb 2005 01:24:23 -0000 1.4 +++ lams_common/test/java/org/lamsfoundation/lams/lesson/dao/TestLessonDAO.java 17 Feb 2005 05:32:58 -0000 1.5 @@ -18,7 +18,6 @@ /** * * @author Jacky Fang 2/02/2005 - * */ public class TestLessonDAO extends LessonDataAccessTestCase {