Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieAnswerVisitDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieAnswerVisitDAO.java,v diff -u -r1.10 -r1.11 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieAnswerVisitDAO.java 29 Aug 2013 11:22:35 -0000 1.10 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieAnswerVisitDAO.java 12 Dec 2013 17:10:24 -0000 1.11 @@ -30,14 +30,14 @@ public interface ScratchieAnswerVisitDAO extends DAO { - ScratchieAnswerVisitLog getLog(Long answerUid, Long userId); + ScratchieAnswerVisitLog getLog(Long answerUid, Long sessionId); - int getLogCountTotal(Long sessionId, Long userId); + int getLogCountTotal(Long sessionId); - List getLogsByScratchieUserAndItem(Long userUid, Long itemUid); + List getLogsBySessionAndItem(Long sessionId, Long itemUid); - List getLogsByScratchieUser(Long userUid); + List getLogsBySession(Long sessionId); - ScratchieAnswer getFirstScratchedAnswerByUserAndItem(Long userUid, Long itemUid); + ScratchieAnswer getFirstScratchedAnswerBySessionAndItem(Long sessionId, Long itemUid); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieAnswerVisitDAOHibernate.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieAnswerVisitDAOHibernate.java,v diff -u -r1.10 -r1.11 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieAnswerVisitDAOHibernate.java 29 Aug 2013 11:22:34 -0000 1.10 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieAnswerVisitDAOHibernate.java 12 Dec 2013 17:10:24 -0000 1.11 @@ -31,50 +31,50 @@ public class ScratchieAnswerVisitDAOHibernate extends BaseDAOHibernate implements ScratchieAnswerVisitDAO { - private static final String FIND_BY_ANSWER_AND_USER = "from " + ScratchieAnswerVisitLog.class.getName() - + " as r where r.user.userId = ? and r.scratchieAnswer.uid=?"; + private static final String FIND_BY_SESSION_AND_ANSWER = "from " + ScratchieAnswerVisitLog.class.getName() + + " as r where r.sessionId = ? and r.scratchieAnswer.uid=?"; - private static final String FIND_BY_USER_AND_ITEM = "from " + ScratchieAnswerVisitLog.class.getName() - + " as r where r.user.uid=? and r.scratchieAnswer.scratchieItem.uid = ? order by r.accessDate asc"; + private static final String FIND_BY_SESSION_AND_ITEM = "from " + ScratchieAnswerVisitLog.class.getName() + + " as r where r.sessionId=? and r.scratchieAnswer.scratchieItem.uid = ? order by r.accessDate asc"; - private static final String FIND_FIRST_SCRATCHED_ANSWER_BY_USER_AND_ITEM = "SELECT r.scratchieAnswer from " + ScratchieAnswerVisitLog.class.getName() - + " as r where r.user.uid=? and r.scratchieAnswer.scratchieItem.uid = ? order by r.accessDate asc LIMIT 1;"; + private static final String FIND_FIRST_SCRATCHED_ANSWER_BY_SESSION_AND_ITEM = "SELECT r.scratchieAnswer from " + ScratchieAnswerVisitLog.class.getName() + + " as r where r.sessionId=? and r.scratchieAnswer.scratchieItem.uid = ? order by r.accessDate asc LIMIT 1;"; - private static final String FIND_BY_USER = "from " + ScratchieAnswerVisitLog.class.getName() - + " as r where r.user.uid=? order by r.accessDate asc"; + private static final String FIND_BY_SESSION = "from " + ScratchieAnswerVisitLog.class.getName() + + " as r where r.sessionId=? order by r.accessDate asc"; - 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_SESSION = "select count(*) from " + + ScratchieAnswerVisitLog.class.getName() + " as r where r.sessionId=?"; @Override - public ScratchieAnswerVisitLog getLog(Long answerUid, Long userId) { - List list = getHibernateTemplate().find(FIND_BY_ANSWER_AND_USER, new Object[] { userId, answerUid }); + public ScratchieAnswerVisitLog getLog(Long answerUid, Long sessionId) { + List list = getHibernateTemplate().find(FIND_BY_SESSION_AND_ANSWER, new Object[] { sessionId, answerUid }); if (list == null || list.size() == 0) return null; return (ScratchieAnswerVisitLog) list.get(0); } @Override - public int getLogCountTotal(Long toolSessionId, Long userId) { - List list = getHibernateTemplate().find(FIND_VIEW_COUNT_BY_USER, new Object[] { toolSessionId, userId }); + public int getLogCountTotal(Long sessionId) { + List list = getHibernateTemplate().find(FIND_VIEW_COUNT_BY_SESSION, new Object[] { sessionId}); 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 }); + public List getLogsBySessionAndItem(Long sessionId, Long itemUid) { + return getHibernateTemplate().find(FIND_BY_SESSION_AND_ITEM, new Object[] { sessionId, itemUid }); } @Override - public List getLogsByScratchieUser(Long userUid) { - return getHibernateTemplate().find(FIND_BY_USER, new Object[] { userUid }); + public List getLogsBySession(Long sessionId) { + return getHibernateTemplate().find(FIND_BY_SESSION, new Object[] { sessionId }); } @Override - public ScratchieAnswer getFirstScratchedAnswerByUserAndItem(Long userUid, Long itemUid) { - List list = getHibernateTemplate().find(FIND_FIRST_SCRATCHED_ANSWER_BY_USER_AND_ITEM, new Object[] { userUid, itemUid }); + public ScratchieAnswer getFirstScratchedAnswerBySessionAndItem(Long sessionId, Long itemUid) { + List list = getHibernateTemplate().find(FIND_FIRST_SCRATCHED_ANSWER_BY_SESSION_AND_ITEM, new Object[] { sessionId, itemUid }); if (list == null || list.size() == 0) return null; return (ScratchieAnswer) list.get(0); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20131212.sql =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20131212.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20131212.sql 12 Dec 2013 17:10:24 -0000 1.1 @@ -0,0 +1,39 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +----------------------Put all sql statements below here------------------------- + +-- LKC-40 +-- Remove logs belong to all other users except leader +CREATE TABLE temp_select AS SELECT group_leader_uid uid + FROM tl_lascrt11_session WHERE group_leader_uid IS NOT NULL; +ALTER TABLE temp_select ADD INDEX index1 (uid ASC); +DELETE FROM tl_lascrt11_answer_log WHERE user_uid NOT IN (SELECT uid FROM temp_select); +DROP TABLE temp_select; + +--Make ScratchieAnswerVisitLog belong to session and not user, thus being shared by all users +ALTER TABLE tl_lascrt11_answer_log DROP FOREIGN KEY FK_NEW_610529188_693580A441F9365D; +ALTER TABLE tl_lascrt11_answer_log DROP INDEX FK_NEW_610529188_693580A441F9365D; +ALTER TABLE tl_lascrt11_answer_log DROP COLUMN user_uid; +ALTER TABLE tl_lascrt11_answer_log ADD INDEX sessionIdIndex (session_id); + +-- Make mark belong to session and not user, thus being shared by all users +ALTER TABLE tl_lascrt11_session ADD COLUMN mark INTEGER DEFAULT 0; +UPDATE tl_lascrt11_session, tl_lascrt11_user + SET tl_lascrt11_session.mark = tl_lascrt11_user.mark + WHERE tl_lascrt11_user.uid = tl_lascrt11_session.group_leader_uid; +ALTER TABLE tl_lascrt11_user DROP COLUMN mark; + +-- Make scratching_finished flag belong to session and not user, thus being shared by all users +ALTER TABLE tl_lascrt11_session ADD COLUMN scratching_finished smallint DEFAULT 0; +UPDATE tl_lascrt11_session, tl_lascrt11_user + SET tl_lascrt11_session.scratching_finished = tl_lascrt11_user.scratching_finished + WHERE tl_lascrt11_user.uid = tl_lascrt11_session.group_leader_uid; +ALTER TABLE tl_lascrt11_user DROP COLUMN scratching_finished; + +----------------------Put all sql statements above here------------------------- + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java,v diff -u -r1.3 -r1.4 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java 14 Dec 2012 15:59:51 -0000 1.3 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java 12 Dec 2013 17:10:24 -0000 1.4 @@ -27,16 +27,22 @@ import org.lamsfoundation.lams.tool.scratchie.model.ScratchieAnswer; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieItem; +import org.lamsfoundation.lams.tool.scratchie.model.ScratchieSession; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieUser; public class GroupSummary { private Long sessionId; private String sessionName; + private int mark; + private int totalAttempts; private Collection users; private Collection items; private Collection answers; + + public GroupSummary() { + } /** * Contruction method for monitoring summary function. @@ -47,9 +53,10 @@ * @param item * @param isInitGroup */ - public GroupSummary(Long sessionId, String sessionName) { - this.sessionId = sessionId; - this.sessionName = sessionName; + public GroupSummary(ScratchieSession session) { + this.sessionId = session.getSessionId(); + this.sessionName = session.getSessionName(); + this.mark = session.getMark(); } public Long getSessionId() { @@ -67,7 +74,23 @@ public void setSessionName(String sessionName) { this.sessionName = sessionName; } + + public int getMark() { + return mark; + } + public void setMark(int mark) { + this.mark = mark; + } + + public int getTotalAttempts() { + return totalAttempts; + } + + public void setTotalAttempts(int totalAttempts) { + this.totalAttempts = totalAttempts; + } + public Collection getUsers() { return users; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieAnswerVisitLog.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieAnswerVisitLog.java,v diff -u -r1.1 -r1.2 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieAnswerVisitLog.java 9 Aug 2012 21:55:36 -0000 1.1 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieAnswerVisitLog.java 12 Dec 2013 17:10:24 -0000 1.2 @@ -37,7 +37,6 @@ public class ScratchieAnswerVisitLog { private Long uid; - private ScratchieUser user; private ScratchieAnswer scratchieAnswer; private Date accessDate; private Long sessionId; @@ -79,18 +78,6 @@ } /** - * @hibernate.many-to-one column="user_uid" cascade="none" - * @return - */ - public ScratchieUser getUser() { - return user; - } - - public void setUser(ScratchieUser user) { - this.user = user; - } - - /** * @hibernate.property column="session_id" * @return */ Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java,v diff -u -r1.4 -r1.5 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java 11 Dec 2013 17:56:41 -0000 1.4 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java 12 Dec 2013 17:10:24 -0000 1.5 @@ -51,6 +51,8 @@ // scratchie Items private Set scratchieItems; private ScratchieUser groupLeader; + private int mark; + private boolean scratchingFinished; // ********************************************************** // Get/Set methods @@ -179,5 +181,33 @@ boolean isUserLeader = (this.groupLeader != null) && userUid.equals(this.groupLeader.getUid()); return isUserLeader; } + + /** + * Mark scored by a leader and shared by all users in a group. + * + * @hibernate.property column="mark" + * @return + */ + public int getMark() { + return mark; + } + public void setMark(int mark) { + this.mark = mark; + } + + /** + * Indicates whether leader has pressed Submit button in learning. And is shared by all users in a group. + * + * @hibernate.property column="scratching_finished" + * @return + */ + public boolean isScratchingFinished() { + return scratchingFinished; + } + + public void setScratchingFinished(boolean scratchingFinished) { + this.scratchingFinished = scratchingFinished; + } + } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieUser.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieUser.java,v diff -u -r1.7 -r1.8 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieUser.java 17 Sep 2013 04:52:28 -0000 1.7 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieUser.java 12 Dec 2013 17:10:24 -0000 1.8 @@ -46,15 +46,10 @@ private String lastName; private String loginName; private boolean sessionFinished; - private boolean scratchingFinished; - private int mark; private ScratchieSession session; private Scratchie scratchie; - // =============== NON Persisit value: for display use =========== - private int totalAttempts; - public ScratchieUser() { } @@ -207,33 +202,7 @@ public void setSessionFinished(boolean sessionFinished) { this.sessionFinished = sessionFinished; } - - /** - * Indicates whether user pressed Submit button in learning. - * - * @hibernate.property column="scratching_finished" - * @return - */ - public boolean isScratchingFinished() { - return scratchingFinished; - } - public void setScratchingFinished(boolean scratchingFinished) { - this.scratchingFinished = scratchingFinished; - } - - /** - * @hibernate.property column="mark" - * @return - */ - public int getMark() { - return mark; - } - - public void setMark(int mark) { - this.mark = mark; - } - public boolean equals(Object obj) { if (this == obj) return true; @@ -250,13 +219,5 @@ public int hashCode() { return new HashCodeBuilder().append(uid).append(firstName).append(lastName).append(loginName).toHashCode(); } - - public int getTotalAttempts() { - return totalAttempts; - } - public void setTotalAttempts(int totalAttempts) { - this.totalAttempts = totalAttempts; - } - } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java,v diff -u -r1.23 -r1.24 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java 6 Dec 2013 14:49:50 -0000 1.23 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java 12 Dec 2013 17:10:24 -0000 1.24 @@ -67,14 +67,6 @@ ScratchieUser checkLeaderSelectToolForSessionLeader(ScratchieUser user, Long toolSessionId); ScratchieAnswer getScratchieAnswerByUid (Long answerUid); - - /** - * Check user has the same scrathes logs as group leader. If not - creates missing ones. - * - * @param user - * @param leader - */ - void copyScratchesFromLeader(ScratchieUser user, ScratchieUser leader); /** * Get a cloned copy of tool default tool content (Scratchie) and assign the toolContentId of that copy as the given @@ -200,23 +192,22 @@ * @param items * @param user */ - void getScratchesOrder(Collection items, ScratchieUser user); + void getScratchesOrder(Collection items, Long toolSessionId); /** * Fill in scratchieItems with information about whether they were unraveled; and answers with information on their scratched. * * @param scratchieItemList - * @param user */ - Set getItemsWithIndicatedScratches(Long toolSessionId, ScratchieUser user); + Set getItemsWithIndicatedScratches(Long toolSessionId); /** * Leader has scratched the specified answer. Will store this scratch for all users in his group. It will also * update all the marks. */ - void recordItemScratched(ScratchieUser leader, Long scratchieItemUid); + void recordItemScratched(Long toolSessionId, Long scratchieItemUid); - void recalculateMarkForSession(ScratchieUser leader, boolean isPropagateToGradebook); + void recalculateMarkForSession(Long sessionId, boolean isPropagateToGradebook); /** * Mark all users in agroup as ScratchingFinished so that users can't continue scratching after this. Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java,v diff -u -r1.6 -r1.7 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java 17 Sep 2013 17:52:03 -0000 1.6 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java 12 Dec 2013 17:10:24 -0000 1.7 @@ -84,8 +84,8 @@ */ private ToolOutput getUserMark(IScratchieService scratchieService, Long toolSessionId, Long learnerId) { - ScratchieUser user = scratchieService.getUserByIDAndSession(learnerId, toolSessionId); - int userMark = user.getMark(); + ScratchieSession session = scratchieService.getScratchieSessionBySessionId(toolSessionId); + int userMark = session.getMark(); 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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java,v diff -u -r1.35 -r1.36 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java 12 Dec 2013 10:22:05 -0000 1.35 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java 12 Dec 2013 17:10:24 -0000 1.36 @@ -427,63 +427,21 @@ } @Override - public void copyScratchesFromLeader(ScratchieUser user, ScratchieUser leader) { - ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: entered copyScratchesFromLeader() for user ID: " + user.getUserId() + " and leader ID: " - + leader.getUserId()); - if ((user == null) || (leader == null) || user.getUid().equals(leader.getUid())) { - return; - } - - ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting leader ScratchieAnswerVisitLog with leader UID: " + leader.getUid()); - List leaderLogs = scratchieAnswerVisitDao.getLogsByScratchieUser(leader.getUid()); - - for (ScratchieAnswerVisitLog leaderLog : leaderLogs) { - ScratchieAnswer answer = leaderLog.getScratchieAnswer(); - ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting ScratchieAnswerVisitLog with answer UID: " + answer.getUid() + " and user ID: " - + user.getUserId()); - ScratchieAnswerVisitLog userLog = scratchieAnswerVisitDao.getLog(answer.getUid(), user.getUserId()); - - // create and save new ScratchieAnswerVisitLog - if (userLog == null) { - userLog = new ScratchieAnswerVisitLog(); - userLog.setScratchieAnswer(answer); - userLog.setUser(user); - userLog.setSessionId(user.getSession().getSessionId()); - userLog.setAccessDate(leaderLog.getAccessDate()); - ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: creating ScratchieAnswerVisitLog with answer UID: " + answer.getUid() + " and user ID: " - + user.getUserId() + " and session ID: " + user.getSession().getSessionId()); - scratchieAnswerVisitDao.saveObject(userLog); - } - } - - // update user mark - user.setMark(leader.getMark()); - this.saveUser(user); - ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: leaving copyScratchesFromLeader() for user ID: " + user.getUserId() + " and leader ID: " - + leader.getUserId()); - } - - @Override public void changeUserMark(Long userId, Long sessionId, Integer newMark) { if (newMark == null) { return; } - ScratchieUser leader = this.getUserByIDAndSession(userId, sessionId); - int oldMark = leader.getMark(); + ScratchieSession session = this.getScratchieSessionBySessionId(sessionId); + int oldMark = session.getMark(); + + session.setMark(newMark); + scratchieSessionDao.saveObject(session); - // When changing a mark for leader, the mark should be propagated to all students within the group - List users = this.getUsersBySession(leader.getSession().getSessionId()); + // propagade new mark to Gradebook for all students in a group + List users = this.getUsersBySession(sessionId); for (ScratchieUser user : users) { - user.setMark(newMark); - this.saveUser(user); - - // propagade changes to Gradebook + gradebookService.updateActivityMark(new Double(newMark), null, user.getUserId().intValue(), user .getSession().getSessionId(), true); @@ -529,37 +487,30 @@ } @Override - public void recordItemScratched(ScratchieUser leader, Long answerUid) { + public void recordItemScratched(Long sessionId, Long answerUid) { ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: entered recordItemScratched(), getting ScratchieAnswer by UID: " + answerUid); ScratchieAnswer answer = this.getScratchieAnswerByUid(answerUid); if (answer == null) { return; } - Long sessionId = leader.getSession().getSessionId(); ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting ScratchieUsers by ScratchieSession ID: " + sessionId); - List users = this.getUsersBySession(sessionId); - for (ScratchieUser user : users) { + + "]: getting ScratchieAnswerVisitLog by ScratchieAnswer UID : " + answerUid + + " and sessionId: " + sessionId); + ScratchieAnswerVisitLog log = scratchieAnswerVisitDao.getLog(answerUid, sessionId); + if (log == null) { + log = new ScratchieAnswerVisitLog(); + log.setScratchieAnswer(answer); + log.setSessionId(sessionId); + log.setAccessDate(new Timestamp(new Date().getTime())); ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting ScratchieAnswerVisitLog by ScratchieAnswer UID : " + answerUid - + " and ScratchieUser ID: " + user.getUserId()); - ScratchieAnswerVisitLog log = scratchieAnswerVisitDao.getLog(answerUid, user.getUserId()); - if (log == null) { - log = new ScratchieAnswerVisitLog(); - log.setScratchieAnswer(answer); - log.setUser(user); - log.setSessionId(sessionId); - log.setAccessDate(new Timestamp(new Date().getTime())); - ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: saving ScratchieAnswerVisitLog for ScratchieAnswer UID : " + answerUid - + " and ScratchieUser ID: " + user.getUserId() + " and ScratchieSession ID: " + sessionId); - scratchieAnswerVisitDao.saveObject(log); - } + + "]: saving ScratchieAnswerVisitLog for ScratchieAnswer UID : " + answerUid + + " and ScratchieSession ID: " + sessionId); + scratchieAnswerVisitDao.saveObject(log); } - this.recalculateMarkForSession(leader, false); + this.recalculateMarkForSession(sessionId, false); ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: leaving recordItemScratched() for ScratchieAnswer UID: " + answerUid); } @@ -571,15 +522,16 @@ * @param answerUid */ @Override - public void recalculateMarkForSession(ScratchieUser leader, boolean isPropagateToGradebook) { + public void recalculateMarkForSession(Long sessionId, boolean isPropagateToGradebook) { ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: entered recalculateMarkForSession(), getting ScratchieAnswerVisitLog by ScratchieUser UID: " - + leader.getUid()); - List userLogs = scratchieAnswerVisitDao.getLogsByScratchieUser(leader.getUid()); - Scratchie scratchie = leader.getSession().getScratchie(); + + "]: entered recalculateMarkForSession(), getting ScratchieAnswerVisitLog by sessionId : " + + sessionId); + List userLogs = scratchieAnswerVisitDao.getLogsBySession(sessionId); + ScratchieSession session = this.getScratchieSessionBySessionId(sessionId); + Scratchie scratchie = session.getScratchie(); Set items = scratchie.getScratchieItems(); - // clculate mark + // calculate mark int mark = 0; if (!items.isEmpty()) { for (ScratchieItem item : items) { @@ -588,14 +540,14 @@ } // change mark for all learners in a group - Long sessionId = leader.getSession().getSessionId(); - List users = getUsersBySession(sessionId); - for (ScratchieUser user : users) { - user.setMark(mark); - this.saveUser(user); - - if (isPropagateToGradebook) { - // propagade changes to Gradebook + session.setMark(mark); + scratchieSessionDao.saveObject(session); + + // propagade changes to Gradebook + if (isPropagateToGradebook) { + List users = this.getUsersBySession(sessionId); + for (ScratchieUser user : users) { + ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: using GradebookService to update ActivityMark for ScratchieUser ID: " + user.getUserId() + " and ScratchieSession ID: " + user.getSession().getSessionId()); @@ -604,7 +556,7 @@ } } ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: leaving recalculateMarkForSession() for leader UID: " + leader.getUid()); + + "]: leaving recalculateMarkForSession() for sessionId: " + sessionId); } @Override @@ -621,14 +573,13 @@ public void setScratchingFinished(Long toolSessionId) { ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: entered setScratchingFinished() for session ID: " + toolSessionId); - List users = getUsersBySession(toolSessionId); - for (ScratchieUser user : users) { - user.setScratchingFinished(true); - ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: saving ScratchieUser ID: " + user.getUserId()); - scratchieUserDao.saveObject(user); - } + ScratchieSession session = this.getScratchieSessionBySessionId(toolSessionId); + session.setScratchingFinished(true); ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + + "]: saving Scratchiesession uid: " + session.getUid()); + scratchieSessionDao.saveObject(session); + + ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: leaving setScratchingFinished() for session ID: " + toolSessionId); } @@ -714,8 +665,12 @@ for (ScratchieSession session : sessionList) { Long sessionId = session.getSessionId(); + // one new summary for one session. - GroupSummary groupSummary = new GroupSummary(sessionId, session.getSessionName()); + GroupSummary groupSummary = new GroupSummary(session); + + int totalAttempts = scratchieAnswerVisitDao.getLogCountTotal(sessionId); + groupSummary.setTotalAttempts(totalAttempts); ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: getting ScratchieUsers with session ID: " + sessionId); @@ -726,13 +681,6 @@ boolean isUserGroupLeader = session.isUserGroupLeader(user.getUid()); // include only leaders in case isUserGroupLeader is ON, include all otherwise if ((isIncludeOnlyLeaders && isUserGroupLeader) || !isIncludeOnlyLeaders) { - ScratchieServiceImpl.log - .info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting log count for user ID: " + user.getUserId() + " and session ID: " - + sessionId); - int totalAttempts = scratchieAnswerVisitDao.getLogCountTotal(sessionId, user.getUserId()); - user.setTotalAttempts(totalAttempts); - usersToShow.add(user); } } @@ -746,23 +694,23 @@ } @Override - public void getScratchesOrder(Collection items, ScratchieUser user) { + public void getScratchesOrder(Collection items, Long sessionId) { ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: entered getScratchesOrder() for user ID: " + user.getUserId()); + + "]: entered getScratchesOrder() for toolSessionId: " + sessionId); for (ScratchieItem item : items) { ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting ScratchieAnswerVisitLogs by user ID: " + user.getUserId() + " (UID: " + user.getUid() + + "]: getting ScratchieAnswerVisitLogs by toolSessionId: " + sessionId + ") and item UID: " + item.getUid()); - List itemLogs = scratchieAnswerVisitDao.getLogsByScratchieUserAndItem( - user.getUid(), item.getUid()); + List itemLogs = scratchieAnswerVisitDao.getLogsBySessionAndItem(sessionId, + item.getUid()); for (ScratchieAnswer answer : (Set) item.getAnswers()) { int attemptNumber; ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting ScratchieAnswerVisitLog by user UID: " + user.getUid() + " ans answer UID: " + + "]: getting ScratchieAnswerVisitLog by toolSessionId: " + sessionId + " ans answer UID: " + answer.getUid()); - ScratchieAnswerVisitLog log = scratchieAnswerVisitDao.getLog(answer.getUid(), user.getUserId()); + ScratchieAnswerVisitLog log = scratchieAnswerVisitDao.getLog(answer.getUid(), sessionId); if (log == null) { // -1 if there is no log attemptNumber = -1; @@ -775,15 +723,15 @@ } } ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: leaving getScratchesOrder() for user ID: " + user.getUserId()); + + "]: leaving getScratchesOrder() for sessionId: " + sessionId); } @Override - public Set getItemsWithIndicatedScratches(Long toolSessionId, ScratchieUser user) { + public Set getItemsWithIndicatedScratches(Long toolSessionId) { ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: entered getItemsWithIndicatedScratches() for user ID: " + user.getUserId() + " and session ID: " - + toolSessionId + ", getting ScratchieAnswerVisitLogs by user UID: " + user.getUid()); - List userLogs = scratchieAnswerVisitDao.getLogsByScratchieUser(user.getUid()); + + "]: entered getItemsWithIndicatedScratches() for session ID: " + + toolSessionId); + List userLogs = scratchieAnswerVisitDao.getLogsBySession(toolSessionId); Scratchie scratchie = this.getScratchieBySessionId(toolSessionId); Set items = new TreeSet(new ScratchieItemComparator()); @@ -812,7 +760,7 @@ item.setUnraveled(isItemUnraveled); } ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: leaving getItemsWithIndicatedScratches() for user ID: " + user.getUserId() + " and session ID: " + + "]: leaving getItemsWithIndicatedScratches() for session ID: " + toolSessionId); return items; } @@ -904,7 +852,7 @@ Long sessionId = session.getSessionId(); // one new summary for one session. - GroupSummary groupSummary = new GroupSummary(sessionId, session.getSessionName()); + GroupSummary groupSummary = new GroupSummary(session); Map answerMap = new HashMap(); for (ScratchieAnswer dbAnswer : (Set) answers) { @@ -916,21 +864,22 @@ answer.setAttempts(attempts); answerMap.put(dbAnswer.getUid(), answer); } + + ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + + "]: getting ScratchieAnswerVisitLog by item UID: " + itemUid); + List sessionAttempts = scratchieAnswerVisitDao.getLogsBySessionAndItem(sessionId, + itemUid); ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: getting ScratchieUsers by session ID: " + sessionId); List users = scratchieUserDao.getBySessionID(sessionId); + // calculate attempts table for (ScratchieUser user : users) { - int attemptNumber = 0; - ScratchieServiceImpl.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting ScratchieAnswerVisitLog by user UID: " + user.getUid() + " and item UID: " - + itemUid); - List userAttempts = scratchieAnswerVisitDao.getLogsByScratchieUserAndItem( - user.getUid(), itemUid); - for (ScratchieAnswerVisitLog userAttempt : userAttempts) { - ScratchieAnswer answer = answerMap.get(userAttempt.getScratchieAnswer().getUid()); + + for (ScratchieAnswerVisitLog attempt : sessionAttempts) { + ScratchieAnswer answer = answerMap.get(attempt.getScratchieAnswer().getUid()); int[] attempts = answer.getAttempts(); // +1 for corresponding choice attempts[attemptNumber++]++; @@ -945,8 +894,10 @@ // show total groupSummary if there is more than 1 group available if (sessionList.size() > 1) { - Long sessionId = new Long(0); - GroupSummary groupSummaryTotal = new GroupSummary(sessionId, "Summary"); + GroupSummary groupSummaryTotal = new GroupSummary(); + groupSummaryTotal.setSessionId(new Long(0)); + groupSummaryTotal.setSessionName("Summary"); + groupSummaryTotal.setMark(0); Map answerMapTotal = new HashMap(); for (ScratchieAnswer dbAnswer : (Set) answers) { @@ -1311,8 +1262,8 @@ for (ScratchieUser user : summary.getUsers()) { row = new ExcelCell[4]; row[0] = new ExcelCell(user.getFirstName() + " " + user.getLastName(), false); - row[1] = new ExcelCell(new Long(user.getTotalAttempts()), false); - Long mark = (user.getTotalAttempts() == 0) ? null : new Long(user.getMark()); + row[1] = new ExcelCell(new Long(summary.getTotalAttempts()), false); + Long mark = (summary.getTotalAttempts() == 0) ? null : new Long(summary.getMark()); row[2] = new ExcelCell(mark, false); row[3] = new ExcelCell(summary.getSessionName(), false); rowList.add(row); @@ -1432,14 +1383,13 @@ if (groupLeader != null) { - Long userId = groupLeader.getUserId(); row = new ExcelCell[5]; row[0] = new ExcelCell(groupLeader.getFirstName() + " " + groupLeader.getLastName(), true); row[1] = new ExcelCell(getMessage("label.attempts") + ":", false); - Long attempts = (long) scratchieAnswerVisitDao.getLogCountTotal(sessionId, userId); + Long attempts = (long) scratchieAnswerVisitDao.getLogCountTotal(sessionId); row[2] = new ExcelCell(attempts, false); row[3] = new ExcelCell(getMessage("label.mark") + ":", false); - row[4] = new ExcelCell(new Long(groupLeader.getMark()), false); + row[4] = new ExcelCell(new Long(session.getMark()), false); rowList.add(row); row = new ExcelCell[1]; @@ -1454,8 +1404,8 @@ rowList.add(ScratchieServiceImpl.EMPTY_ROW); int i = 1; - List logs = scratchieAnswerVisitDao.getLogsByScratchieUserAndItem( - groupLeader.getUid(), item.getUid()); + List logs = scratchieAnswerVisitDao.getLogsBySessionAndItem(sessionId, + item.getUid()); for (ScratchieAnswerVisitLog log : logs) { row = new ExcelCell[4]; row[0] = new ExcelCell(new Long(i++), false); @@ -1559,9 +1509,12 @@ row[columnCount++] = new ExcelCell(mark, false); // Answers selected - List logs = (groupLeader != null) ? scratchieAnswerVisitDao - .getLogsByScratchieUserAndItem(groupLeader.getUid(), item.getUid()) - : new ArrayList(); + List logs = scratchieAnswerVisitDao.getLogsBySessionAndItem(sessionId, + item.getUid()); + if (logs == null) { + logs = new ArrayList(); + } + for (ScratchieAnswerVisitLog log : logs) { String answer = removeHtmlMarkup(log.getScratchieAnswer().getDescription()); row[columnCount++] = new ExcelCell(answer, false); @@ -1627,13 +1580,12 @@ for (ScratchieSession session : sessionList) { Long sessionId = session.getSessionId(); // one new summary for one session. - GroupSummary groupSummary = new GroupSummary(sessionId, session.getSessionName()); + GroupSummary groupSummary = new GroupSummary(session); ArrayList items = new ArrayList(); ScratchieUser groupLeader = session.getGroupLeader(); - List groupLeaderLogs = (groupLeader != null) ? scratchieAnswerVisitDao - .getLogsByScratchieUser(groupLeader.getUid()) : null; + List answerLogs = scratchieAnswerVisitDao.getLogsBySession(sessionId); for (ScratchieItem item : sortedItems) { ScratchieItem newItem = new ScratchieItem(); @@ -1645,16 +1597,16 @@ // if there is no group leader don't calculate numbers - there aren't any if (groupLeader != null) { - numberOfAttempts = calculateItemAttempts(groupLeaderLogs, item); + numberOfAttempts = calculateItemAttempts(answerLogs, item); // for displaying purposes if there is no attemps we assign -1 which will be shown as "-" - mark = (numberOfAttempts == 0) ? -1 : getUserMarkPerItem(scratchie, item, groupLeaderLogs); + mark = (numberOfAttempts == 0) ? -1 : getUserMarkPerItem(scratchie, item, answerLogs); - isFirstChoice = (numberOfAttempts == 1) && isItemUnraveled(item, groupLeaderLogs); + isFirstChoice = (numberOfAttempts == 1) && isItemUnraveled(item, answerLogs); if (numberOfAttempts > 0) { ScratchieAnswer firstChoiceAnswer = scratchieAnswerVisitDao - .getFirstScratchedAnswerByUserAndItem(groupLeader.getUid(), item.getUid()); + .getFirstScratchedAnswerBySessionAndItem(sessionId, item.getUid()); // find out the correct answer's sequential letter - A,B,C... int answerCount = 1; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java,v diff -u -r1.31 -r1.32 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java 12 Dec 2013 10:22:06 -0000 1.31 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java 12 Dec 2013 17:10:24 -0000 1.32 @@ -186,36 +186,6 @@ return mapping.findForward("waitforleader"); } - if ((groupLeader != null) && !mode.isTeacher()) { - // in case user joins the lesson after leader has scratched some answers already - we need to make sure - // he has the same scratches as leader - LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: trying to execute copyScratchesFromLeade for user ID: " + user.getUserId() - + " and leader ID: " + groupLeader.getUserId()); - tryExecute(new Callable() { - @Override - public Object call() throws ScratchieApplicationException { - LearningAction.service.copyScratchesFromLeader(user, groupLeader); - return null; - } - }); - - // if user joins a lesson after leader has already finished an activity set his scratchingFinished - // parameter to true - if (groupLeader.isScratchingFinished()) { - user.setScratchingFinished(true); - LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: trying to execute saveUser for user ID: " + user.getUserId()); - tryExecute(new Callable() { - @Override - public Object call() throws ScratchieApplicationException { - LearningAction.service.saveUser(user); - return null; - } - }); - } - } - // initial Session Map SessionMap sessionMap = new SessionMap(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); @@ -310,14 +280,14 @@ // set scratched flag for display purpose LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting ScratchieItems for user ID: " + user.getUserId() + " and session ID: " + toolSessionId); - Collection items = LearningAction.service.getItemsWithIndicatedScratches(toolSessionId, user); + + "]: getting ScratchieItems for session ID: " + toolSessionId); + Collection items = LearningAction.service.getItemsWithIndicatedScratches(toolSessionId); // for teacher in monitoring display the number of attempt. if (mode.isTeacher()) { LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting Scratches order for user ID: " + user.getUserId()); - LearningAction.service.getScratchesOrder(items, user); + + "]: getting Scratches order for toolSessionId: " + toolSessionId); + LearningAction.service.getScratchesOrder(items, toolSessionId); } // calculate max score @@ -332,7 +302,7 @@ sessionMap.put(ScratchieConstants.ATTR_ITEM_LIST, items); sessionMap.put(ScratchieConstants.ATTR_SCRATCHIE, scratchie); sessionMap.put(ScratchieConstants.ATTR_MAX_SCORE, maxScore); - boolean isScratchingFinished = (user != null) && user.isScratchingFinished(); + boolean isScratchingFinished = toolSession.isScratchingFinished(); sessionMap.put(ScratchieConstants.ATTR_IS_SCRATCHING_FINISHED, isScratchingFinished); // decide whether to show results page or learning one @@ -371,21 +341,21 @@ LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: getting ScratchieSession by ID: " + toolSessionId); ScratchieSession toolSession = LearningAction.service.getScratchieSessionBySessionId(toolSessionId); - ScratchieUser user = this.getCurrentUser(toolSessionId); // set scratched flag for display purpose LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting ScratchieItems by user ID: " + user.getUserId() + " and session ID: " + toolSessionId + + "]: getting ScratchieItems by session ID: " + toolSessionId + " and putting them in sessionMap(!)"); - Set items = LearningAction.service.getItemsWithIndicatedScratches(toolSessionId, user); + Set items = LearningAction.service.getItemsWithIndicatedScratches(toolSessionId); sessionMap.put(ScratchieConstants.ATTR_ITEM_LIST, items); // refresh leadership status + ScratchieUser user = this.getCurrentUser(toolSessionId); boolean isUserLeader = toolSession.isUserGroupLeader(user.getUid()); sessionMap.put(ScratchieConstants.ATTR_IS_USER_LEADER, isUserLeader); + // refresh ScratchingFinished status - boolean isScratchingFinished = (user != null) && user.isScratchingFinished(); - sessionMap.put(ScratchieConstants.ATTR_IS_SCRATCHING_FINISHED, isScratchingFinished); + sessionMap.put(ScratchieConstants.ATTR_IS_SCRATCHING_FINISHED, toolSession.isScratchingFinished()); LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: leaving refreshQuestionList()"); return mapping.findForward(ScratchieConstants.SUCCESS); @@ -433,12 +403,12 @@ + "]: sessionMapID is " + sessionMapID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( sessionMapID); - Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + final Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() + "]: getting ScratchieSession by ID: " + toolSessionId); ScratchieSession toolSession = LearningAction.service.getScratchieSessionBySessionId(toolSessionId); - final ScratchieUser leader = this.getCurrentUser(toolSessionId); + ScratchieUser leader = this.getCurrentUser(toolSessionId); // only leaders are allowed to scratch answers if (!toolSession.isUserGroupLeader(leader.getUid())) { LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() @@ -453,7 +423,7 @@ tryExecute(new Callable() { @Override public Object call() throws ScratchieApplicationException { - LearningAction.service.recordItemScratched(leader, answerUid); + LearningAction.service.recordItemScratched(toolSessionId, answerUid); return null; } }); @@ -504,11 +474,8 @@ }); } - // get user from DB to get his updated score - LearningAction.log.info("LKC:[" + Thread.currentThread().getId() + "|" + Thread.activeCount() - + "]: getting ScratchieUser by UID: " + userUid); - ScratchieUser userUpdated = LearningAction.service.getUser(userUid); - int score = userUpdated.getMark(); + // get updated score from ScratchieSession + int score = toolSession.getMark(); int maxScore = (Integer) sessionMap.get(ScratchieConstants.ATTR_MAX_SCORE); double percentage = (maxScore == 0) ? 0 : ((score * 100) / maxScore); request.setAttribute(ScratchieConstants.ATTR_SCORE, (int) percentage); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/ExportServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/ExportServlet.java,v diff -u -r1.5 -r1.6 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/ExportServlet.java 20 Sep 2013 15:11:42 -0000 1.5 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/ExportServlet.java 12 Dec 2013 17:10:24 -0000 1.6 @@ -158,7 +158,7 @@ } // set complete flag for display purpose - Set items = service.getItemsWithIndicatedScratches(toolSessionID, learner); + Set items = service.getItemsWithIndicatedScratches(toolSessionID); sessionMap.put(ScratchieConstants.ATTR_ITEM_LIST, items); // Add flag to indicate whether to render user notebook entries Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/PopulateMarksServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/PopulateMarksServlet.java,v diff -u -r1.1 -r1.2 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/PopulateMarksServlet.java 17 Sep 2013 04:52:28 -0000 1.1 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/PopulateMarksServlet.java 12 Dec 2013 17:10:24 -0000 1.2 @@ -64,7 +64,7 @@ ScratchieUser leader = session.getGroupLeader(); if ((leader != null)) { - service.recalculateMarkForSession(leader, true); + service.recalculateMarkForSession(session.getSessionId(), true); log.debug("recalculateMarkForSession uid:" + session.getUid()); out.println("recalculateMarkForSession uid:" + session.getUid()); } Index: lams_tool_scratchie/web/pages/export/parts/exportTeacher.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/web/pages/export/parts/exportTeacher.jsp,v diff -u -r1.3 -r1.4 --- lams_tool_scratchie/web/pages/export/parts/exportTeacher.jsp 17 Sep 2013 04:52:28 -0000 1.3 +++ lams_tool_scratchie/web/pages/export/parts/exportTeacher.jsp 12 Dec 2013 17:10:24 -0000 1.4 @@ -50,8 +50,8 @@ userId:"${user.userId}", sessionId:"${user.session.sessionId}", userName:"${user.lastName}, ${user.firstName}", - totalAttempts:"${user.totalAttempts}", - mark:" - ${user.mark} " + totalAttempts:"${summary.totalAttempts}", + mark:" - ${summary.mark} " }); Index: lams_tool_scratchie/web/pages/monitoring/statistic.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/web/pages/monitoring/statistic.jsp,v diff -u -r1.3 -r1.4 --- lams_tool_scratchie/web/pages/monitoring/statistic.jsp 17 Sep 2013 04:52:28 -0000 1.3 +++ lams_tool_scratchie/web/pages/monitoring/statistic.jsp 12 Dec 2013 17:10:24 -0000 1.4 @@ -38,8 +38,8 @@ - - - ${user.mark} + - + ${summary.mark} Index: lams_tool_scratchie/web/pages/monitoring/summary.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/web/pages/monitoring/summary.jsp,v diff -u -r1.12 -r1.13 --- lams_tool_scratchie/web/pages/monitoring/summary.jsp 8 Oct 2013 18:01:37 -0000 1.12 +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp 12 Dec 2013 17:10:24 -0000 1.13 @@ -80,8 +80,8 @@ userId:"${user.userId}", sessionId:"${user.session.sessionId}", userName:"${user.lastName}, ${user.firstName}", - totalAttempts:"${user.totalAttempts}", - mark:"-${user.mark}" + totalAttempts:"${summary.totalAttempts}", + mark:"-${summary.mark}" });