Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java =================================================================== diff -u -re5a3c4e8e88340e636c501f79cec1b91ab59a5cf -r9aa7a391a4b899f451a97e1dcb4f5cab77dea3f9 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision e5a3c4e8e88340e636c501f79cec1b91ab59a5cf) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision 9aa7a391a4b899f451a97e1dcb4f5cab77dea3f9) @@ -152,6 +152,8 @@ public static final String ATTR_SUBMISSION_DEADLINE = "submissionDeadline"; public static final String ATTR_IS_SUBMISSION_DEADLINE_PASSED = "isSubmissionDeadlinePassed"; + + public static final String ATTR_ANSWER_UIDS = "answerUids"; public static final String LEARNER_MARK = "learner.mark"; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java =================================================================== diff -u -r41e6a8d876e872006dce6d0f2ff540386d91649a -r9aa7a391a4b899f451a97e1dcb4f5cab77dea3f9 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision 41e6a8d876e872006dce6d0f2ff540386d91649a) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision 9aa7a391a4b899f451a97e1dcb4f5cab77dea3f9) @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -100,9 +101,6 @@ if (param.equals("checkLeaderSubmittedNotebook")) { return checkLeaderSubmittedNotebook(mapping, form, request, response); } - if (param.equals("isAnswerCorrect")) { - return isAnswerCorrect(mapping, form, request, response); - } if (param.equals("recordItemScratched")) { return recordItemScratched(mapping, form, request, response); } @@ -208,6 +206,16 @@ sessionMap.put(ScratchieConstants.ATTR_REFLECTION_ON, isReflectOnActivity); sessionMap.put(ScratchieConstants.ATTR_REFLECTION_INSTRUCTION, scratchie.getReflectInstructions()); sessionMap.put(ScratchieConstants.ATTR_REFLECTION_ENTRY, entryText); + //add all answer uids to one set + if (isUserLeader) { + Set answerUids = new HashSet(); + for (ScratchieItem item : (Set)scratchie.getScratchieItems()) { + for (ScratchieAnswer answer : (Set)item.getAnswers()) { + answerUids.add(answer.getUid()); + } + } + sessionMap.put(ScratchieConstants.ATTR_ANSWER_UIDS, answerUids); + } // add define later support if (scratchie.isDefineLater()) { @@ -347,28 +355,7 @@ } /** - * Return whether scratchie answer is correct or not - */ - private ActionForward isAnswerCorrect(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws JSONException, IOException { - initializeScratchieService(); - - Long answerUid = NumberUtils.createLong(request.getParameter(ScratchieConstants.PARAM_ANSWER_UID)); - ScratchieAnswer answer = LearningAction.service.getScratchieAnswerByUid(answerUid); - if (answer == null) { - return null; - } - - JSONObject JSONObject = new JSONObject(); - JSONObject.put(ScratchieConstants.ATTR_ANSWER_CORRECT, answer.isCorrect()); - response.setContentType("application/x-json;charset=utf-8"); - response.getWriter().print(JSONObject); - - return null; - } - - /** - * Record in DB that leader has scratched specified answer. + * Record in DB that leader has scratched specified answer. And return whether scratchie answer is correct or not * * @throws ScratchieApplicationException */ @@ -378,23 +365,55 @@ String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( sessionMapID); - final Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + final Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + final Long answerUid = NumberUtils.createLong(request.getParameter(ScratchieConstants.PARAM_ANSWER_UID)); + ScratchieSession toolSession = LearningAction.service.getScratchieSessionBySessionId(toolSessionId); ScratchieUser leader = this.getCurrentUser(toolSessionId); // only leader is allowed to scratch answers if (!toolSession.isUserGroupLeader(leader.getUid())) { return null; } + + //check answer is belong to current session + Set answerUids = (Set) sessionMap.get(ScratchieConstants.ATTR_ANSWER_UIDS); + if (!answerUids.contains(answerUid)) { + return null; + } - final Long answerUid = NumberUtils.createLong(request.getParameter(ScratchieConstants.PARAM_ANSWER_UID)); - tryExecute(new Callable() { + //Return whether scratchie answer is correct or not + ScratchieAnswer answer = LearningAction.service.getScratchieAnswerByUid(answerUid); + if (answer == null) { + return null; + } + + JSONObject JSONObject = new JSONObject(); + JSONObject.put(ScratchieConstants.ATTR_ANSWER_CORRECT, answer.isCorrect()); + response.setContentType("application/x-json;charset=utf-8"); + response.getWriter().print(JSONObject); + + // create a new thread to record item scratched (in order to do this task in parallel not to slow down sending + // response back) + Thread recordItemScratchedThread = new Thread(new Runnable() { @Override - public Object call() throws ScratchieApplicationException { - LearningAction.service.recordItemScratched(toolSessionId, answerUid); - return null; + public void run() { + + try { + tryExecute(new Callable() { + @Override + public Object call() throws ScratchieApplicationException { + LearningAction.service.recordItemScratched(toolSessionId, answerUid); + return null; + } + }); + } catch (ScratchieApplicationException e) { + log.error(e); + } } - }); + }, "LAMS_recordItemScratched_thread"); + recordItemScratchedThread.start(); + return null; } Index: lams_tool_scratchie/web/pages/learning/learning.jsp =================================================================== diff -u -rc43fd06c63eb2356b9a7b068285194a2c8d52711 -r9aa7a391a4b899f451a97e1dcb4f5cab77dea3f9 --- lams_tool_scratchie/web/pages/learning/learning.jsp (.../learning.jsp) (revision c43fd06c63eb2356b9a7b068285194a2c8d52711) +++ lams_tool_scratchie/web/pages/learning/learning.jsp (.../learning.jsp) (revision 9aa7a391a4b899f451a97e1dcb4f5cab77dea3f9) @@ -30,11 +30,15 @@ var id = '-' + itemUid + '-' + answerUid; $.ajax({ - url: '', - data: 'answerUid=' + answerUid, + url: '', + data: 'sessionMapID=${sessionMapID}&answerUid=' + answerUid, dataType: 'json', type: 'post', success: function (json) { + if (json == null) { + return false; + } + if (json.answerCorrect) { //show animation $('#image' + id).attr("src", "?reqID=" + (new Date()).getTime()); @@ -53,13 +57,6 @@ } } }); - - $.ajax({ - url: '', - data: 'sessionMapID=${sessionMapID}&answerUid=' + answerUid, - dataType: 'json', - type: 'post' - }); } function finish(){