Index: lams_tool_preview/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rb742c676d9a13249305d245d033774109bac5c65 -r189a459a13057ddecbfa3db9e36e2a2b29bef5db --- lams_tool_preview/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision b742c676d9a13249305d245d033774109bac5c65) +++ lams_tool_preview/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 189a459a13057ddecbfa3db9e36e2a2b29bef5db) @@ -99,4 +99,5 @@ label.cant.rate =This user can't be rated as it attracted the maximum number of rates already. label.refresh=Refresh warning.comment.blank=Comment text is missing. +creating.users.message =Please wait while the learners' details are set up ready for you to review their responses. #======= End labels: Exported 168 labels for en AU ===== Index: lams_tool_preview/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -rb742c676d9a13249305d245d033774109bac5c65 -r189a459a13057ddecbfa3db9e36e2a2b29bef5db --- lams_tool_preview/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision b742c676d9a13249305d245d033774109bac5c65) +++ lams_tool_preview/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 189a459a13057ddecbfa3db9e36e2a2b29bef5db) @@ -99,4 +99,6 @@ label.cant.rate =This user can't be rated as it attracted the maximum number of rates already. label.refresh=Refresh warning.comment.blank=Comment text is missing. +creating.users.message =Please wait while the learners' details are set up ready for you to review their responses. + #======= End labels: Exported 168 labels for en AU ===== Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/PeerreviewConstants.java =================================================================== diff -u -r0e69531f65529363399c5472a6c42bae1aa88408 -r189a459a13057ddecbfa3db9e36e2a2b29bef5db --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/PeerreviewConstants.java (.../PeerreviewConstants.java) (revision 0e69531f65529363399c5472a6c42bae1aa88408) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/PeerreviewConstants.java (.../PeerreviewConstants.java) (revision 189a459a13057ddecbfa3db9e36e2a2b29bef5db) @@ -110,6 +110,8 @@ public static final String ATTR_IS_GROUPED_ACTIVITY = "isGroupedActivity"; public static final String ATTR_IS_URL_ITEM_TYPE = "isUrlItemType"; + + public static final String ATTR_CREATING_USERS = "creatingUsers"; // error message keys Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/peerreviewApplicationContext.xml =================================================================== diff -u -r9f2c1f957570c3885c34d8d162a1f14d82e3aba2 -r189a459a13057ddecbfa3db9e36e2a2b29bef5db --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/peerreviewApplicationContext.xml (.../peerreviewApplicationContext.xml) (revision 9f2c1f957570c3885c34d8d162a1f14d82e3aba2) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/peerreviewApplicationContext.xml (.../peerreviewApplicationContext.xml) (revision 189a459a13057ddecbfa3db9e36e2a2b29bef5db) @@ -68,7 +68,12 @@ - + + + + + + @@ -81,7 +86,7 @@ PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java =================================================================== diff -u -rf99ba3decf8c8e2c60346de01726623939afcd99 -r189a459a13057ddecbfa3db9e36e2a2b29bef5db --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision f99ba3decf8c8e2c60346de01726623939afcd99) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision 189a459a13057ddecbfa3db9e36e2a2b29bef5db) @@ -194,14 +194,16 @@ /** * Trigger the user creation, based on the lesson/grouping class, if needed. This - * should be called by the web layer to trigger an update. Returns almost straight away - - * any updates are done in a separate thread. + * should be called by the web layer to trigger an update. Could take a while to run so + * should be called from a new thread in the Action classm rather than holding up the Action + * class. + * * Returns true if a check/update is triggered, returns false if a check is already underway. * @param toolSessionId * @return * @throws Throwable */ - boolean fetchUsersFromLesson(Long toolSessionId) throws Throwable; + boolean createUsersFromLesson(Long toolSessionId) throws Throwable; /** * Returns whether activity is grouped and therefore it is expected more than one tool session. Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -rf99ba3decf8c8e2c60346de01726623939afcd99 -r189a459a13057ddecbfa3db9e36e2a2b29bef5db --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision f99ba3decf8c8e2c60346de01726623939afcd99) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 189a459a13057ddecbfa3db9e36e2a2b29bef5db) @@ -311,70 +311,57 @@ } @Override - public boolean fetchUsersFromLesson(Long toolSessionId) throws Throwable { - //can we change lesson's class? - //boolean isGroupedActivity = isGroupedActivity(toolContentId); + 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); + if (!wasNotInSetAlready) { + log.debug("Peer Review: Already processing session " + toolSessionId); return false; } - log.debug("Peer Review: Processing session "+toolSessionId); - Thread t = new Thread(new UserCreateThread(toolSessionId)); - t.start(); + log.debug("Peer Review: Processing session " + toolSessionId); + long start = System.currentTimeMillis(); + ArrayList userIdsAdded = new ArrayList(); + + PeerreviewSession session = getPeerreviewSessionBySessionId(toolSessionId); + Set lessonUsers = toolService.getUsersFromGroupingActivity(toolSessionId); + List sessionUserIds = peerreviewUserDao.getUserIdsBySessionID(toolSessionId); + boolean needsUpdate = sessionUserIds.size() != lessonUsers.size(); + + if (needsUpdate) { + // create all new users + for (User lessonUser : lessonUsers) { + currentUser = lessonUser; + if (!sessionUserIds.contains(lessonUser.getUserId().longValue())) { + PeerreviewUser newUser = new PeerreviewUser(lessonUser.getUserDTO(), session); + createUser(newUser); + userIdsAdded.add(lessonUser.getUserId()); + } + } + } + + log.debug("Peer Review UserCreateThread " + toolSessionId + ": Update Took " + + (System.currentTimeMillis() - start) + "ms. Added " + userIdsAdded.size()); + creatingUsersForSessionIds.remove(toolSessionId); return true; } catch (Throwable e) { creatingUsersForSessionIds.remove(toolSessionId); String message = e.getMessage() != null ? e.getMessage() : e.getClass().getName(); - this.log.error("Exception thrown creating Peer Review users for session "+toolSessionId+": "+message,e); + log.error("Exception thrown creating Peer Review users for session " + toolSessionId + " user id: " + + (currentUser != null ? currentUser.getUserId().toString() : "null") + "; " + message, e); e.printStackTrace(); - throw(e); - } + throw (e); + } } // ***************************************************************************** // private methods // ***************************************************************************** - private class UserCreateThread implements Runnable { - private Long toolSessionId; - private Logger log = Logger.getLogger(UserCreateThread.class); - - public UserCreateThread(Long toolSessionId) { - this.toolSessionId = toolSessionId; - } - - public void run() { - long start = System.currentTimeMillis(); - try { - PeerreviewSession session = getPeerreviewSessionBySessionId(toolSessionId); - Set lessonUsers = toolService.getUsersFromGroupingActivity(toolSessionId); - List sessionUserIds = peerreviewUserDao.getUserIdsBySessionID(toolSessionId); - boolean needsUpdate = sessionUserIds.size() <= lessonUsers.size(); - - if ( needsUpdate ) { - //create all new users - for (User lessonUser: lessonUsers) { - if (!sessionUserIds.contains(lessonUser.getUserId().longValue())) { - PeerreviewUser newUser = new PeerreviewUser(lessonUser.getUserDTO(), session); - createUser(newUser); - } - } - } - this.log.debug("UserCreateThread "+toolSessionId+": Update Took "+ (System.currentTimeMillis()-start) +"ms."); - } catch (Throwable e) { - String message = e.getMessage() != null ? e.getMessage() : e.getClass().getName(); - this.log.error("Exception thrown creating Peer Review users for session "+toolSessionId+": "+message,e); - e.printStackTrace(); - } finally { - creatingUsersForSessionIds.remove(toolSessionId); - } - } - } // end Thread class - private Peerreview getDefaultPeerreview() throws PeerreviewApplicationException { Long defaultPeerreviewId = getToolDefaultContentIdBySignature(PeerreviewConstants.TOOL_SIGNATURE); Peerreview defaultPeerreview = getPeerreviewByContentId(defaultPeerreviewId); @@ -566,7 +553,6 @@ peerreviewDao.removeObject(NotebookEntry.class, entry.getUid()); } - peerreviewUserDao.removeObject(PeerreviewUser.class, user.getUid()); } } } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/LearningAction.java =================================================================== diff -u -rf99ba3decf8c8e2c60346de01726623939afcd99 -r189a459a13057ddecbfa3db9e36e2a2b29bef5db --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/LearningAction.java (.../LearningAction.java) (revision f99ba3decf8c8e2c60346de01726623939afcd99) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/LearningAction.java (.../LearningAction.java) (revision 189a459a13057ddecbfa3db9e36e2a2b29bef5db) @@ -58,7 +58,6 @@ import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; -import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewSession; import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewUser; import org.lamsfoundation.lams.tool.peerreview.service.IPeerreviewService; import org.lamsfoundation.lams.tool.peerreview.service.PeerreviewApplicationException; @@ -134,7 +133,11 @@ request.setAttribute(AttributeNames.ATTR_MODE, mode); request.setAttribute(PeerreviewConstants.PARAM_TOOL_SESSION_ID, sessionId); - // create user if needed + // If user already exists go straight to the normal screen, otherwise go to a refresh screen + // until the user is created. The user will be created by the UserCreateThread(), which should + // always be run as even if this user exists, others may have been added to the lesson/group + // and need to be included for this user. If it is an update, the user won't see them this time + // but they will if they choose to refresh the activity. PeerreviewUser user = null; if (mode != null && mode.isTeacher()) { // monitoring mode - user is specified in URL @@ -144,8 +147,59 @@ } else { user = getCurrentUser(service, sessionId); } - Long userId = user.getUserId(); + + try { + Thread t = new Thread(new UserCreateThread(sessionId, service)); + t.start(); + } catch ( Throwable e ) { + throw new IOException(e); + } + if (user == null) { + // goto refresh screen TODO create a specialised page + request.setAttribute(PeerreviewConstants.ATTR_CREATING_USERS,"true"); + return mapping.findForward("defineLater"); + } else { + // goto standard screen + return startRating(mapping, form, request, response, service, sessionMap, sessionId, user, mode); + } + + } + + private class UserCreateThread implements Runnable { + private Long toolSessionId; + private IPeerreviewService service; + + private Logger log = Logger.getLogger(UserCreateThread.class); + + public UserCreateThread(Long toolSessionId, IPeerreviewService service) { + this.toolSessionId = toolSessionId; + this.service = service; + } + + public void run() { + try { + service.createUsersFromLesson(toolSessionId); + } catch (Throwable e) { + String message = e.getMessage() != null ? e.getMessage() : e.getClass().getName(); + this.log.error("Exception thrown creating Peer Review users for session "+toolSessionId+": "+message,e); + e.printStackTrace(); + } + } + } // end Thread class + + /** + * Read peerreview data from database and put them into HttpSession. It will redirect to init.do directly after this + * method run successfully. + * + * This method will avoid read database again and lost un-saved resouce item lost when user "refresh page", + * @throws IOException + * + */ + private ActionForward startRating(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response, IPeerreviewService service, SessionMap sessionMap, Long sessionId, + PeerreviewUser user, ToolAccessMode mode) throws IOException { + Peerreview peerreview = service.getPeerreviewBySessionId(sessionId); // get notebook entry @@ -175,11 +229,6 @@ return mapping.findForward("defineLater"); } - try { - service.fetchUsersFromLesson(sessionId); - } catch ( Throwable e ) { - throw new IOException(e); - } // handle rating criterias boolean isCommentsEnabled = service.isCommentsEnabled(peerreview.getContentId()); @@ -189,7 +238,7 @@ sessionMap.put("commentsMinWordsLimit", commentsMinWordsLimit); // store how many items are rated - int countRatedUsers = service.getCountItemsRatedByUser(peerreview.getContentId(), userId.intValue()); + int countRatedUsers = service.getCountItemsRatedByUser(peerreview.getContentId(), user.getUserId().intValue()); sessionMap.put(AttributeNames.ATTR_COUNT_RATED_ITEMS, countRatedUsers); // set contentInUse flag to true! @@ -543,14 +592,7 @@ HttpSession ss = SessionManager.getSession(); // get back login user DTO UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); - PeerreviewUser peerreviewUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()), sessionId); - - if (peerreviewUser == null) { - PeerreviewSession session = service.getPeerreviewSessionBySessionId(sessionId); - peerreviewUser = new PeerreviewUser(user, session); - service.createUser(peerreviewUser); - } - return peerreviewUser; + return service.getUserByIDAndSession(new Long(user.getUserID().intValue()), sessionId); } private PeerreviewUser getSpecifiedUser(IPeerreviewService service, Long sessionId, Integer userId) { Index: lams_tool_preview/web/pages/learning/definelater.jsp =================================================================== diff -u -r9f2c1f957570c3885c34d8d162a1f14d82e3aba2 -r189a459a13057ddecbfa3db9e36e2a2b29bef5db --- lams_tool_preview/web/pages/learning/definelater.jsp (.../definelater.jsp) (revision 9f2c1f957570c3885c34d8d162a1f14d82e3aba2) +++ lams_tool_preview/web/pages/learning/definelater.jsp (.../definelater.jsp) (revision 189a459a13057ddecbfa3db9e36e2a2b29bef5db) @@ -6,15 +6,21 @@ <%@ include file="/common/header.jsp"%> - + + + +

- + + + +