Index: lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java =================================================================== diff -u -r7def51eecc3d871673b614e8cb9a1ffc87a98881 -r3073bb429f564d220e514b1f0526d93108b2266b --- lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java (.../IToolSessionDAO.java) (revision 7def51eecc3d871673b614e8cb9a1ffc87a98881) +++ lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java (.../IToolSessionDAO.java) (revision 3073bb429f564d220e514b1f0526d93108b2266b) @@ -7,7 +7,6 @@ package org.lamsfoundation.lams.tool.dao; import org.lamsfoundation.lams.learningdesign.Activity; -import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.usermanagement.User; @@ -29,9 +28,14 @@ public void removeToolSession(ToolSession toolSession); + /** + * Get the tool session by learner and activity. Will attempted to get an appropriate grouped + * tool session (the most common case as this covers a normal group or a whole of class group) + * and then attempts to get a non-grouped base tool session. The non-grouped tool session + * is meant to be unique against the user and activity. + * @returns toolSession may be of subclass NonGroupedToolSession or GroupedToolSession + */ public ToolSession getToolSessionByLearner(final User learner,final Activity activity); - public ToolSession getToolSessionByGroup(final Group group, final Activity activity); - public void updateToolSession(ToolSession toolSession); } Index: lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java =================================================================== diff -u -r42ddbd4c509c956cc9f5328cea8d45d6e593e796 -r3073bb429f564d220e514b1f0526d93108b2266b --- lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java (.../ToolSessionDAO.java) (revision 42ddbd4c509c956cc9f5328cea8d45d6e593e796) +++ lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java (.../ToolSessionDAO.java) (revision 3073bb429f564d220e514b1f0526d93108b2266b) @@ -6,15 +6,14 @@ package org.lamsfoundation.lams.tool.dao.hibernate; -import org.hibernate.HibernateException; -import org.hibernate.Session; +import org.hibernate.Query; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.Group; +import org.lamsfoundation.lams.tool.GroupedToolSession; +import org.lamsfoundation.lams.tool.NonGroupedToolSession; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.dao.IToolSessionDAO; import org.lamsfoundation.lams.usermanagement.User; -import org.springframework.orm.hibernate3.HibernateCallback; -import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** @@ -26,62 +25,48 @@ protected static final String LOAD_NONGROUPED_TOOL_SESSION_BY_LEARNER = "from NonGroupedToolSession s where s.user = :learner and s.toolActivity = :activity"; - protected static final String LOAD_NONGROUPED_TOOL_SESSION_BY_GROUP = - "from GroupedToolSession s where s.group = :group and s.toolActivity = :activity"; + protected static final String LOAD_GROUPED_TOOL_SESSION_BY_GROUP = + "from GroupedToolSession s where s.sessionGroup = :inputgroup and s.toolActivity = :activity"; + protected static final String LOAD_GROUPED_TOOL_SESSION_BY_GROUP2 = + "select s from GroupedToolSession as s inner join s.sessionGroup as sg inner join sg.users as u " + +" where :learner = u and s.toolActivity = :activity"; + /** * Retrieves the ToolSession * @param toolSessionId identifies the ToolSession to get * @return the ToolSession */ public ToolSession getToolSession(Long toolSessionId) { - return (ToolSession)getHibernateTemplate().get(ToolSession.class, toolSessionId); + ToolSession session = (ToolSession) getHibernateTemplate().get(ToolSession.class, toolSessionId); + return session; } /** - * Get the tool session by learner and activity. Non-grouped base tool session - * meant to be unique against the user and activity. + * Get the tool session by learner and activity. Will attempted to get an appropriate grouped + * tool session (the most common case as this covers a normal group or a whole of class group) + * and then attempts to get a non-grouped base tool session. The non-grouped tool session + * is meant to be unique against the user and activity. * @see org.lamsfoundation.lams.tool.dao.IToolSessionDAO#getToolSessionByLearner(org.lamsfoundation.lams.usermanagement.User, org.lamsfoundation.lams.learningdesign.Activity) + * @returns toolSession may be of subclass NonGroupedToolSession or GroupedToolSession */ public ToolSession getToolSessionByLearner(final User learner,final Activity activity) { - HibernateTemplate hibernateTemplate = new HibernateTemplate(this.getSessionFactory()); + Query query = this.getSession().createQuery(LOAD_GROUPED_TOOL_SESSION_BY_GROUP2); + query.setParameter("learner",learner); + query.setParameter("activity",activity); + GroupedToolSession groupedToolSession = (GroupedToolSession) query.uniqueResult(); + if ( groupedToolSession != null ) + return groupedToolSession; - return (ToolSession)hibernateTemplate.execute( - new HibernateCallback() - { - public Object doInHibernate(Session session) throws HibernateException - { - return session.createQuery(LOAD_NONGROUPED_TOOL_SESSION_BY_LEARNER) - .setEntity("learner",learner) - .setEntity("activity",activity) - .uniqueResult(); - } - } - ); + query = this.getSession().createQuery(LOAD_NONGROUPED_TOOL_SESSION_BY_LEARNER); + query.setParameter("learner",learner); + query.setParameter("activity",activity); + NonGroupedToolSession nonGroupedSession = (NonGroupedToolSession) query.uniqueResult(); + return nonGroupedSession; + } - /** - * @see org.lamsfoundation.lams.tool.dao.IToolSessionDAO#getToolSessionByGroup(org.lamsfoundation.lams.learningdesign.Group, org.lamsfoundation.lams.learningdesign.Activity) - */ - public ToolSession getToolSessionByGroup(final Group group, final Activity activity) - { - HibernateTemplate hibernateTemplate = new HibernateTemplate(this.getSessionFactory()); - - return (ToolSession)hibernateTemplate.execute( - new HibernateCallback() - { - public Object doInHibernate(Session session) throws HibernateException - { - return session.createQuery(LOAD_NONGROUPED_TOOL_SESSION_BY_GROUP) - .setEntity("group",group) - .setEntity("activity",activity) - .uniqueResult(); - } - } - ); - } - public void saveToolSession(ToolSession toolSession) { getHibernateTemplate().save(toolSession); Index: lams_common/test/java/org/lamsfoundation/lams/tool/dao/TestToolSessionDAO.java =================================================================== diff -u -r7def51eecc3d871673b614e8cb9a1ffc87a98881 -r3073bb429f564d220e514b1f0526d93108b2266b --- lams_common/test/java/org/lamsfoundation/lams/tool/dao/TestToolSessionDAO.java (.../TestToolSessionDAO.java) (revision 7def51eecc3d871673b614e8cb9a1ffc87a98881) +++ lams_common/test/java/org/lamsfoundation/lams/tool/dao/TestToolSessionDAO.java (.../TestToolSessionDAO.java) (revision 3073bb429f564d220e514b1f0526d93108b2266b) @@ -70,15 +70,27 @@ ToolSession toolSession = toolSessionDao.getToolSessionByLearner(testUser,testNonGroupedActivity); assertNotNull(toolSession); + assertEquals("verify tool session state",ToolSession.STARTED_STATE,toolSession.getToolSessionStateId()); + assertEquals("verify tool session type",ToolSession.NON_GROUPED_TYPE,toolSession.getToolSessionTypeId()); } public void testGetToolSessionByGroup() { - ToolSession toolSession = toolSessionDao.getToolSessionByGroup(testGroup,testGroupedActivity); + ToolSession toolSession = toolSessionDao.getToolSessionByLearner(testUser,testGroupedActivity); + assertNotNull(toolSession); + assertEquals("verify tool session state",ToolSession.STARTED_STATE,toolSession.getToolSessionStateId()); + assertEquals("verify tool session type",ToolSession.GROUPED_TYPE,toolSession.getToolSessionTypeId()); } +/* public void testGetToolSessionByClassGroup() + { + ToolSession toolSession = toolSessionDao.getToolSessionByClassGroup(testGroup,testGroupedActivity); + + assertNotNull(toolSession); + } */ + public void testSaveNonGroupedToolSession() { ToolSession testToolSession=initNGToolSession(); @@ -87,12 +99,12 @@ public void testUpdateToolSession() { - ToolSession toolSession = toolSessionDao.getToolSessionByGroup(testGroup,testGroupedActivity); + ToolSession toolSession = toolSessionDao.getToolSessionByLearner(testUser,testGroupedActivity); assertEquals("verify original state",ToolSession.STARTED_STATE,toolSession.getToolSessionStateId()); toolSession.setToolSessionStateId(ToolSession.ENDED_STATE); toolSessionDao.updateToolSession(toolSession); - ToolSession updatedToolSession = toolSessionDao.getToolSessionByGroup(testGroup,testGroupedActivity); + ToolSession updatedToolSession = toolSessionDao.getToolSessionByLearner(testUser,testGroupedActivity); assertEquals("verify new state",ToolSession.ENDED_STATE,updatedToolSession.getToolSessionStateId());