Index: lams_tool_scratchie/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/conf/language/lams/ApplicationResources_en_AU.properties,v diff -u -r1.27 -r1.27.2.1 --- lams_tool_scratchie/conf/language/lams/ApplicationResources_en_AU.properties 17 Jul 2014 14:40:23 -0000 1.27 +++ lams_tool_scratchie/conf/language/lams/ApplicationResources_en_AU.properties 13 Feb 2015 23:51:29 -0000 1.27.2.1 @@ -189,5 +189,9 @@ error.entered.marks.not.comma.separates =Entered marks are not in a correct format of comma separated values. label.authoring.export.qti =Export IMS QTI +label.authoring.advanced.burning.questions =Option for burning questions +label.continue.burning.questions =Continue with burning questions +label.burning.questions =Burning questions +label.burning.question =Burning question #======= End labels: Exported 182 labels for en AU ===== Index: lams_tool_scratchie/conf/xdoclet/struts-actions.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/conf/xdoclet/struts-actions.xml,v diff -u -r1.20 -r1.20.2.1 --- lams_tool_scratchie/conf/xdoclet/struts-actions.xml 13 Jun 2014 18:50:12 -0000 1.20 +++ lams_tool_scratchie/conf/xdoclet/struts-actions.xml 13 Feb 2015 23:51:29 -0000 1.20.2.1 @@ -195,6 +195,23 @@ + + + + + + + + + + - + - Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java,v diff -u -r1.21.2.1 -r1.21.2.2 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java 30 Oct 2014 17:50:40 -0000 1.21.2.1 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java 13 Feb 2015 23:51:07 -0000 1.21.2.2 @@ -36,6 +36,8 @@ // for action forward name public static final String SUCCESS = "success"; + + public static final String NOTEBOOK = "notebook"; public static final String ERROR = "error"; @@ -67,6 +69,10 @@ public static final String ATTR_ITEM_LIST = "itemList"; + public static final String ATTR_BURNING_QUESTION_PREFIX = "burningQuestion"; + + public static final String ATTR_BURNING_QUESTIONS = "burningQuestions"; + public static final String ATTR_ITEM_ORDER_ID_PREFIX = "itemOrderId"; public static final String ATTR_ITEM_TITLE_PREFIX = "itemTitle"; @@ -130,14 +136,18 @@ public static final String ATTR_USER_FINISHED = "userFinished"; public static final String ATTR_IS_GROUPED_ACTIVITY = "isGroupedActivity"; - + public static final String ATTR_REFLECTION_ON = "reflectOn"; + public static final String ATTR_IS_BURNING_QUESTIONS_ENABLED = "isBurningQuestionsEnabled"; + public static final String ATTR_REFLECTION_INSTRUCTION = "reflectInstructions"; public static final String ATTR_REFLECTION_ENTRY = "reflectEntry"; public static final String ATTR_REFLECTIONS = "reflections"; + + public static final String ATTR_BURNING_QUESTIONS_DTOS = "burningQuestionDtos"; public static final String ATTR_USER_UID = "userUid"; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml,v diff -u -r1.16.2.3 -r1.16.2.4 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml 19 Oct 2014 08:35:24 -0000 1.16.2.3 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml 13 Feb 2015 23:52:29 -0000 1.16.2.4 @@ -28,6 +28,12 @@ + + + + + + @@ -66,6 +72,9 @@ + + + Fisheye: Tag 1.2.2.1 refers to a dead (removed) revision in file `lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieBurningQuestionDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.2.2.1 refers to a dead (removed) revision in file `lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieBurningQuestionDAOHibernate.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1.2.1 refers to a dead (removed) revision in file `lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20150206.sql'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1.2.1 refers to a dead (removed) revision in file `lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/BurningQuestionDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java,v diff -u -r1.9 -r1.9.2.1 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java 6 May 2014 13:26:33 -0000 1.9 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java 13 Feb 2015 23:51:06 -0000 1.9.2.1 @@ -69,6 +69,8 @@ private Set scratchieItems; private boolean extraPoint; + + private boolean burningQuestionsEnabled; private boolean reflectOnActivity; @@ -262,11 +264,11 @@ * * @return */ - public Set getScratchieItems() { + public Set getScratchieItems() { return scratchieItems; } - public void setScratchieItems(Set scratchieItems) { + public void setScratchieItems(Set scratchieItems) { this.scratchieItems = scratchieItems; } @@ -329,4 +331,16 @@ public void setExtraPoint(boolean extraPoint) { this.extraPoint = extraPoint; } + + /** + * @hibernate.property column="burning_questions_enabled" + * @return + */ + public boolean isBurningQuestionsEnabled() { + return burningQuestionsEnabled; + } + + public void setBurningQuestionsEnabled(boolean burningQuestionsEnabled) { + this.burningQuestionsEnabled = burningQuestionsEnabled; + } } Fisheye: Tag 1.1.2.1 refers to a dead (removed) revision in file `lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieBurningQuestion.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java,v diff -u -r1.6 -r1.6.2.1 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java 9 Oct 2013 16:11:44 -0000 1.6 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java 13 Feb 2015 23:51:06 -0000 1.6.2.1 @@ -64,6 +64,7 @@ private int userMark; private int userAttempts; private String firstChoiceAnswerLetter; + private String burningQuestion; /** * Default contruction method. @@ -232,4 +233,12 @@ public void setFirstChoiceAnswerLetter(String firstChoiceAnswerLetter) { this.firstChoiceAnswerLetter = firstChoiceAnswerLetter; } + + public String getBurningQuestion() { + return burningQuestion; + } + + public void setBurningQuestion(String burningQuestion) { + this.burningQuestion = burningQuestion; + } } 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.29 -r1.29.2.1 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java 13 Jun 2014 18:50:12 -0000 1.29 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java 13 Feb 2015 23:51:07 -0000 1.29.2.1 @@ -30,10 +30,12 @@ import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.notebook.model.NotebookEntry; +import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionDTO; import org.lamsfoundation.lams.tool.scratchie.dto.GroupSummary; import org.lamsfoundation.lams.tool.scratchie.dto.ReflectDTO; import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieAnswer; +import org.lamsfoundation.lams.tool.scratchie.model.ScratchieBurningQuestion; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieConfigItem; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieItem; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieSession; @@ -63,6 +65,17 @@ */ ScratchieUser checkLeaderSelectToolForSessionLeader(ScratchieUser user, Long toolSessionId); + List getBurningQuestionsBySession(Long sessionId); + + /** + * Save or update burningQuestion into database. + * + * @param sessionId + * @param itemUid + * @param question + */ + void saveBurningQuestion(Long sessionId, Long itemUid, String question); + ScratchieAnswer getScratchieAnswerByUid (Long answerUid); /** @@ -158,15 +171,24 @@ * @param 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 item item parameter is optional. In case it's provided - these item collection is used instead of quering DB */ - Set getItemsWithIndicatedScratches(Long toolSessionId); + Collection getItemsWithIndicatedScratches(Long toolSessionId); /** + * The same as getItemsWithIndicatedScratches(Long toolSessionId), but items are provided as parameter and not queried from DB. + * + * @param scratchieItemList + * @param item this item collection is used instead of quering DB + */ + Collection getItemsWithIndicatedScratches(Long toolSessionId, Collection items); + + /** * Leader has scratched the specified answer. Will store this scratch for all users in his group. It will also * update all the marks. */ @@ -202,6 +224,14 @@ List getQuestionSummary(Long contentId, Long itemUid); /** + * Get BurningQuestionDtos used for summary tab + * + * @param scratchie + * @return + */ + List getBurningQuestionDtos(Scratchie scratchie); + + /** * Export excel spreadheet * * @param scratchie Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java,v diff -u -r1.3 -r1.3.2.1 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java 6 May 2014 13:26:33 -0000 1.3 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java 13 Feb 2015 23:51:07 -0000 1.3.2.1 @@ -67,4 +67,11 @@ public void up20140102To20140505() { this.removeField(Scratchie.class, "contentInUse"); } + + /** + * Import 20140613 version content to 20150206 version tool server. + */ + public void up20140613To20150206() { + this.addField(Scratchie.class, "burningQuestionsEnabled", new Integer(1)); + } } 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.51.2.1 -r1.51.2.2 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java 30 Oct 2014 17:50:10 -0000 1.51.2.1 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java 13 Feb 2015 23:51:07 -0000 1.51.2.2 @@ -64,16 +64,19 @@ import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.scratchie.ScratchieConstants; import org.lamsfoundation.lams.tool.scratchie.dao.ScratchieAnswerVisitDAO; +import org.lamsfoundation.lams.tool.scratchie.dao.ScratchieBurningQuestionDAO; import org.lamsfoundation.lams.tool.scratchie.dao.ScratchieConfigItemDAO; import org.lamsfoundation.lams.tool.scratchie.dao.ScratchieDAO; import org.lamsfoundation.lams.tool.scratchie.dao.ScratchieItemDAO; import org.lamsfoundation.lams.tool.scratchie.dao.ScratchieSessionDAO; import org.lamsfoundation.lams.tool.scratchie.dao.ScratchieUserDAO; +import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionDTO; import org.lamsfoundation.lams.tool.scratchie.dto.GroupSummary; import org.lamsfoundation.lams.tool.scratchie.dto.ReflectDTO; import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieAnswer; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieAnswerVisitLog; +import org.lamsfoundation.lams.tool.scratchie.model.ScratchieBurningQuestion; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieConfigItem; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieItem; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieSession; @@ -108,6 +111,8 @@ private ScratchieAnswerVisitDAO scratchieAnswerVisitDao; + private ScratchieBurningQuestionDAO scratchieBurningQuestionDao; + private ScratchieConfigItemDAO scratchieConfigItemDao; // tool service @@ -416,7 +421,31 @@ } } + + @Override + public List getBurningQuestionsBySession(Long sessionId) { + return scratchieBurningQuestionDao.getBurningQuestionsBySession(sessionId); + } + + @Override + public void saveBurningQuestion(Long sessionId, Long itemUid, String question) { + + ScratchieBurningQuestion burningQuestion = scratchieBurningQuestionDao.getBurningQuestionBySessionAndItem(sessionId, itemUid); + + if (burningQuestion == null) { + burningQuestion = new ScratchieBurningQuestion(); + ScratchieItem item = scratchieItemDao.getByUid(itemUid); + burningQuestion.setScratchieItem(item); + burningQuestion.setSessionId(sessionId); + burningQuestion.setAccessDate(new Date()); + } + burningQuestion.setQuestion(question); + scratchieBurningQuestionDao.saveObject(burningQuestion); + } + + + @Override public ScratchieAnswer getScratchieAnswerByUid(Long answerUid) { ScratchieAnswer res = (ScratchieAnswer) userManagementService.findById(ScratchieAnswer.class, answerUid); @@ -531,13 +560,19 @@ } @Override - public Set getItemsWithIndicatedScratches(Long toolSessionId) { - List userLogs = scratchieAnswerVisitDao.getLogsBySession(toolSessionId); + public Collection getItemsWithIndicatedScratches(Long toolSessionId) { Scratchie scratchie = this.getScratchieBySessionId(toolSessionId); Set items = new TreeSet(new ScratchieItemComparator()); items.addAll(scratchie.getScratchieItems()); + return getItemsWithIndicatedScratches(toolSessionId, items); + } + + @Override + public Collection getItemsWithIndicatedScratches(Long toolSessionId, Collection items) { + List userLogs = scratchieAnswerVisitDao.getLogsBySession(toolSessionId); + for (ScratchieItem item : items) { for (ScratchieAnswer answer : (Set) item.getAnswers()) { @@ -560,6 +595,7 @@ boolean isItemUnraveled = this.isItemUnraveled(item, userLogs); item.setUnraveled(isItemUnraveled); } + return items; } @@ -722,7 +758,48 @@ return groupSummaryList; } + + @Override + public List getBurningQuestionDtos(Scratchie scratchie) { + + Set items = new TreeSet(new ScratchieItemComparator()); + items.addAll(scratchie.getScratchieItems()); + // get all available leaders associated with this content as only leaders have reflections + List sessionList = scratchieSessionDao.getByContentId(scratchie.getContentId()); + + List burningQuestionDtos = new LinkedList(); + for (ScratchieItem item : items) { + BurningQuestionDTO burningQuestionDTO = new BurningQuestionDTO(); + burningQuestionDTO.setItem(item); + + List burningQuestions = scratchieBurningQuestionDao + .getBurningQuestionsByItemUid(item.getUid()); + + Map groupNameToBurningQuestion = new LinkedHashMap(); + for (ScratchieBurningQuestion burningQuestion : burningQuestions) { + + //find corresponding session + ScratchieSession session = null; + for (ScratchieSession sessionIter : sessionList) { + if (burningQuestion.getSessionId().equals(sessionIter.getSessionId())) { + session = sessionIter; + break; + } + } + + String groupName = StringEscapeUtils.escapeJavaScript(session.getSessionName()); + String burningQuestionText = StringEscapeUtils.escapeJavaScript(burningQuestion.getQuestion()); + groupNameToBurningQuestion.put(groupName, burningQuestionText); + } + burningQuestionDTO.setGroupNameToBurningQuestion(groupNameToBurningQuestion); + + burningQuestionDtos.add(burningQuestionDTO); + } + + return burningQuestionDtos; + } + @Override public List getReflectionList(Long contentId) { ArrayList reflections = new ArrayList(); @@ -1492,6 +1569,10 @@ this.scratchieAnswerVisitDao = scratchieItemVisitDao; } + public void setScratchieBurningQuestionDao(ScratchieBurningQuestionDAO scratchieBurningQuestionDao) { + this.scratchieBurningQuestionDao = scratchieBurningQuestionDao; + } + public void setScratchieConfigItemDao(ScratchieConfigItemDAO scratchieConfigItemDao) { this.scratchieConfigItemDao = scratchieConfigItemDao; } 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.44.2.1 -r1.44.2.2 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java 30 Oct 2014 17:50:40 -0000 1.44.2.1 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java 13 Feb 2015 23:51:06 -0000 1.44.2.2 @@ -41,6 +41,7 @@ import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; import org.apache.struts.action.Action; @@ -59,6 +60,7 @@ import org.lamsfoundation.lams.tool.scratchie.dto.ReflectDTO; import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieAnswer; +import org.lamsfoundation.lams.tool.scratchie.model.ScratchieBurningQuestion; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieItem; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieSession; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieUser; @@ -107,6 +109,12 @@ if (param.equals("finish")) { return finish(mapping, form, request, response); } + if (param.equals("showBurningQuestions")) { + return showBurningQuestions(mapping, form, request, response); + } + if (param.equals("saveBurningQuestions")) { + return saveBurningQuestions(mapping, form, request, response); + } if (param.equals("showResults")) { return showResults(mapping, form, request, response); } @@ -187,7 +195,7 @@ notebookEntry = LearningAction.service.getEntry(toolSessionId, CoreNotebookConstants.NOTEBOOK_TOOL, ScratchieConstants.TOOL_SIGNATURE, groupLeader.getUserId().intValue()); } - String entryText = (notebookEntry == null) ? new String() : notebookEntry.getEntry(); + String entryText = (notebookEntry == null) ? null : notebookEntry.getEntry(); // basic information sessionMap.put(ScratchieConstants.ATTR_TITLE, scratchie.getTitle()); @@ -202,6 +210,7 @@ sessionMap.put(ScratchieConstants.ATTR_USER_FINISHED, isUserFinished); sessionMap.put(AttributeNames.PARAM_TOOL_SESSION_ID, toolSessionId); sessionMap.put(AttributeNames.ATTR_MODE, mode); + sessionMap.put(ScratchieConstants.ATTR_IS_BURNING_QUESTIONS_ENABLED, scratchie.isBurningQuestionsEnabled()); // reflection information sessionMap.put(ScratchieConstants.ATTR_REFLECTION_ON, isReflectOnActivity); sessionMap.put(ScratchieConstants.ATTR_REFLECTION_INSTRUCTION, scratchie.getReflectInstructions()); @@ -252,6 +261,26 @@ LearningAction.service.getScratchesOrder(items, toolSessionId); } + // populate items with the existing burning questions for displaying purposes + List burningQuestions = null; + if (scratchie.isBurningQuestionsEnabled()) { + + burningQuestions = LearningAction.service + .getBurningQuestionsBySession(toolSessionId); + for (ScratchieItem item : items) { + + // find corresponding burningQuestion + String question = ""; + for (ScratchieBurningQuestion burningQuestion : burningQuestions) { + if (burningQuestion.getScratchieItem().getUid().equals(item.getUid())) { + question = burningQuestion.getQuestion(); + break; + } + } + item.setBurningQuestion(question); + } + } + // calculate max score int maxScore = items.size() * 4; if (scratchie.isExtraPoint()) { @@ -283,6 +312,11 @@ //show learning.jsp page } else { + + //make non leaders also wait for burning questions submit + isWaitingForLeaderToSubmitNotebook |= scratchie.isBurningQuestionsEnabled() + && (burningQuestions == null || burningQuestions.isEmpty()); + sessionMap.put(ScratchieConstants.ATTR_IS_SCRATCHING_FINISHED, (Boolean) isScratchingFinished); sessionMap.put(ScratchieConstants.ATTR_IS_WAITING_FOR_LEADER_TO_SUBMIT_NOTEBOOK, (Boolean) isWaitingForLeaderToSubmitNotebook); @@ -307,7 +341,7 @@ ScratchieSession toolSession = LearningAction.service.getScratchieSessionBySessionId(toolSessionId); // set scratched flag for display purpose - Set items = LearningAction.service.getItemsWithIndicatedScratches(toolSessionId); + Collection items = LearningAction.service.getItemsWithIndicatedScratches(toolSessionId); sessionMap.put(ScratchieConstants.ATTR_ITEM_LIST, items); // refresh leadership status @@ -333,6 +367,7 @@ SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( sessionMapID); boolean isReflectOnActivity = (Boolean) sessionMap.get(ScratchieConstants.ATTR_REFLECTION_ON); + boolean isBurningQuestionsEnabled = (Boolean) sessionMap.get(ScratchieConstants.ATTR_IS_BURNING_QUESTIONS_ENABLED); Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); ScratchieSession toolSession = service.getScratchieSessionBySessionId(toolSessionId); @@ -345,6 +380,14 @@ ScratchieConstants.TOOL_SIGNATURE, groupLeader.getUserId().intValue()); } boolean isWaitingForLeaderToSubmitNotebook = isReflectOnActivity && (notebookEntry == null); + + // make non leaders also wait for burning questions submit + List burningQuestions = null; + if (isBurningQuestionsEnabled) { + burningQuestions = LearningAction.service.getBurningQuestionsBySession(toolSessionId); + } + isWaitingForLeaderToSubmitNotebook |= isBurningQuestionsEnabled + && (burningQuestions == null || burningQuestions.isEmpty()); JSONObject JSONObject = new JSONObject(); JSONObject.put(ScratchieConstants.ATTR_IS_WAITING_FOR_LEADER_TO_SUBMIT_NOTEBOOK, isWaitingForLeaderToSubmitNotebook); @@ -458,7 +501,7 @@ double percentage = (maxScore == 0) ? 0 : ((score * 100) / maxScore); request.setAttribute(ScratchieConstants.ATTR_SCORE, (int) percentage); - // Create reflectList if reflection is enabled. + // display other groups' notebooks if (isReflectOnActivity) { List reflections = LearningAction.service.getReflectionList(toolSession.getScratchie() .getContentId()); @@ -481,6 +524,7 @@ request.setAttribute(ScratchieConstants.ATTR_REFLECTIONS, reflections); } + return mapping.findForward(ScratchieConstants.SUCCESS); } @@ -521,8 +565,112 @@ } return mapping.findForward(ScratchieConstants.SUCCESS); } + + /** + * Displays burning questions page. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws ScratchieApplicationException + */ + private ActionForward showBurningQuestions(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws ScratchieApplicationException { + initializeScratchieService(); + String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + request.setAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMapID); + final Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + Long userUid = (Long) sessionMap.get(ScratchieConstants.ATTR_USER_UID); + + // set scratched flag for display purpose + Collection items = (Collection) sessionMap.get(ScratchieConstants.ATTR_ITEM_LIST); + LearningAction.service.getItemsWithIndicatedScratches(toolSessionId, items); + // in case of the leader we should let all other learners see Next Activity button + ScratchieSession toolSession = LearningAction.service.getScratchieSessionBySessionId(toolSessionId); + if (toolSession.isUserGroupLeader(userUid) && !toolSession.isScratchingFinished()) { + tryExecute(new Callable() { + @Override + public Object call() throws ScratchieApplicationException { + LearningAction.service.setScratchingFinished(toolSessionId); + return null; + } + }); + } + + return mapping.findForward(ScratchieConstants.SUCCESS); + } + /** + * Submit reflection form input database. Only leaders can submit reflections. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws ScratchieApplicationException + */ + private ActionForward saveBurningQuestions(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws ScratchieApplicationException { + initializeScratchieService(); + + String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute( + sessionMapID); + Scratchie scratchie = (Scratchie) sessionMap.get(ScratchieConstants.ATTR_SCRATCHIE); + final Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + Collection items = (Collection) sessionMap.get(ScratchieConstants.ATTR_ITEM_LIST); + + for (int i = 0; i < items.size(); i++) { + final Long itemUid = WebUtil.readLongParam(request, ScratchieConstants.ATTR_ITEM_UID + i); + ScratchieItem item = null; + for (ScratchieItem itemIter : items) { + if (itemIter.getUid().equals(itemUid)) { + item = itemIter; + break; + } + } + + final String question = request.getParameter(ScratchieConstants.ATTR_BURNING_QUESTION_PREFIX + i); + //question = question.replaceAll("[\n\r\f]", ""); + + //if burning question is not blank save it + if (StringUtils.isNotBlank(question)) { + + //skip updating if the value wasn't changed + if (item.getBurningQuestion() != null && item.getBurningQuestion().equals(question)) { + continue; + } + + // update new entry + tryExecute(new Callable() { + @Override + public Object call() throws ScratchieApplicationException { + LearningAction.service.saveBurningQuestion(sessionId, itemUid, question); + return null; + } + }); + + //update question in sessionMap + item.setBurningQuestion(question); + } + + } + + boolean isNotebookSubmitted = sessionMap.get(ScratchieConstants.ATTR_REFLECTION_ENTRY) != null; + if (scratchie.isReflectOnActivity() && !isNotebookSubmitted) { + return newReflection(mapping, form, request, response); + } else { + return showResults(mapping, form, request, response); + } + + } + + /** * Display empty reflection form. * * @param mapping @@ -569,7 +717,7 @@ }); } - return mapping.findForward(ScratchieConstants.SUCCESS); + return mapping.findForward(ScratchieConstants.NOTEBOOK); } /** Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java,v diff -u -r1.21 -r1.21.2.1 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java 6 May 2014 13:26:33 -0000 1.21 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java 13 Feb 2015 23:51:06 -0000 1.21.2.1 @@ -45,6 +45,7 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.tool.scratchie.ScratchieConstants; +import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionDTO; import org.lamsfoundation.lams.tool.scratchie.dto.GroupSummary; import org.lamsfoundation.lams.tool.scratchie.dto.ReflectDTO; import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; @@ -130,6 +131,12 @@ sessionMap.put(AttributeNames.PARAM_CONTENT_FOLDER_ID, WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID)); sessionMap.put(ScratchieConstants.ATTR_REFLECTION_ON, scratchie.isReflectOnActivity()); + + // Create BurningQuestionsDtos if BurningQuestions is enabled. + if (scratchie.isBurningQuestionsEnabled()) { + List burningQuestionDtos = service.getBurningQuestionDtos(scratchie); + sessionMap.put(ScratchieConstants.ATTR_BURNING_QUESTIONS_DTOS, burningQuestionDtos); + } // Create reflectList if reflection is enabled. if (scratchie.isReflectOnActivity()) { Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/form/ScratchieForm.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/form/ScratchieForm.java,v diff -u -r1.5 -r1.5.2.1 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/form/ScratchieForm.java 17 Jan 2014 22:12:29 -0000 1.5 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/form/ScratchieForm.java 13 Feb 2015 23:51:07 -0000 1.5.2.1 @@ -32,7 +32,6 @@ import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; /** - * * Scratchie Form. * * @struts.form name="scratchieForm" @@ -72,6 +71,7 @@ scratchie.setDefineLater(false); scratchie.setReflectOnActivity(false); scratchie.setExtraPoint(false); + scratchie.setBurningQuestionsEnabled(false); } } 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.9 -r1.9.2.1 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/ExportServlet.java 6 May 2014 13:26:33 -0000 1.9 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/ExportServlet.java 13 Feb 2015 23:51:07 -0000 1.9.2.1 @@ -25,6 +25,7 @@ package org.lamsfoundation.lams.tool.scratchie.web.servlet; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Set; @@ -134,7 +135,7 @@ } // set complete flag for display purpose - Set items = service.getItemsWithIndicatedScratches(toolSessionID); + Collection 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/web/pages/authoring/advance.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/web/pages/authoring/advance.jsp,v diff -u -r1.6 -r1.6.2.1 --- lams_tool_scratchie/web/pages/authoring/advance.jsp 16 Jun 2014 14:29:08 -0000 1.6 +++ lams_tool_scratchie/web/pages/authoring/advance.jsp 13 Feb 2015 23:51:29 -0000 1.6.2.1 @@ -15,6 +15,13 @@

+ + +

+ +

-
+ +

+
- - - - + +
- - - - - - - - - - - - - - - - + + + + + +
+ + ${answer.attemptOrder} + +
+
+ - - - -
+ + + + + + + + + + + + + + + + - -
- - ${answer.attemptOrder} - -
-
-
- ${answer.description} -
- +
+ ${answer.description} +
+ +
- <%-- show reflection (only for teacher) --%> - -
-

+<%-- show reflection (only for teacher) --%> + +
+

+

+ +

+ + +

- + +

+
+ +

+ +

+
+
+
+
- - -

- - -

-
- -

- -

-
-
-
-
-
+ + + + + - + - - + + Index: lams_tool_scratchie/web/pages/learning/results.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/web/pages/learning/results.jsp,v diff -u -r1.13 -r1.13.2.1 --- lams_tool_scratchie/web/pages/learning/results.jsp 6 Jun 2014 20:05:49 -0000 1.13 +++ lams_tool_scratchie/web/pages/learning/results.jsp 13 Feb 2015 23:51:29 -0000 1.13.2.1 @@ -83,6 +83,9 @@ function continueReflect(){ document.location.href=''; } + function editBurningQuestions(){ + document.location.href=''; + } @@ -112,7 +115,39 @@ ${score}% + + +
+

:

+ + + + + + + +
+ + + + + - + + + + + +
+
+ + + + + +
+
+

:

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.14 -r1.14.2.1 --- lams_tool_scratchie/web/pages/monitoring/summary.jsp 1 Apr 2014 02:28:49 -0000 1.14 +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp 13 Feb 2015 23:51:29 -0000 1.14.2.1 @@ -14,6 +14,11 @@ vertical-align:text-top; padding-top:2px; } + .burning-question-dto { + padding-left: 30px; + padding-bottom: 5px; + width:96%; + }

-
- +
+
+
+
@@ -264,11 +300,26 @@
- + + +
+

+ +

+
+ + +
+
+
+
+
+ + -
+

@@ -284,7 +335,6 @@
-
Index: lams_tool_scratchie/web/pages/monitoring/parts/advanceOptions.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/web/pages/monitoring/parts/advanceOptions.jsp,v diff -u -r1.5 -r1.5.2.1 --- lams_tool_scratchie/web/pages/monitoring/parts/advanceOptions.jsp 1 Apr 2014 02:28:49 -0000 1.5 +++ lams_tool_scratchie/web/pages/monitoring/parts/advanceOptions.jsp 13 Feb 2015 23:51:29 -0000 1.5.2.1 @@ -19,7 +19,7 @@ - + @@ -31,12 +31,29 @@ + + + + + + + + + + + + + + + + + - + @@ -47,7 +64,7 @@ - +