Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r7a6897909f33a09faec913848956d4012f477c7c -rb203dcbd67cb6321c9292fd0b17b539a04ddb523 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java =================================================================== diff -u -r9481bb9c6f8c0e4d6fbed6b230a41c77feda64c6 -rb203dcbd67cb6321c9292fd0b17b539a04ddb523 --- lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java (.../IToolSessionDAO.java) (revision 9481bb9c6f8c0e4d6fbed6b230a41c77feda64c6) +++ lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java (.../IToolSessionDAO.java) (revision b203dcbd67cb6321c9292fd0b17b539a04ddb523) @@ -76,4 +76,11 @@ public List getToolSessionByActivity(final Activity activity); public void updateToolSession(ToolSession toolSession); + + /** + * Get a count of all the possible users for an activity connected to a tool session, where + * it is a GroupedToolSession ie discriminator-value="1". Don't call on any other type of + * tool session. + */ + public Integer getCountUsersGrouped(final long toolSessionId); } Index: lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java =================================================================== diff -u -r9481bb9c6f8c0e4d6fbed6b230a41c77feda64c6 -rb203dcbd67cb6321c9292fd0b17b539a04ddb523 --- lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java (.../ToolSessionDAO.java) (revision 9481bb9c6f8c0e4d6fbed6b230a41c77feda64c6) +++ lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java (.../ToolSessionDAO.java) (revision b203dcbd67cb6321c9292fd0b17b539a04ddb523) @@ -25,14 +25,17 @@ import java.util.List; +import org.hibernate.HibernateException; import org.hibernate.Query; +import org.hibernate.Session; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.lesson.Lesson; 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.support.HibernateDaoSupport; /** @@ -53,7 +56,9 @@ "from ToolSession s where s.toolActivity = :activity"; protected static final String LOAD_TOOL_SESSION_BY_LESSON = "from ToolSession s where s.lesson = :lesson"; - + private final static String COUNT_GROUPED_LEARNERS_SQL = "select count(*) from lams_user_group ug, lams_tool_session s " + + " where ug.group_id = s.group_id and s.tool_session_id = :toolSessionId"; + /** * Retrieves the ToolSession * @param toolSessionId identifies the ToolSession to get @@ -136,6 +141,20 @@ getHibernateTemplate().update(toolSession); } + /** + * Get a count of all the possible users for an activity connected to a tool session, where + * it is a GroupedToolSession ie discriminator-value="1". Don't call on any other type of + * tool session. + */ + public Integer getCountUsersGrouped(final long toolSessionId) { + return (Integer) getHibernateTemplate().execute(new HibernateCallback() { + public Object doInHibernate(Session session) throws HibernateException { + Query query = session.createSQLQuery(ToolSessionDAO.COUNT_GROUPED_LEARNERS_SQL); + query.setLong("toolSessionId", toolSessionId); + Object value = query.uniqueResult(); + return new Integer(((Number) value).intValue()); + } + }); + } - } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java =================================================================== diff -u -rce7b5f945e6c184fbf157ed62ea06d5d34968079 -rb203dcbd67cb6321c9292fd0b17b539a04ddb523 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision ce7b5f945e6c184fbf157ed62ea06d5d34968079) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision b203dcbd67cb6321c9292fd0b17b539a04ddb523) @@ -101,8 +101,16 @@ Long getLeaderUserId(Long toolSessionId, Integer learnerId); /** + * Get all the potential users for an Activity - they may or may not have joined the lesson. + * Works for both grouped, non-grouped and whole class activities. * @param toolSessionId * @return */ - Set getUsersFromGroupingActivity(Long toolSessionId); + Set getUsersForActivity(Long toolSessionId); + + /** + * Get a count of all the users that would be returned by getUsersForActivity(Long toolSessionId); + */ + Integer getCountUsersForActivity(Long toolSessionId); + } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java =================================================================== diff -u -r8307552f72467a6f780c7dc4a2c5d700daccb10b -rb203dcbd67cb6321c9292fd0b17b539a04ddb523 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision 8307552f72467a6f780c7dc4a2c5d700daccb10b) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision b203dcbd67cb6321c9292fd0b17b539a04ddb523) @@ -33,6 +33,9 @@ import org.apache.log4j.Logger; import org.hibernate.Hibernate; +import org.hibernate.HibernateException; +import org.hibernate.Query; +import org.hibernate.Session; import org.hibernate.proxy.HibernateProxy; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.FloatingActivity; @@ -42,7 +45,9 @@ import org.lamsfoundation.lams.learningdesign.Transition; import org.lamsfoundation.lams.lesson.CompletedActivityProgress; import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.lesson.dao.hibernate.LessonDAO; import org.lamsfoundation.lams.lesson.service.ILessonService; +import org.lamsfoundation.lams.tool.GroupedToolSession; import org.lamsfoundation.lams.tool.IToolVO; import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.tool.ToolOutput; @@ -253,44 +258,21 @@ } @Override - public Set getUsersFromGroupingActivity(Long toolSessionId) { + public Set getUsersForActivity(Long toolSessionId) { ToolSession session = toolSessionDAO.getToolSession(toolSessionId); - ToolActivity activity = session.getToolActivity(); + return session != null ? session.getLearners() : new HashSet(); + } - Set users = new TreeSet(); - if (activity.getApplyGrouping()) { - Grouping grouping = activity.getGrouping(); + @Override + public Integer getCountUsersForActivity(Long toolSessionId) { - if (grouping != null) { - - // find group that corresponds to specified toolSessionId - for (Group group : (Set) grouping.getGroups()) { - - if (!grouping.isLearnerGroup(group)) { - continue; - } - - for (ToolSession sessionIter : (Set) group.getToolSessions()) { - if (sessionIter.getToolSessionId().equals(toolSessionId)) { - users.addAll(group.getUsers()); - log.warn("AAAAA groupId: " + group.getGroupId()); - break; - } - } - // if (grouping.isLearnerGroup(group) && group.hasLearner(learner)) { - // users.addAll(group.getUsers()); - // } - } - } - - // activity.getGroupFor(learner) - - // if there is no grouping specified just add all learners from the lesson + ToolSession session = toolSessionDAO.getToolSession(toolSessionId); + if ( session.getToolSessionTypeId() == ToolSession.GROUPED_TYPE ) { + return toolSessionDAO.getCountUsersGrouped(toolSessionId); } else { - users.addAll(session.getLesson().getLessonClass().getLearners()); + // expect it to be 0 or 1 + return session.getLearners().size(); } - - return users; } /**