Index: lams_tool_scratchie/conf/xdoclet/struts-actions.xml =================================================================== diff -u -r0cf1ce0d39dab80bbb0e11968010c727f5e002e4 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 0cf1ce0d39dab80bbb0e11968010c727f5e002e4) +++ lams_tool_scratchie/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -14,7 +14,6 @@ scope="request" parameter="definelater" validate="false"> - - - getAuthoringItems(Long scratchieUid); ScratchieItem getByUid(Long scratchieItemUid); + + void releaseItemFromCache(ScratchieItem item); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieItemDAOHibernate.java =================================================================== diff -u -r6aaee4b2fe2caa08b0c63a0de11f05042d5a3e18 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieItemDAOHibernate.java (.../ScratchieItemDAOHibernate.java) (revision 6aaee4b2fe2caa08b0c63a0de11f05042d5a3e18) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieItemDAOHibernate.java (.../ScratchieItemDAOHibernate.java) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -33,13 +33,19 @@ private static final String FIND_AUTHORING_ITEMS = "from " + ScratchieItem.class.getName() + " where scratchie_uid = ? order by create_date asc"; - public List getAuthoringItems(Long scratchieUid) { - + @Override + public List getAuthoringItems(Long scratchieUid) { return this.getHibernateTemplate().find(FIND_AUTHORING_ITEMS, scratchieUid); } + @Override public ScratchieItem getByUid(Long scratchieItemUid) { return (ScratchieItem) this.getObject(ScratchieItem.class, scratchieItemUid); } + @Override + public void releaseItemFromCache(ScratchieItem item) { + getHibernateTemplate().evict(item); + } + } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20140505.sql =================================================================== diff -u --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20140505.sql (revision 0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20140505.sql (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -0,0 +1,16 @@ +-- 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------------------------- + +-- LDEV-3224 Ability to change, add, remove questions even after student have reached it +ALTER TABLE tl_lascrt11_scratchie DROP COLUMN content_in_use; + +UPDATE lams_tool SET tool_version='20140505' WHERE tool_signature='lascrt11'; + +----------------------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/model/Scratchie.java =================================================================== diff -u -rbe07c35c372d904a65581d98660e73f3b13b69db -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision be07c35c372d904a65581d98660e73f3b13b69db) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -58,8 +58,6 @@ private boolean defineLater; - private boolean contentInUse; - // general infomation private Date created; @@ -273,18 +271,6 @@ } /** - * @hibernate.property column="content_in_use" - * @return - */ - public boolean isContentInUse() { - return contentInUse; - } - - public void setContentInUse(boolean contentInUse) { - this.contentInUse = contentInUse; - } - - /** * @hibernate.property column="define_later" * @return */ Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml =================================================================== diff -u -rbe07c35c372d904a65581d98660e73f3b13b69db -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml (.../scratchieApplicationContext.xml) (revision be07c35c372d904a65581d98660e73f3b13b69db) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/scratchieApplicationContext.xml (.../scratchieApplicationContext.xml) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -101,7 +101,7 @@ - PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -r2163a3c910ea266fc01ec2ac9d0ea7e069b5da30 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 2163a3c910ea266fc01ec2ac9d0ea7e069b5da30) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -281,4 +281,16 @@ Set getAllLeaders(Long contentId); void changeUserMark(Long userId, Long userUid, Integer newMark); + + /** + * Recalculate marks after editing content from monitoring. + * + * @param scratchie + * @param oldItems + * @param newItems + */ + void recalculateUserAnswers(Scratchie scratchie, Set oldItems, Set newItems, + List deletedItems); + + void releaseItemsFromCache(Scratchie scratchie); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java =================================================================== diff -u -rbe07c35c372d904a65581d98660e73f3b13b69db -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java (.../ScratchieImportContentVersionFilter.java) (revision be07c35c372d904a65581d98660e73f3b13b69db) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieImportContentVersionFilter.java (.../ScratchieImportContentVersionFilter.java) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -60,4 +60,11 @@ this.removeField(Scratchie.class, "offlineInstructions"); this.removeField(Scratchie.class, "attachments"); } + + /** + * Import 20131212 version content to 20140102 version tool server. + */ + public void up20140102To20140505() { + this.removeField(Scratchie.class, "contentInUse"); + } } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r5b6e51b5d96619f619209830fdab0ed1ef572c05 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 5b6e51b5d96619f619209830fdab0ed1ef572c05) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -23,8 +23,6 @@ /* $$Id$$ */ package org.lamsfoundation.lams.tool.scratchie.service; -import java.io.FileNotFoundException; -import java.io.IOException; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -42,26 +40,14 @@ import java.util.SortedMap; import java.util.TreeSet; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.poi.ss.usermodel.IndexedColors; -import org.hibernate.Hibernate; -import org.hibernate.proxy.HibernateProxy; -import org.lamsfoundation.lams.contentrepository.AccessDeniedException; -import org.lamsfoundation.lams.contentrepository.ICredentials; -import org.lamsfoundation.lams.contentrepository.ITicket; -import org.lamsfoundation.lams.contentrepository.LoginException; -import org.lamsfoundation.lams.contentrepository.WorkspaceNotFoundException; -import org.lamsfoundation.lams.contentrepository.service.IRepositoryService; -import org.lamsfoundation.lams.contentrepository.service.SimpleCredentials; import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.learning.service.ILearnerService; -import org.lamsfoundation.lams.learningdesign.Activity; -import org.lamsfoundation.lams.learningdesign.ToolActivity; -import org.lamsfoundation.lams.learningdesign.Transition; -import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException; @@ -72,7 +58,6 @@ import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; -import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; import org.lamsfoundation.lams.tool.exception.DataMissingException; @@ -95,7 +80,6 @@ import org.lamsfoundation.lams.tool.scratchie.util.ScratchieAnswerComparator; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieItemComparator; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieToolContentHandler; -import org.lamsfoundation.lams.tool.service.ILamsCoreToolService; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -105,7 +89,6 @@ import org.lamsfoundation.lams.util.audit.IAuditService; /** - * * @author Andrey Balan */ public class ScratchieServiceImpl implements IScratchieService, ToolContentManager, ToolSessionManager, @@ -178,8 +161,8 @@ } @Override - public List getAuthoredItems(Long scratchieUid) { - List res = scratchieItemDao.getAuthoringItems(scratchieUid); + public List getAuthoredItems(Long scratchieUid) { + List res = scratchieItemDao.getAuthoringItems(scratchieUid); return res; } @@ -198,6 +181,13 @@ public void saveOrUpdateScratchie(Scratchie scratchie) { scratchieDao.saveObject(scratchie); } + + @Override + public void releaseItemsFromCache(Scratchie scratchie) { + for (ScratchieItem item : (Set)scratchie.getScratchieItems()) { + scratchieItemDao.releaseItemFromCache(item); + } + } @Override public void deleteScratchieItem(Long uid) { @@ -331,7 +321,88 @@ } } } + + @Override + public void recalculateUserAnswers(Scratchie scratchie, Set oldItems, Set newItems, + List deletedItems) { + //create list of modified questions + List modifiedItems = new ArrayList(); + for (ScratchieItem oldItem : oldItems) { + for (ScratchieItem newItem : newItems) { + if (oldItem.getUid().equals(newItem.getUid())) { + + boolean isItemModified = false; + + //title or description is different + if (!oldItem.getTitle().equals(newItem.getTitle()) + || !oldItem.getDescription().equals(newItem.getDescription())) { + isItemModified = true; + } + + //options are different + Set oldAnswers = oldItem.getAnswers(); + Set newAnswers = newItem.getAnswers(); + for (ScratchieAnswer oldAnswer : oldAnswers) { + for (ScratchieAnswer newAnswer : newAnswers) { + if (oldAnswer.getUid().equals(newAnswer.getUid())) { + + if (!StringUtils.equals(oldAnswer.getDescription(), newAnswer.getDescription()) + || (oldAnswer.isCorrect() != newAnswer.isCorrect())) { + isItemModified = true; + } + } + } + } + + if (isItemModified) { + modifiedItems.add(newItem); + } + } + } + } + + List sessionList = scratchieSessionDao.getByContentId(scratchie.getContentId()); + for (ScratchieSession session : sessionList) { + Long toolSessionId = session.getSessionId(); + List visitLogsToDelete = new ArrayList(); + boolean isRecalculateMarks = false; + + // remove all scratches for modified and removed items + + // [+] if the item was removed + for (ScratchieItem deletedItem : deletedItems) { + List visitLogs = scratchieAnswerVisitDao.getLogsBySessionAndItem( + toolSessionId, deletedItem.getUid()); + visitLogsToDelete.addAll(visitLogs); + } + + // [+] if the question is modified + for (ScratchieItem modifiedItem : modifiedItems) { + List visitLogs = scratchieAnswerVisitDao.getLogsBySessionAndItem( + toolSessionId, modifiedItem.getUid()); + visitLogsToDelete.addAll(visitLogs); + } + + //remove all visit logs marked for deletion + Iterator iter = visitLogsToDelete.iterator(); + while (iter.hasNext()) { + ScratchieAnswerVisitLog visitLogToDelete = iter.next(); + iter.remove(); + scratchieAnswerVisitDao.removeObject(ScratchieAnswerVisitLog.class, visitLogToDelete.getUid()); + isRecalculateMarks = true; + } + + // [+] doing nothing if the new question was added + + // recalculate marks if it's required + if (isRecalculateMarks) { + recalculateMarkForSession(toolSessionId, true); + } + } + + } + @Override public ScratchieAnswer getScratchieAnswerByUid(Long answerUid) { ScratchieAnswer res = (ScratchieAnswer) userManagementService.findById(ScratchieAnswer.class, answerUid); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/AuthoringAction.java =================================================================== diff -u -rcc1b2b3fdc49088abf515c55bc8533c762e95412 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision cc1b2b3fdc49088abf515c55bc8533c762e95412) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; @@ -42,7 +43,6 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.StringUtils; @@ -70,9 +70,7 @@ import org.lamsfoundation.lams.tool.scratchie.web.form.ScratchieForm; import org.lamsfoundation.lams.tool.scratchie.web.form.ScratchieItemForm; import org.lamsfoundation.lams.tool.scratchie.web.form.ScratchiePedagogicalPlannerForm; -import org.lamsfoundation.lams.usermanagement.dto.UserDTO; 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.web.context.WebApplicationContext; @@ -192,7 +190,7 @@ ScratchieForm scratchieForm = (ScratchieForm) form; // initial Session Map - SessionMap sessionMap = new SessionMap(); + SessionMap sessionMap = new SessionMap(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); scratchieForm.setSessionMapID(sessionMap.getSessionID()); @@ -225,9 +223,6 @@ if (items == null) { items = new ArrayList(); } else { - ScratchieUser scratchieUser = null; - // handle system default question: createBy is null, now set it to - // current user for (ScratchieItem item : items) { // sort answers by order id. it's needed only for the default answers. rest could be skipped @@ -260,7 +255,7 @@ private ActionForward initPage(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException { String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); ScratchieForm existForm = (ScratchieForm) sessionMap.get(ScratchieConstants.ATTR_RESOURCE_FORM); ScratchieForm scratchieForm = (ScratchieForm) form; @@ -271,11 +266,9 @@ } ToolAccessMode mode = getAccessMode(request); - if (mode.isAuthor()) { - return mapping.findForward(ScratchieConstants.SUCCESS); - } else { - return mapping.findForward(ScratchieConstants.DEFINE_LATER); - } + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + + return mapping.findForward(ScratchieConstants.SUCCESS); } /** @@ -286,55 +279,72 @@ ScratchieForm scratchieForm = (ScratchieForm) form; // get back sessionMAP - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(scratchieForm.getSessionMapID()); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(scratchieForm.getSessionMapID()); ToolAccessMode mode = getAccessMode(request); Scratchie scratchie = scratchieForm.getScratchie(); IScratchieService service = getScratchieService(); - // **********************************Get Scratchie - // PO********************* + // **********************************Get Scratchie PO********************* Scratchie scratchiePO = service.getScratchieByContentId(scratchieForm.getScratchie().getContentId()); + + Set oldItems = (scratchiePO == null) ? new HashSet() : scratchiePO + .getScratchieItems(); + //initialize oldItems' answers + for (ScratchieItem oldItem: oldItems) { + for (ScratchieAnswer answer : (Set)oldItem.getAnswers()) { + } + } + + //allow using old and modified questions and references altogether + if (mode.isTeacher()) { + service.releaseItemsFromCache(scratchiePO); + } + if (scratchiePO == null) { // new Scratchie, create it. scratchiePO = scratchie; scratchiePO.setCreated(new Timestamp(new Date().getTime())); scratchiePO.setUpdated(new Timestamp(new Date().getTime())); + } else { - if (mode.isAuthor()) { - Long uid = scratchiePO.getUid(); - PropertyUtils.copyProperties(scratchiePO, scratchie); - // get back UID - scratchiePO.setUid(uid); - } else { // if it is Teacher, then just update basic tab content - // (definelater) - scratchiePO.setInstructions(scratchie.getInstructions()); - scratchiePO.setTitle(scratchie.getTitle()); - // change define later status + Long uid = scratchiePO.getUid(); + PropertyUtils.copyProperties(scratchiePO, scratchie); + // set back UID + scratchiePO.setUid(uid); + + // if it is Teacher (from monitor) - change define later status + if (mode.isTeacher()) { scratchiePO.setDefineLater(false); } + scratchiePO.setUpdated(new Timestamp(new Date().getTime())); } // ************************* Handle scratchie items ******************* - // Handle scratchie items - Set itemList = new LinkedHashSet(); - SortedSet topics = getItemList(sessionMap); - Iterator iter = topics.iterator(); + Set items = new LinkedHashSet(); + SortedSet newItems = getItemList(sessionMap); + Iterator iter = newItems.iterator(); while (iter.hasNext()) { - ScratchieItem item = (ScratchieItem) iter.next(); + ScratchieItem item = iter.next(); if (item != null) { removeNewLineCharacters(item); - itemList.add(item); + items.add(item); } } - scratchiePO.setScratchieItems(itemList); - // delete instructino file from database. - List delScratchieItemList = getDeletedItemList(sessionMap); - iter = delScratchieItemList.iterator(); + scratchiePO.setScratchieItems(items); + + //recalculate results in case content is edited from monitoring + List deletedItems = getDeletedItemList(sessionMap); + if (mode.isTeacher()) { + service.recalculateUserAnswers(scratchiePO, oldItems, newItems, deletedItems); + } + + // delete items from database. + iter = deletedItems.iterator(); while (iter.hasNext()) { - ScratchieItem item = (ScratchieItem) iter.next(); + ScratchieItem item = iter.next(); iter.remove(); if (item.getUid() != null) { service.deleteScratchieItem(item.getUid()); @@ -348,11 +358,9 @@ scratchieForm.setScratchie(scratchiePO); request.setAttribute(AuthoringConstants.LAMS_AUTHORING_SUCCESS_FLAG, Boolean.TRUE); - if (mode.isAuthor()) { - return mapping.findForward("author"); - } else { - return mapping.findForward("monitor"); - } + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + + return mapping.findForward("author"); } /** @@ -362,7 +370,7 @@ HttpServletResponse response) { String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); String contentFolderID = (String) sessionMap.get(AttributeNames.PARAM_CONTENT_FOLDER_ID); ScratchieItemForm itemForm = (ScratchieItemForm) form; itemForm.setSessionMapID(sessionMapID); @@ -388,10 +396,10 @@ // get back sessionMAP String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); String contentFolderID = (String) sessionMap.get(AttributeNames.PARAM_CONTENT_FOLDER_ID); - int itemIdx = NumberUtils.stringToInt(request.getParameter(ScratchieConstants.PARAM_ITEM_INDEX), -1); + int itemIdx = NumberUtils.toInt(request.getParameter(ScratchieConstants.PARAM_ITEM_INDEX), -1); ScratchieItem item = null; if (itemIdx != -1) { SortedSet itemList = getItemList(sessionMap); @@ -425,10 +433,10 @@ HttpServletResponse response) { ScratchieItemForm itemForm = (ScratchieItemForm) form; - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(itemForm.getSessionMapID()); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(itemForm.getSessionMapID()); // check whether it is "edit(old Question)" or "add(new Question)" SortedSet itemList = getItemList(sessionMap); - int itemIdx = NumberUtils.stringToInt(itemForm.getItemIndex(), -1); + int itemIdx = NumberUtils.toInt(itemForm.getItemIndex(), -1); ScratchieItem item = null; if (itemIdx == -1) { // add @@ -472,7 +480,7 @@ HttpServletResponse response) throws UnsupportedEncodingException { // big part of code was taken from saveItem() method String sessionMapId = request.getParameter(ScratchieConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapId); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapId); String contentFolderID = (String) sessionMap.get(AttributeNames.PARAM_CONTENT_FOLDER_ID); SortedSet itemList = getItemList(sessionMap); @@ -544,7 +552,7 @@ private ActionForward exportQTI(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); SortedSet itemList = getItemList(sessionMap); List questions = new LinkedList(); @@ -592,18 +600,18 @@ String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); request.setAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMapID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); SortedSet itemList = getItemList(sessionMap); - int itemIndex = NumberUtils.stringToInt(request.getParameter(ScratchieConstants.PARAM_ITEM_INDEX), -1); + int itemIndex = NumberUtils.toInt(request.getParameter(ScratchieConstants.PARAM_ITEM_INDEX), -1); if (itemIndex != -1) { List rList = new ArrayList(itemList); ScratchieItem item = rList.remove(itemIndex); itemList.clear(); itemList.addAll(rList); // add to delList - List delList = getDeletedItemList(sessionMap); + List delList = getDeletedItemList(sessionMap); delList.add(item); } @@ -642,10 +650,10 @@ private ActionForward switchItem(ActionMapping mapping, HttpServletRequest request, boolean up) { String sessionMapID = WebUtil.readStrParam(request, ScratchieConstants.ATTR_SESSION_MAP_ID); request.setAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMapID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); SortedSet itemList = getItemList(sessionMap); - int itemIndex = NumberUtils.stringToInt(request.getParameter(ScratchieConstants.PARAM_ITEM_INDEX), -1); + int itemIndex = NumberUtils.toInt(request.getParameter(ScratchieConstants.PARAM_ITEM_INDEX), -1); if (itemIndex != -1) { List rList = new ArrayList(itemList); @@ -716,7 +724,7 @@ SortedSet answerList = getAnswersFromRequest(request, false); - int answerIndex = NumberUtils.stringToInt(request.getParameter(ScratchieConstants.PARAM_ANSWER_INDEX), -1); + int answerIndex = NumberUtils.toInt(request.getParameter(ScratchieConstants.PARAM_ANSWER_INDEX), -1); if (answerIndex != -1) { List rList = new ArrayList(answerList); rList.remove(answerIndex); @@ -761,7 +769,7 @@ private ActionForward switchAnswer(ActionMapping mapping, HttpServletRequest request, boolean up) { SortedSet answerList = getAnswersFromRequest(request, false); - int answerIndex = NumberUtils.stringToInt(request.getParameter(ScratchieConstants.PARAM_ANSWER_INDEX), -1); + int answerIndex = NumberUtils.toInt(request.getParameter(ScratchieConstants.PARAM_ANSWER_INDEX), -1); if (answerIndex != -1) { List rList = new ArrayList(answerList); @@ -832,7 +840,7 @@ * @param request * @return */ - private SortedSet getItemList(SessionMap sessionMap) { + private SortedSet getItemList(SessionMap sessionMap) { SortedSet list = (SortedSet) sessionMap.get(ScratchieConstants.ATTR_ITEM_LIST); if (list == null) { list = new TreeSet(new ScratchieItemComparator()); @@ -847,7 +855,7 @@ * @param request * @return */ - private List getDeletedItemList(SessionMap sessionMap) { + private List getDeletedItemList(SessionMap sessionMap) { return getListFromSession(sessionMap, ScratchieConstants.ATTR_DELETED_ITEM_LIST); } @@ -858,7 +866,7 @@ * @param name * @return */ - private List getListFromSession(SessionMap sessionMap, String name) { + private List getListFromSession(SessionMap sessionMap, String name) { List list = (List) sessionMap.get(name); if (list == null) { list = new ArrayList(); @@ -878,9 +886,9 @@ private TreeSet getAnswersFromRequest(HttpServletRequest request, boolean isForSaving) { Map paramMap = splitRequestParameter(request, ScratchieConstants.ATTR_ANSWER_LIST); Integer correctAnswerIndex = (paramMap.get(ScratchieConstants.ATTR_ANSWER_CORRECT) == null) ? null - : NumberUtils.stringToInt(paramMap.get(ScratchieConstants.ATTR_ANSWER_CORRECT)); + : NumberUtils.toInt(paramMap.get(ScratchieConstants.ATTR_ANSWER_CORRECT)); - int count = NumberUtils.stringToInt(paramMap.get(ScratchieConstants.ATTR_ANSWER_COUNT)); + int count = NumberUtils.toInt(paramMap.get(ScratchieConstants.ATTR_ANSWER_COUNT)); TreeSet answerList = new TreeSet(new ScratchieAnswerComparator()); for (int i = 0; i < count; i++) { @@ -890,8 +898,13 @@ } ScratchieAnswer answer = new ScratchieAnswer(); + String uidStr = paramMap.get(ScratchieConstants.ATTR_ANSWER_UID_PREFIX + i); + if (uidStr != null) { + Long uid = NumberUtils.toLong(uidStr); + answer.setUid(uid); + } String orderIdStr = paramMap.get(ScratchieConstants.ATTR_ANSWER_ORDER_ID_PREFIX + i); - Integer orderId = NumberUtils.stringToInt(orderIdStr); + Integer orderId = NumberUtils.toInt(orderIdStr); answer.setOrderId(orderId); answer.setDescription(answerDescription); if ((correctAnswerIndex != null) && correctAnswerIndex.equals(orderId)) { Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java =================================================================== diff -u -r7e9e931879395030ff00401a119facd815e42e62 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision 7e9e931879395030ff00401a119facd815e42e62) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -214,17 +214,6 @@ return mapping.findForward("defineLater"); } - // set contentInUse flag to true! - scratchie.setContentInUse(true); - scratchie.setDefineLater(false); - tryExecute(new Callable() { - @Override - public Object call() throws ScratchieApplicationException { - LearningAction.service.saveOrUpdateScratchie(scratchie); - return null; - } - }); - ActivityPositionDTO activityPosition = LearningWebUtil.putActivityPositionInRequestByToolSessionId( toolSessionId, request, getServlet().getServletContext()); sessionMap.put(AttributeNames.ATTR_ACTIVITY_POSITION, activityPosition); @@ -370,7 +359,7 @@ Long answerUid = NumberUtils.createLong(request.getParameter(ScratchieConstants.PARAM_ANSWER_UID)); ScratchieAnswer answer = LearningAction.service.getScratchieAnswerByUid(answerUid); if (answer == null) { - return mapping.findForward(ScratchieConstants.ERROR); + return null; } JSONObject JSONObject = new JSONObject(); @@ -396,7 +385,7 @@ ScratchieSession toolSession = LearningAction.service.getScratchieSessionBySessionId(toolSessionId); ScratchieUser leader = this.getCurrentUser(toolSessionId); - // only leaders are allowed to scratch answers + // only leader is allowed to scratch answers if (!toolSession.isUserGroupLeader(leader.getUid())) { return null; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java =================================================================== diff -u -r2163a3c910ea266fc01ec2ac9d0ea7e069b5da30 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 2163a3c910ea266fc01ec2ac9d0ea7e069b5da30) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -124,7 +124,6 @@ boolean isGroupedActivity = service.isGroupedActivity(contentId); sessionMap.put(ScratchieConstants.ATTR_IS_GROUPED_ACTIVITY, isGroupedActivity); sessionMap.put(ScratchieConstants.ATTR_SUMMARY_LIST, summaryList); - sessionMap.put(ScratchieConstants.PAGE_EDITABLE, scratchie.isContentInUse()); sessionMap.put(ScratchieConstants.ATTR_SCRATCHIE, scratchie); sessionMap.put(ScratchieConstants.ATTR_LEARNERS, learners); sessionMap.put(ScratchieConstants.ATTR_TOOL_CONTENT_ID, contentId); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/ExportServlet.java =================================================================== diff -u -rbe07c35c372d904a65581d98660e73f3b13b69db -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision be07c35c372d904a65581d98660e73f3b13b69db) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -166,7 +166,6 @@ boolean isGroupedActivity = service.isGroupedActivity(toolContentID); sessionMap.put(ScratchieConstants.ATTR_IS_GROUPED_ACTIVITY, isGroupedActivity); sessionMap.put(ScratchieConstants.ATTR_SUMMARY_LIST, summaryList); - sessionMap.put(ScratchieConstants.PAGE_EDITABLE, content.isContentInUse()); sessionMap.put(ScratchieConstants.ATTR_SCRATCHIE, content); sessionMap.put(ScratchieConstants.ATTR_TOOL_CONTENT_ID, toolContentID); } Index: lams_tool_scratchie/web/pages/authoring/authoring.jsp =================================================================== diff -u -rbe07c35c372d904a65581d98660e73f3b13b69db -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision be07c35c372d904a65581d98660e73f3b13b69db) +++ lams_tool_scratchie/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -1,5 +1,4 @@ - + <%@ include file="/common/taglibs.jsp"%> <%@ page import="org.lamsfoundation.lams.tool.scratchie.ScratchieConstants"%> @@ -35,58 +34,61 @@ -
+

- - -
- - <%@ include file="/common/messages.jsp"%> + + + +
+ + + <%@ include file="/common/messages.jsp"%> + + + + + + + + + + + + + + + + + + + + + + + <%-- Default value + cancelButtonLabelKey="label.authoring.cancel.button" + saveButtonLabelKey="label.authoring.save.button" + cancelConfirmMsgKey="authoring.msg.cancel.save" + accessMode="author" + --%> + + + +
- - - - - - - + - - - - - - - - - - - - - <%-- Default value - cancelButtonLabelKey="label.authoring.cancel.button" - saveButtonLabelKey="label.authoring.save.button" - cancelConfirmMsgKey="authoring.msg.cancel.save" - accessMode="author" - --%> - - -
- - -
- Fisheye: Tag 4428202881c5551dd3973c9011d7a70e0a517060 refers to a dead (removed) revision in file `lams_tool_scratchie/web/pages/authoring/definelater.jsp'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 4428202881c5551dd3973c9011d7a70e0a517060 refers to a dead (removed) revision in file `lams_tool_scratchie/web/pages/authoring/definelaterforbid.jsp'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_scratchie/web/pages/authoring/parts/answerlist.jsp =================================================================== diff -u -r6ade8791af29bde5c1e1b1aad674a9d23b69fb36 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/web/pages/authoring/parts/answerlist.jsp (.../answerlist.jsp) (revision 6ade8791af29bde5c1e1b1aad674a9d23b69fb36) +++ lams_tool_scratchie/web/pages/authoring/parts/answerlist.jsp (.../answerlist.jsp) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -11,6 +11,7 @@ + &#${status.index + 65};) Index: lams_tool_scratchie/web/pages/authoring/start.jsp =================================================================== diff -u -r6aaee4b2fe2caa08b0c63a0de11f05042d5a3e18 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/web/pages/authoring/start.jsp (.../start.jsp) (revision 6aaee4b2fe2caa08b0c63a0de11f05042d5a3e18) +++ lams_tool_scratchie/web/pages/authoring/start.jsp (.../start.jsp) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -1,16 +1,17 @@ - + <%@ include file="/common/taglibs.jsp" %> - - - - - - - - + + + + + + + + + + Index: lams_tool_scratchie/web/pages/learning/definelater.jsp =================================================================== diff -u -r6aaee4b2fe2caa08b0c63a0de11f05042d5a3e18 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/web/pages/learning/definelater.jsp (.../definelater.jsp) (revision 6aaee4b2fe2caa08b0c63a0de11f05042d5a3e18) +++ lams_tool_scratchie/web/pages/learning/definelater.jsp (.../definelater.jsp) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -1,21 +1,20 @@ - + <%@include file="/common/taglibs.jsp"%> - - <%@ include file="/common/header.jsp"%> - - - - -
-

- -

- -
- - + + <%@ include file="/common/header.jsp"%> + + + + +
+

+ +

+ +
+ +
Index: lams_tool_scratchie/web/pages/monitoring/editactivity.jsp =================================================================== diff -u -rc8b52024684e67187b595c901687e4cc2e326eb3 -r4428202881c5551dd3973c9011d7a70e0a517060 --- lams_tool_scratchie/web/pages/monitoring/editactivity.jsp (.../editactivity.jsp) (revision c8b52024684e67187b595c901687e4cc2e326eb3) +++ lams_tool_scratchie/web/pages/monitoring/editactivity.jsp (.../editactivity.jsp) (revision 4428202881c5551dd3973c9011d7a70e0a517060) @@ -2,12 +2,6 @@ - -

- -

-
- - - - - - + + +
@@ -29,17 +23,15 @@
- - - - - - - -
+ + + + + + + +