Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java =================================================================== diff -u -rc7569597546126af159f169353e68e91241b7f10 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision c7569597546126af159f169353e68e91241b7f10) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -26,7 +26,7 @@ public class ScratchieConstants { public static final String TOOL_SIGNATURE = "lascrt11"; - public static final String RESOURCE_SERVICE = "scratchieService"; + public static final String SCRATCHIE_SERVICE = "scratchieService"; public static final String TOOL_CONTENT_HANDLER_NAME = "scratchieToolContentHandler"; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieAnswerVisitDAO.java =================================================================== diff -u -rcc5ac6445941cdeeb5fd2440621630496e9f81e1 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieAnswerVisitDAO.java (.../ScratchieAnswerVisitDAO.java) (revision cc5ac6445941cdeeb5fd2440621630496e9f81e1) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieAnswerVisitDAO.java (.../ScratchieAnswerVisitDAO.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -34,8 +34,6 @@ int getLogCountTotal(Long sessionId, Long userId); - int getLogCountPerItem(Long toolSessionId, Long userId, Long itemUid); - List getLogsByScratchieUserAndItem(Long userUid, Long itemUid); List getLogsByScratchieUser(Long userUid); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieAnswerVisitDAOHibernate.java =================================================================== diff -u -rcc5ac6445941cdeeb5fd2440621630496e9f81e1 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieAnswerVisitDAOHibernate.java (.../ScratchieAnswerVisitDAOHibernate.java) (revision cc5ac6445941cdeeb5fd2440621630496e9f81e1) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieAnswerVisitDAOHibernate.java (.../ScratchieAnswerVisitDAOHibernate.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -46,9 +46,6 @@ private static final String FIND_VIEW_COUNT_BY_USER = "select count(*) from " + ScratchieAnswerVisitLog.class.getName() + " as r where r.sessionId=? and r.user.userId =?"; - private static final String FIND_VIEW_COUNT_BY_USER_AND_ITEM = "select count(*) from " - + ScratchieAnswerVisitLog.class.getName() + " as l where l.sessionId=? and l.user.userId =? and l.scratchieAnswer.scratchieItem.uid=?"; - @Override public ScratchieAnswerVisitLog getLog(Long answerUid, Long userId) { List list = getHibernateTemplate().find(FIND_BY_ANSWER_AND_USER, new Object[] { userId, answerUid }); @@ -66,14 +63,6 @@ } @Override - public int getLogCountPerItem(Long toolSessionId, Long userId, Long itemUid) { - List list = getHibernateTemplate().find(FIND_VIEW_COUNT_BY_USER_AND_ITEM, new Object[] { toolSessionId, userId, itemUid }); - if (list == null || list.size() == 0) - return 0; - return ((Number) list.get(0)).intValue(); - } - - @Override public List getLogsByScratchieUserAndItem(Long userUid, Long itemUid) { return getHibernateTemplate().find(FIND_BY_USER_AND_ITEM, new Object[] { userUid, itemUid }); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -rced85c0d8b00a9c225ba5eabd8dd1cf3e01e0fa3 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision ced85c0d8b00a9c225ba5eabd8dd1cf3e01e0fa3) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -63,7 +63,7 @@ * @param toolSessionId * @return */ - boolean isUserGroupLeader(ScratchieUser user, Long toolSessionId); + boolean isUserGroupLeader(ScratchieUser user, ScratchieSession session); /** * Set specified user as a leader. Also the previous leader (if any) is marked as non-leader. @@ -128,11 +128,11 @@ /** * Get user by sessionID and UserID * - * @param long1 + * @param userId * @param sessionId * @return */ - ScratchieUser getUserByIDAndSession(Long long1, Long sessionId); + ScratchieUser getUserByIDAndSession(Long userId, Long sessionId); /** * Get users by given toolSessionId. @@ -222,7 +222,7 @@ */ void setAnswerAccess(Long scratchieItemUid, Long sessionId); - int getUserMark(Long sessionId, Long userId); + int getUserMark(ScratchieSession session, Long userUid); /** * Mark all users in agroup as ScratchingFinished so that users can't continue scratching after this. @@ -301,7 +301,7 @@ * @param contentId * @return */ - List getReflectionList(Long contentId); + List getReflectionList(Set users); /** * Get user by UID @@ -334,10 +334,10 @@ * Populates items with results, i.e. correctAnswer, userMark, userAttempts. Used for displaying this data on learner results page. * * @param sessionId - * @param userId + * @param userUid * @return */ - Set populateItemsResults(Long sessionId, Long userId); + Set populateItemsResults(Long sessionId, Long userUid); /** * Return all learners in activity Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java =================================================================== diff -u -red23aef88626fa70acd34abbd3d044bec1b4a998 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java (.../ScratchieOutputFactory.java) (revision ed23aef88626fa70acd34abbd3d044bec1b4a998) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java (.../ScratchieOutputFactory.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -32,6 +32,8 @@ import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.scratchie.ScratchieConstants; +import org.lamsfoundation.lams.tool.scratchie.model.ScratchieSession; +import org.lamsfoundation.lams.tool.scratchie.model.ScratchieUser; public class ScratchieOutputFactory extends OutputFactory { @@ -82,7 +84,9 @@ */ private ToolOutput getUserMark(IScratchieService scratchieService, Long toolSessionId, Long learnerId) { - int userMark = scratchieService.getUserMark(toolSessionId, learnerId); + ScratchieSession session = scratchieService.getScratchieSessionBySessionId(toolSessionId); + ScratchieUser user = scratchieService.getUserByIDAndSession(learnerId, toolSessionId); + int userMark = scratchieService.getUserMark(session, user.getUid()); return new ToolOutput(ScratchieConstants.LEARNER_MARK, getI18NText( ScratchieConstants.LEARNER_MARK, true), userMark); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -rcc5ac6445941cdeeb5fd2440621630496e9f81e1 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision cc5ac6445941cdeeb5fd2440621630496e9f81e1) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -282,11 +282,9 @@ } @Override - public boolean isUserGroupLeader(ScratchieUser user, Long toolSessionId) { + public boolean isUserGroupLeader(ScratchieUser user, ScratchieSession session) { - ScratchieSession session = this.getScratchieSessionBySessionId(toolSessionId); ScratchieUser groupLeader = session.getGroupLeader(); - boolean isUserLeader = (groupLeader != null) && user.getUid().equals(groupLeader.getUid()); return isUserLeader; } @@ -573,7 +571,7 @@ user.setTotalAttempts(totalAttempts); // for displaying purposes if there is no attemps we assign -1 which will be shown as "-" - int mark = (totalAttempts == 0) ? -1 : getUserMark(sessionId, user.getUserId()); + int mark = (totalAttempts == 0) ? -1 : getUserMark(session, user.getUid()); user.setMark(mark); } @@ -613,12 +611,7 @@ @Override public Set getItemsWithIndicatedScratches(Long toolSessionId, ScratchieUser user) { - List logs = scratchieAnswerVisitDao.getLogsByScratchieUser(user.getUid()); - // answerUid -> ScratchieAnswerVisitLog map, created to reduce number of queries to DB - HashMap answerUidToLogMap = new HashMap(); - for (ScratchieAnswerVisitLog log : logs) { - answerUidToLogMap.put(log.getScratchieAnswer().getUid(), log); - } + List userLogs = scratchieAnswerVisitDao.getLogsByScratchieUser(user.getUid()); Scratchie scratchie = this.getScratchieBySessionId(toolSessionId); Set items = new TreeSet(new ScratchieItemComparator()); @@ -627,15 +620,23 @@ for (ScratchieItem item : items) { for (ScratchieAnswer answer : (Set) item.getAnswers()) { - ScratchieAnswerVisitLog log = answerUidToLogMap.get(answer.getUid()); + + //find according log if it exists + ScratchieAnswerVisitLog log = null; + for (ScratchieAnswerVisitLog userLog : userLogs) { + if (userLog.getScratchieAnswer().getUid().equals(answer.getUid())) { + log = userLog; + break; + } + } if (log == null) { answer.setScratched(false); } else { answer.setScratched(true); } } - boolean isItemUnraveled = isItemUnraveled(item, user.getUserId(), answerUidToLogMap); + boolean isItemUnraveled = isItemUnraveled(item, userLogs); item.setUnraveled(isItemUnraveled); } @@ -647,21 +648,22 @@ * * @param item * specified item - * @param userId - * userId - * @param answerUidToLogMap - * if this parameter is provided - uses logs from it, otherwise queries DB. (The main reason to have this - * parameter is to reduce number of queries to DB) + * @param userLogs + * uses logs from it (The main reason to have this parameter is to reduce number of queries to DB) * @return */ - private boolean isItemUnraveled(ScratchieItem item, Long userId, HashMap answerUidToLogMap) { + private boolean isItemUnraveled(ScratchieItem item, List userLogs) { boolean isItemUnraveled = false; for (ScratchieAnswer answer : (Set) item.getAnswers()) { - //if answerUidToLogMap is provided then uses logs from it, otherwise queries DB - ScratchieAnswerVisitLog log = (answerUidToLogMap != null) ? answerUidToLogMap.get(answer.getUid()) - : scratchieAnswerVisitDao.getLog(answer.getUid(), userId); + ScratchieAnswerVisitLog log = null; + for (ScratchieAnswerVisitLog userLog : userLogs) { + if (userLog.getScratchieAnswer().getUid().equals(answer.getUid())) { + log = userLog; + break; + } + } if (log != null) { isItemUnraveled |= answer.isCorrect(); @@ -672,14 +674,17 @@ } @Override - public int getUserMark(Long sessionId, Long userId) { - ScratchieSession session = scratchieSessionDao.getSessionBySessionId(sessionId); + public int getUserMark(ScratchieSession session, Long userUid) { + + //created to reduce number of queries to DB + List userLogs = scratchieAnswerVisitDao.getLogsByScratchieUser(userUid); + Scratchie scratchie = session.getScratchie(); Set items = scratchie.getScratchieItems(); int mark = 0; for (ScratchieItem item : items) { - mark += getUserMarkPerItem(scratchie, item, sessionId, userId); + mark += getUserMarkPerItem(scratchie, item, userLogs); } return mark; @@ -688,40 +693,56 @@ /** * * - * @param sessionId - * @param userId + * @param scratchie * @param item + * @param userLogs + * if this parameter is provided - uses logs from it, otherwise queries DB. (The main reason to have this + * parameter is to reduce number of queries to DB) * @return */ - private int getUserMarkPerItem(Scratchie scratchie, ScratchieItem item, Long sessionId, Long userId) { + private int getUserMarkPerItem(Scratchie scratchie, ScratchieItem item, List userLogs) { int mark = 0; // add mark only if an item was unraveled - if (isItemUnraveled(item, userId, null)) { - int attempts = scratchieAnswerVisitDao.getLogCountPerItem(sessionId, userId, item.getUid()); - mark += item.getAnswers().size() - attempts; + if (isItemUnraveled(item, userLogs)) { + + int itemAttempts = calculateItemAttempts(userLogs, item); + mark += item.getAnswers().size() - itemAttempts; // add extra point if needed - if (scratchie.isExtraPoint() && (attempts == 1)) { + if (scratchie.isExtraPoint() && (itemAttempts == 1)) { mark++; } } return mark; } + + private int calculateItemAttempts(List userLogs, ScratchieItem item) { + + int itemAttempts = 0; + for (ScratchieAnswerVisitLog userLog : userLogs) { + if (userLog.getScratchieAnswer().getScratchieItem().getUid().equals(item.getUid())) { + itemAttempts++; + } + } + + return itemAttempts; + } @Override - public Set populateItemsResults(Long sessionId, Long userId) { + public Set populateItemsResults(Long sessionId, Long userUid) { ScratchieSession session = scratchieSessionDao.getSessionBySessionId(sessionId); Scratchie scratchie = session.getScratchie(); Set items = scratchie.getScratchieItems(); + List userLogs = scratchieAnswerVisitDao.getLogsByScratchieUser(userUid); for (ScratchieItem item : items) { - int mark = getUserMarkPerItem(scratchie, item, sessionId, userId); + int mark = getUserMarkPerItem(scratchie, item, userLogs); item.setUserMark(mark); - int attempts = scratchieAnswerVisitDao.getLogCountPerItem(sessionId, userId, item.getUid()); - item.setUserAttempts(attempts); + int itemAttempts = calculateItemAttempts(userLogs, item); + item.setUserAttempts(itemAttempts); String correctAnswer = ""; for (ScratchieAnswer answer : (Set) item.getAnswers()) { @@ -819,28 +840,21 @@ } @Override - public List getReflectionList(Long contentId) { + public List getReflectionList(Set users) { ArrayList reflections = new ArrayList(); - List sessionList = scratchieSessionDao.getByContentId(contentId); - for (ScratchieSession session : sessionList) { - Long sessionId = session.getSessionId(); + for (ScratchieUser user : users) { + ScratchieSession session = user.getSession(); + NotebookEntry notebookEntry = getEntry(session.getSessionId(), CoreNotebookConstants.NOTEBOOK_TOOL, + ScratchieConstants.TOOL_SIGNATURE, user.getUserId().intValue()); + if ((notebookEntry != null) && StringUtils.isNotBlank(notebookEntry.getEntry())) { + ReflectDTO reflectDTO = new ReflectDTO(notebookEntry.getUser()); + reflectDTO.setReflection(notebookEntry.getEntry()); + reflectDTO.setIsGroupLeader(this.isUserGroupLeader(user, session)); - List users = scratchieUserDao.getBySessionID(sessionId); - - for (ScratchieUser user : users) { - NotebookEntry notebookEntry = getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, - ScratchieConstants.TOOL_SIGNATURE, user.getUserId().intValue()); - if ((notebookEntry != null) && StringUtils.isNotBlank(notebookEntry.getEntry())) { - ReflectDTO reflectDTO = new ReflectDTO(notebookEntry.getUser()); - reflectDTO.setReflection(notebookEntry.getEntry()); - reflectDTO.setIsGroupLeader(this.isUserGroupLeader(user, sessionId)); - - reflections.add(reflectDTO); - } + reflections.add(reflectDTO); } - } return reflections; @@ -1267,7 +1281,7 @@ Long attempts = (long) scratchieAnswerVisitDao.getLogCountTotal(sessionId, userId); row[2] = new ExcelCell(attempts, false); row[3] = new ExcelCell(getMessage("label.mark") + ":", false); - row[4] = new ExcelCell(new Long(getUserMark(sessionId, userId)), false); + row[4] = new ExcelCell(new Long(getUserMark(session, groupLeader.getUid())), false); rowList.add(row); row = new ExcelCell[1]; @@ -1461,23 +1475,25 @@ ScratchieUser groupLeader = session.getGroupLeader(); + List groupLeaderLogs = (groupLeader != null) ? scratchieAnswerVisitDao + .getLogsByScratchieUser(groupLeader.getUid()) : null; + for (ScratchieItem item : sortedItems) { ScratchieItem newItem = new ScratchieItem(); int numberOfAttempts = 0; int mark = -1; boolean isFirstChoice = false; String firstChoiceAnswerLetter = ""; - // if there is no group leader don't calculate numbers - they aren't any + // if there is no group leader don't calculate numbers - there aren't any if (groupLeader != null) { - numberOfAttempts = scratchieAnswerVisitDao.getLogCountPerItem(sessionId, groupLeader.getUserId(), - item.getUid()); + + numberOfAttempts = calculateItemAttempts(groupLeaderLogs, item); // for displaying purposes if there is no attemps we assign -1 which will be shown as "-" - mark = (numberOfAttempts == 0) ? -1 : getUserMarkPerItem(scratchie, item, sessionId, - groupLeader.getUserId()); + mark = (numberOfAttempts == 0) ? -1 : getUserMarkPerItem(scratchie, item, groupLeaderLogs); - isFirstChoice = (numberOfAttempts == 1) && isItemUnraveled(item, groupLeader.getUserId(), null); + isFirstChoice = (numberOfAttempts == 1) && isItemUnraveled(item, groupLeaderLogs); if (numberOfAttempts > 0) { ScratchieAnswer firstChoiceAnswer = scratchieAnswerVisitDao Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceProxy.java =================================================================== diff -u -r6aaee4b2fe2caa08b0c63a0de11f05042d5a3e18 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceProxy.java (.../ScratchieServiceProxy.java) (revision 6aaee4b2fe2caa08b0c63a0de11f05042d5a3e18) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceProxy.java (.../ScratchieServiceProxy.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -63,7 +63,7 @@ private static Object getScratchieDomainService(ServletContext servletContext) { WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); - return wac.getBean(ScratchieConstants.RESOURCE_SERVICE); + return wac.getBean(ScratchieConstants.SCRATCHIE_SERVICE); } } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/AuthoringAction.java =================================================================== diff -u -rcc5ac6445941cdeeb5fd2440621630496e9f81e1 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision cc5ac6445941cdeeb5fd2440621630496e9f81e1) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -1000,7 +1000,7 @@ private IScratchieService getScratchieService() { WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() .getServletContext()); - return (IScratchieService) wac.getBean(ScratchieConstants.RESOURCE_SERVICE); + return (IScratchieService) wac.getBean(ScratchieConstants.SCRATCHIE_SERVICE); } /** Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java =================================================================== diff -u -rced85c0d8b00a9c225ba5eabd8dd1cf3e01e0fa3 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision ced85c0d8b00a9c225ba5eabd8dd1cf3e01e0fa3) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -123,6 +123,7 @@ ToolAccessMode mode = WebUtil.readToolAccessModeParam(request, AttributeNames.PARAM_MODE, true); Long toolSessionId = new Long(request.getParameter(ScratchieConstants.PARAM_TOOL_SESSION_ID)); + ScratchieSession toolSession = service.getScratchieSessionBySessionId(toolSessionId); // get back the scratchie and item list and display them on page Scratchie scratchie = service.getScratchieBySessionId(toolSessionId); @@ -182,7 +183,7 @@ sessionMap.put(ScratchieConstants.ATTR_USER_ID, user.getUserId()); sessionMap.put(ScratchieConstants.ATTR_USER, user); sessionMap.put(ScratchieConstants.ATTR_GROUP_LEADER, groupLeader); - boolean isUserLeader = service.isUserGroupLeader(user, toolSessionId); + boolean isUserLeader = service.isUserGroupLeader(user, toolSession); sessionMap.put(ScratchieConstants.ATTR_IS_USER_LEADER, isUserLeader); boolean isUserFinished = user != null && user.isSessionFinished(); sessionMap.put(ScratchieConstants.ATTR_USER_FINISHED, isUserFinished); @@ -293,10 +294,11 @@ String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + ScratchieSession toolSession = service.getScratchieSessionBySessionId(toolSessionId); ScratchieUser user = getCurrentUser(toolSessionId); // only leaders are allowed to scratch answers - if (!service.isUserGroupLeader(user, toolSessionId)) { + if (!service.isUserGroupLeader(user, toolSession)) { return null; } @@ -338,8 +340,8 @@ // only leaders should get to here to finalize scratching service.setScratchingFinished(toolSessionId); - Long userId = (Long) sessionMap.get(ScratchieConstants.ATTR_USER_ID); - Set items = service.populateItemsResults(toolSessionId, userId); + ScratchieUser user = (ScratchieUser) sessionMap.get(ScratchieConstants.ATTR_USER); + Set items = service.populateItemsResults(toolSessionId, user.getUid()); request.setAttribute(ScratchieConstants.ATTR_ITEM_LIST, items); return mapping.findForward(ScratchieConstants.SUCCESS); @@ -362,10 +364,11 @@ String sessionMapID = request.getParameter(ScratchieConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + ScratchieSession toolSession = service.getScratchieSessionBySessionId(toolSessionId); ScratchieUser user = (ScratchieUser) sessionMap.get(AttributeNames.USER); // in case of the leader we should let all other learners see Next Activity button - if (service.isUserGroupLeader(user, toolSessionId)) { + if (service.isUserGroupLeader(user, toolSession)) { service.setScratchingFinished(toolSessionId); } @@ -461,7 +464,7 @@ if (service == null) { WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() .getServletContext()); - service = (IScratchieService) wac.getBean(ScratchieConstants.RESOURCE_SERVICE); + service = (IScratchieService) wac.getBean(ScratchieConstants.SCRATCHIE_SERVICE); } } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java =================================================================== diff -u -ra13b8f12e473744d035754f8eb8ee1ade8780943 -rfc1a34815de226b286ef1adfaf83eef4f96d049b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision a13b8f12e473744d035754f8eb8ee1ade8780943) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision fc1a34815de226b286ef1adfaf83eef4f96d049b) @@ -62,6 +62,8 @@ public class MonitoringAction extends Action { public static Logger log = Logger.getLogger(MonitoringAction.class); + + private static IScratchieService service; @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, @@ -85,13 +87,14 @@ private ActionForward summary(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + + initializeScratchieService(); // initialize Session Map SessionMap sessionMap = new SessionMap(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); request.setAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); - IScratchieService service = getScratchieService(); List summaryList = service.getMonitoringSummary(contentId); Scratchie scratchie = service.getScratchieByContentId(contentId); @@ -112,8 +115,7 @@ // Create reflectList if reflection is enabled. if (scratchie.isReflectOnActivity()) { - - List reflections = service.getReflectionList(contentId); + List reflections = service.getReflectionList(learners); sessionMap.put(ScratchieConstants.ATTR_REFLECTIONS, reflections); } @@ -122,6 +124,8 @@ private ActionForward itemSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + + initializeScratchieService(); String sessionMapID = request.getParameter(ScratchieConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); request.setAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); @@ -130,11 +134,11 @@ if (itemUid.equals(-1)) { return null; } - ScratchieItem item = getScratchieService().getScratchieItemByUid(itemUid); + ScratchieItem item = service.getScratchieItemByUid(itemUid); request.setAttribute(ScratchieConstants.ATTR_ITEM, item); Long contentId = (Long) sessionMap.get(ScratchieConstants.ATTR_TOOL_CONTENT_ID); - List summaryList = getScratchieService().getQuestionSummary(contentId, itemUid); + List summaryList = service.getQuestionSummary(contentId, itemUid); // escape JS sensitive characters in answer descriptions for (GroupSummary summary : summaryList) { @@ -155,12 +159,12 @@ public ActionForward exportExcel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException { - IScratchieService scratchieService = getScratchieService(); + initializeScratchieService(); String sessionMapID = request.getParameter(ScratchieConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); Scratchie scratchie = (Scratchie) sessionMap.get(ScratchieConstants.ATTR_SCRATCHIE); - LinkedHashMap dataToExport = scratchieService.exportExcel(scratchie.getContentId()); + LinkedHashMap dataToExport = service.exportExcel(scratchie.getContentId()); String fileName = "scratchie_export.xlsx"; fileName = FileUtil.encodeFilenameForDownload(request, fileName); @@ -178,9 +182,11 @@ // ************************************************************************************* // Private method // ************************************************************************************* - private IScratchieService getScratchieService() { - WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() - .getServletContext()); - return (IScratchieService) wac.getBean(ScratchieConstants.RESOURCE_SERVICE); + private void initializeScratchieService() { + if (service == null) { + WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() + .getServletContext()); + service = (IScratchieService) wac.getBean(ScratchieConstants.SCRATCHIE_SERVICE); + } } }