Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/AuthoringController.java =================================================================== diff -u -re8a7110708b15579af2c6b31ac52a6da427fef6d -rce7aa1c5bb84d5bfa1be87f72fc20c6d6d111baf --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/AuthoringController.java (.../AuthoringController.java) (revision e8a7110708b15579af2c6b31ac52a6da427fef6d) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/AuthoringController.java (.../AuthoringController.java) (revision ce7aa1c5bb84d5bfa1be87f72fc20c6d6d111baf) @@ -32,7 +32,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -41,7 +40,6 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.math.NumberUtils; @@ -62,13 +60,11 @@ import org.lamsfoundation.lams.tool.scratchie.util.ScratchieItemComparator; import org.lamsfoundation.lams.tool.scratchie.web.form.ScratchieForm; import org.lamsfoundation.lams.tool.scratchie.web.form.ScratchiePedagogicalPlannerForm; -import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.CommonConstants; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; -import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.lamsfoundation.lams.web.util.SessionMap; import org.springframework.beans.factory.annotation.Autowired; @@ -132,7 +128,7 @@ String contentFolderID = WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID); sessionMap.put(AttributeNames.PARAM_CONTENT_FOLDER_ID, contentFolderID); authoringForm.setContentFolderID(contentFolderID); - + // save toolContentID into HTTPSession Long contentId = WebUtil.readLongParam(request, ScratchieConstants.PARAM_TOOL_CONTENT_ID); sessionMap.put(ScratchieConstants.PARAM_TOOL_CONTENT_ID, contentId); @@ -229,7 +225,8 @@ Scratchie scratchiePO = scratchieService.getScratchieByContentId(authoringForm.getScratchie().getContentId()); //allow using old and modified questions together - Set oldItems = (scratchiePO == null) ? new HashSet<>() : scratchiePO.getScratchieItems(); + Set oldItems = (scratchiePO == null) ? new HashSet<>() + : new HashSet<>(scratchiePO.getScratchieItems()); if (scratchiePO == null) { // new Scratchie, create it. @@ -331,8 +328,7 @@ * Display edit page for existed scratchie item. */ @RequestMapping("/editItem") - private String editItem(@ModelAttribute("scratchieItemForm") QbQuestionForm form, - HttpServletRequest request) { + private String editItem(@ModelAttribute("scratchieItemForm") QbQuestionForm form, HttpServletRequest request) { // get back sessionMAP SessionMap sessionMap = getSessionMap(request); @@ -361,13 +357,12 @@ form.setSessionMapID(sessionMap.getSessionID()); QbUtils.fillFormWithUserCollections(qbService, form, qbQuestion.getUid()); - + form.setContentFolderID(qbQuestion.getContentFolderId()); request.setAttribute(AttributeNames.PARAM_CONTENT_FOLDER_ID, qbQuestion.getContentFolderId()); - return isMcqQuestionType ? "pages/authoring/parts/addMcq" - : "pages/authoring/parts/addVsa"; + return isMcqQuestionType ? "pages/authoring/parts/addMcq" : "pages/authoring/parts/addVsa"; } - + /** * QB callback handler which adds selected QbQuestion into question list. */ @@ -378,9 +373,9 @@ SessionMap sessionMap = (SessionMap) request.getSession() .getAttribute(sessionMapID); SortedSet itemList = getItemList(sessionMap); - + QbQuestion qbQuestion = qbService.getQuestionByUid(qbQuestionUid); - + //create new ScratchieItem and assign imported qbQuestion to it ScratchieItem item = new ScratchieItem(); item.setQbQuestion(qbQuestion); @@ -404,13 +399,12 @@ * persisted. */ @RequestMapping(value = "/saveItem", method = RequestMethod.POST) - private String saveItem(@ModelAttribute("scratchieItemForm") QbQuestionForm form, - HttpServletRequest request) { + private String saveItem(@ModelAttribute("scratchieItemForm") QbQuestionForm form, HttpServletRequest request) { SessionMap sessionMap = (SessionMap) request.getSession() .getAttribute(form.getSessionMapID()); SortedSet itemList = getItemList(sessionMap); int itemIdx = NumberUtils.toInt(form.getItemIndex(), -1); - + // check whether it is "edit(old Question)" or "add(new Question)" QbQuestion qbQuestion; ScratchieItem item; @@ -420,7 +414,7 @@ qbQuestion.setType(form.getQuestionType()); qbQuestion.setMaxMark(1); qbQuestion.setPenaltyFactor(0); - + item = new ScratchieItem(); int maxSeq = 1; if (itemList != null && itemList.size() > 0) { @@ -429,9 +423,9 @@ } item.setDisplayOrder(maxSeq); itemList.add(item); - - // edit - } else { + + // edit + } else { List rList = new ArrayList<>(itemList); item = rList.get(itemIdx); qbQuestion = qbService.getQuestionByUid(item.getQbQuestion().getUid()); @@ -446,7 +440,7 @@ qbQuestion.setName(form.getTitle().strip()); qbQuestion.setDescription(form.getDescription().strip()); qbQuestion.setContentFolderId(form.getContentFolderID()); - + boolean isMcqQuestionType = qbQuestion.getType() == QbQuestion.TYPE_MULTIPLE_CHOICE; //handle VSA question type if (!isMcqQuestionType) { @@ -485,12 +479,12 @@ // save the old question anyway, as it may contain some minor changes (like title or description change) updatedQuestion = qbQuestion; } - break; + break; } userManagementService.save(updatedQuestion); item.setQbQuestion(updatedQuestion); request.setAttribute("qbQuestionModified", isQbQuestionModified); - + //take care about question's collections. add to collection first Long oldCollectionUid = form.getOldCollectionUid(); Long newCollectionUid = form.getNewCollectionUid(); @@ -499,7 +493,8 @@ } //remove from the old collection, if needed if (!isAddingQuestion && !newCollectionUid.equals(oldCollectionUid)) { - qbService.removeQuestionFromCollectionByQuestionId(oldCollectionUid, updatedQuestion.getQuestionId(), false); + qbService.removeQuestionFromCollectionByQuestionId(oldCollectionUid, updatedQuestion.getQuestionId(), + false); } // set session map ID so that itemlist.jsp can get sessionMAP @@ -783,7 +778,8 @@ * whether the blank options will be preserved or not * */ - private TreeSet getOptionsFromRequest(HttpServletRequest request, boolean isMcqQuestion, boolean isForSaving) { + private TreeSet getOptionsFromRequest(HttpServletRequest request, boolean isMcqQuestion, + boolean isForSaving) { Map paramMap = splitRequestParameter(request, QbConstants.ATTR_OPTION_LIST); Integer correctOptionIndex = (paramMap.get(QbConstants.ATTR_OPTION_CORRECT) == null) ? null : NumberUtils.toInt(paramMap.get(QbConstants.ATTR_OPTION_CORRECT)); @@ -813,7 +809,7 @@ if ((correctOptionIndex != null) && correctOptionIndex.equals(displayOrder) && isMcqQuestion) { option.setCorrect(true); } - + //handle VSA question type if (!isMcqQuestion) { float maxMark = i == 0 ? 1 : 0; @@ -822,7 +818,7 @@ String feedback = paramMap.get(QbConstants.ATTR_OPTION_FEEDBACK_PREFIX + i); option.setFeedback(feedback); } - + optionList.add(option); } @@ -859,7 +855,7 @@ } return paramMap; } - + @SuppressWarnings("unchecked") private SessionMap getSessionMap(HttpServletRequest request) { String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID);