Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/PeerreviewUserDAO.java =================================================================== diff -u -ra93929c9c7f7f0df676412691f2f8f9d44d201a2 -re3bf3105586151a6f0c6b490a1542a4d5cbbed8f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/PeerreviewUserDAO.java (.../PeerreviewUserDAO.java) (revision a93929c9c7f7f0df676412691f2f8f9d44d201a2) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/PeerreviewUserDAO.java (.../PeerreviewUserDAO.java) (revision e3bf3105586151a6f0c6b490a1542a4d5cbbed8f) @@ -25,6 +25,7 @@ import java.util.List; +import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewSession; import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewUser; public interface PeerreviewUserDAO extends DAO { @@ -43,4 +44,8 @@ List getUsersForTablesorter(final Long toolSessionId, final Long excludeUserId, int page, int size, int sorting); + + int getCountUsersBySession(Long toolSessionId); + + int createUsersForSession(PeerreviewSession session); } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java =================================================================== diff -u -r9fc998daa072351bbb64ed9d16a1c571c8136b64 -re3bf3105586151a6f0c6b490a1542a4d5cbbed8f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java (.../PeerreviewUserDAOHibernate.java) (revision 9fc998daa072351bbb64ed9d16a1c571c8136b64) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java (.../PeerreviewUserDAOHibernate.java) (revision e3bf3105586151a6f0c6b490a1542a4d5cbbed8f) @@ -25,9 +25,11 @@ import java.util.List; +import org.hibernate.SQLQuery; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; import org.lamsfoundation.lams.tool.peerreview.dao.PeerreviewUserDAO; +import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewSession; import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewUser; public class PeerreviewUserDAOHibernate extends LAMSBaseDAO implements PeerreviewUserDAO { @@ -44,9 +46,13 @@ private static final String FIND_BY_CONTENT_ID = "FROM " + PeerreviewUser.class.getName() + " AS u WHERE u.session.peerreview.contentId=?"; - private static final String GET_COUNT_USERS_FOR_SESSION = "SELECT COUNT(*) FROM " + PeerreviewUser.class.getName() + private static final String GET_COUNT_USERS_FOR_SESSION_EXCLUDE_USER = "SELECT COUNT(*) FROM " + PeerreviewUser.class.getName() + " AS r WHERE r.session.sessionId=? AND r.userId!=?"; + private static final String GET_COUNT_USERS_FOR_SESSION = "SELECT COUNT(*) FROM " + PeerreviewUser.class.getName() + + " AS r WHERE r.session.sessionId=?"; + + private static final String LOAD_USERS_FOR_SESSION_LIMIT = "FROM user in class PeerreviewUser " + "WHERE user.session.sessionId=:toolSessionId AND user.userId!=:excludeUserId order by "; @@ -84,7 +90,7 @@ @Override public int getCountUsersBySession(final Long toolSessionId, final Long excludeUserId) { - List list = find(GET_COUNT_USERS_FOR_SESSION, + List list = find(GET_COUNT_USERS_FOR_SESSION_EXCLUDE_USER, new Object[] { toolSessionId, excludeUserId }); if (list == null || list.size() == 0) { return 0; @@ -93,6 +99,17 @@ } @Override + public int getCountUsersBySession(final Long toolSessionId) { + + List list = find(GET_COUNT_USERS_FOR_SESSION, + new Object[] { toolSessionId }); + if (list == null || list.size() == 0) { + return 0; + } + return ((Number) list.get(0)).intValue(); + } + + @Override public List getUsersForTablesorter(final Long toolSessionId, final Long excludeUserId, int page, int size, int sorting) { String sortingOrder = ""; @@ -114,4 +131,26 @@ .list(); } + private static final String CREATE_USERS = "INSERT into tl_laprev11_user (user_id, login_name, first_name, last_name, session_finished, session_uid) " + + " SELECT user.user_id, user.login, user.first_name, user.last_name, 0, :session_uid " + + " FROM lams_user user " + + " JOIN lams_user_group ug ON ug.user_id = user.user_id " + + " JOIN lams_group grp ON grp.group_id = ug.group_id " + + " JOIN lams_tool_session session ON session.group_id = grp.group_id " + + " WHERE session.tool_session_id = :tool_session_id " + + " AND NOT EXISTS " + + " ( " + + " SELECT pu.user_id " + + " FROM tl_laprev11_user pu " + + " WHERE pu.session_uid = :session_uid AND pu.user_id = user.user_id " + + " )"; + + @Override + public int createUsersForSession(final PeerreviewSession session) { + + SQLQuery query = getSession().createSQLQuery(CREATE_USERS); + query.setLong("session_uid", session.getUid()) + .setLong("tool_session_id", session.getSessionId()); + return query.executeUpdate(); + } } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -r8be2bc782a2c7066c8c33f5605962584df7a2f9b -re3bf3105586151a6f0c6b490a1542a4d5cbbed8f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 8be2bc782a2c7066c8c33f5605962584df7a2f9b) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision e3bf3105586151a6f0c6b490a1542a4d5cbbed8f) @@ -309,44 +309,27 @@ @Override public boolean createUsersFromLesson(Long toolSessionId) throws Throwable { - // can we change lesson's class? - // boolean isGroupedActivity = isGroupedActivity(toolContentId); User currentUser = null; try { boolean wasNotInSetAlready = creatingUsersForSessionIds.add(toolSessionId); if (!wasNotInSetAlready) { - // log.debug("Peer Review: Already processing session " + toolSessionId); return false; } - // log.debug("Peer Review: Processing session " + toolSessionId); - long start = System.currentTimeMillis(); - int usersAdded = 0; +// long start = System.currentTimeMillis(); PeerreviewSession session = getPeerreviewSessionBySessionId(toolSessionId); - Integer numberPotentialLearners = toolService.getCountUsersForActivity(toolSessionId); - // log.debug("Peer Review UserCreateThread " + toolSessionId + ": getCountUsersForActivity took: " - // + (System.currentTimeMillis() - start) + "ms. numLearners "+numberPotentialLearners); - List sessionUserIds = peerreviewUserDao.getUserIdsBySessionID(toolSessionId); - // log.debug("Peer Review UserCreateThread " + toolSessionId + ": getUserIdsBySessionID took: " - // + (System.currentTimeMillis() - start) + "ms."); - boolean needsUpdate = sessionUserIds.size() != numberPotentialLearners.intValue(); - - if (needsUpdate) { - Set lessonUsers = toolService.getToolSession(toolSessionId).getLearners(); - // create all new users - for (User lessonUser : lessonUsers) { - currentUser = lessonUser; - if (!sessionUserIds.contains(lessonUser.getUserId().longValue())) { - createUser(new PeerreviewUser(lessonUser, session)); - usersAdded++; - } - } + int numberPotentialLearners = toolService.getCountUsersForActivity(toolSessionId); + int numberActualLearners = peerreviewUserDao.getCountUsersBySession(toolSessionId); + int numUsersCreated = 0; + if ( numberActualLearners != numberPotentialLearners ) { + numUsersCreated = peerreviewUserDao.createUsersForSession(session); } + +// log.debug("Peer Review UserCreateThread " + toolSessionId + ": numUsersCreated "+numUsersCreated+" took: " +// + (System.currentTimeMillis() - start) + "ms."); - // log.debug("Peer Review UserCreateThread " + toolSessionId + ": Update needsUpdate "+needsUpdate+" took: " - // + (System.currentTimeMillis() - start) + "ms. Added " + usersAdded); creatingUsersForSessionIds.remove(toolSessionId); return true; } catch (Throwable e) {