Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/web/controller/LearningController.java =================================================================== diff -u -rb1637faf792faec62645046902dbf272d797ccc7 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/web/controller/LearningController.java (.../LearningController.java) (revision b1637faf792faec62645046902dbf272d797ccc7) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/web/controller/LearningController.java (.../LearningController.java) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -533,7 +533,7 @@ * @param response * @return */ - @RequestMapping("/submitReflection") + @RequestMapping(path="/submitReflection", method = RequestMethod.POST) protected String submitReflection(@ModelAttribute("messageForm") ReflectionForm messageForm, @ModelAttribute("recordForm") RecordForm recordForm, HttpServletRequest request) { Integer userId = messageForm.getUserId(); Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningController.java =================================================================== diff -u -r1cef918442124e8d987a285095a7504e3bc00461 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningController.java (.../LearningController.java) (revision 1cef918442124e8d987a285095a7504e3bc00461) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningController.java (.../LearningController.java) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -112,7 +112,7 @@ if ((mode != null) && mode.isTeacher()) { // monitoring mode - user is specified in URL // dokumaranUser may be null if the user was force completed. - user = getSpecifiedUser(dokumaranService, toolSessionId, WebUtil.readIntParam(request, AttributeNames.PARAM_USER_ID, false)); + user = getSpecifiedUser(toolSessionId, WebUtil.readIntParam(request, AttributeNames.PARAM_USER_ID, false)); } else { // get back login user DTO HttpSession ss = SessionManager.getSession(); @@ -367,8 +367,8 @@ // Private method // ************************************************************************************* - private DokumaranUser getSpecifiedUser(IDokumaranService service, Long sessionId, Integer userId) { - DokumaranUser dokumaranUser = service.getUserByIDAndSession(new Long(userId.intValue()), sessionId); + private DokumaranUser getSpecifiedUser(Long sessionId, Integer userId) { + DokumaranUser dokumaranUser = dokumaranService.getUserByIDAndSession(new Long(userId.intValue()), sessionId); if (dokumaranUser == null) { LearningController.log.error( "Unable to find specified user for dokumaran activity. Screens are likely to fail. SessionId=" Index: lams_tool_doku/web/pages/authoring/authoring.jsp =================================================================== diff -u -r1cef918442124e8d987a285095a7504e3bc00461 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_doku/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision 1cef918442124e8d987a285095a7504e3bc00461) +++ lams_tool_doku/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -66,7 +66,7 @@ --%> Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java (.../CommonCartridgeServiceImpl.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java (.../CommonCartridgeServiceImpl.java) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -40,7 +40,6 @@ import java.util.TreeSet; import org.apache.log4j.Logger; -import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.confidencelevel.ConfidenceLevelDTO; import org.lamsfoundation.lams.contentrepository.ICredentials; import org.lamsfoundation.lams.contentrepository.ITicket; @@ -93,6 +92,7 @@ import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.zipfile.ZipFileUtil; import org.lamsfoundation.lams.util.zipfile.ZipFileUtilException; +import org.springframework.web.multipart.MultipartFile; /** * @@ -398,8 +398,8 @@ @Override public List> getSummary(Long contentId) { - List> groupList = new ArrayList>(); - List group = new ArrayList(); + List> groupList = new ArrayList<>(); + List group = new ArrayList<>(); // get all item which is accessed by user Map visitCountMap = commonCartridgeItemVisitDao.getSummary(contentId); @@ -410,7 +410,7 @@ List sessions = commonCartridgeSessionDao.getByContentId(contentId); for (CommonCartridgeSession session : sessions) { // one new group for one session. - group = new ArrayList(); + group = new ArrayList<>(); // firstly, put all initial commonCartridge item into this group. for (CommonCartridgeItem item : items) { Summary sum = new Summary(session.getSessionId(), session.getSessionName(), item); @@ -433,13 +433,13 @@ @Override public Map> getReflectList(Long contentId, boolean setEntry) { - Map> map = new HashMap>(); + Map> map = new HashMap<>(); List sessionList = commonCartridgeSessionDao.getByContentId(contentId); for (CommonCartridgeSession session : sessionList) { Long sessionId = session.getSessionId(); boolean hasRefection = session.getCommonCartridge().isReflectOnActivity(); - Set list = new TreeSet(new ReflectDTOComparator()); + Set list = new TreeSet<>(new ReflectDTOComparator()); // get all users in this session List users = commonCartridgeUserDao.getBySessionID(sessionId); for (CommonCartridgeUser user : users) { @@ -553,11 +553,11 @@ } @Override - public List uploadCommonCartridgeFile(CommonCartridgeItem item, FormFile file) + public List uploadCommonCartridgeFile(CommonCartridgeItem item, MultipartFile file) throws UploadCommonCartridgeFileException { try { InputStream is = file.getInputStream(); - String fileName = file.getFileName(); + String fileName = file.getName(); String fileType = file.getContentType(); // need unzip upload, and parse learning object information from XML file. String packageDirectory = ZipFileUtil.expandZip(is, fileName); @@ -753,7 +753,7 @@ @Override public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { - return new TreeMap(); + return new TreeMap<>(); } @Override @@ -948,19 +948,19 @@ @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { - return new TreeMap(); + return new TreeMap<>(); } @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return null; } - + @Override public List getToolOutputs(String name, Long toolContentId) { - return new ArrayList(); + return new ArrayList<>(); } - + @Override public List getConfidenceLevels(Long toolSessionId) { return null; @@ -1023,12 +1023,12 @@ public List getMonitorsByToolSessionId(Long sessionId) { return getLessonService().getMonitorsByToolSessionId(sessionId); } - + @Override public void auditLogStartEditingActivityInMonitor(long toolContentID) { - toolService.auditLogStartEditingActivityInMonitor(toolContentID); + toolService.auditLogStartEditingActivityInMonitor(toolContentID); } - + @Override public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { CommonCartridgeUser learner = getUserByIDAndSession(learnerId, toolSessionId); @@ -1037,10 +1037,11 @@ } Object[] dates = commonCartridgeItemVisitDao.getDateRangeOfAccesses(learner.getUid()); - if (learner.isSessionFinished()) - return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, (Date)dates[0], (Date)dates[1]); - else - return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED,(Date) dates[0], null); + if (learner.isSessionFinished()) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, (Date) dates[0], (Date) dates[1]); + } else { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, (Date) dates[0], null); + } } - + } Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/ICommonCartridgeService.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/ICommonCartridgeService.java (.../ICommonCartridgeService.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/ICommonCartridgeService.java (.../ICommonCartridgeService.java) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -28,7 +28,6 @@ import java.util.Set; import java.util.SortedSet; -import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.contentrepository.IVersionedNode; import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.notebook.model.NotebookEntry; @@ -40,6 +39,7 @@ import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeSession; import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeUser; import org.lamsfoundation.lams.usermanagement.User; +import org.springframework.web.multipart.MultipartFile; /** * @author Andrey Balan @@ -93,7 +93,7 @@ * @return * @throws UploadCommonCartridgeFileException */ - List uploadCommonCartridgeFile(CommonCartridgeItem item, FormFile file) + List uploadCommonCartridgeFile(CommonCartridgeItem item, MultipartFile file) throws UploadCommonCartridgeFileException; // ********** for user methods ************* @@ -286,10 +286,10 @@ * @return list of teachers that monitor the lesson which contains the tool with given session ID */ public List getMonitorsByToolSessionId(Long sessionId); - + /** * Audit log the teacher has started editing activity in monitor. - * + * * @param toolContentID */ void auditLogStartEditingActivityInMonitor(long toolContentID); Fisheye: Tag 1d6eef003bf303f75c5405b66a13ac86232cec03 refers to a dead (removed) revision in file `lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/action/AdminAction.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1d6eef003bf303f75c5405b66a13ac86232cec03 refers to a dead (removed) revision in file `lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/action/AuthoringAction.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1d6eef003bf303f75c5405b66a13ac86232cec03 refers to a dead (removed) revision in file `lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/action/ClearSessionAction.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1d6eef003bf303f75c5405b66a13ac86232cec03 refers to a dead (removed) revision in file `lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/action/LearningAction.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1d6eef003bf303f75c5405b66a13ac86232cec03 refers to a dead (removed) revision in file `lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/action/MonitoringAction.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1d6eef003bf303f75c5405b66a13ac86232cec03 refers to a dead (removed) revision in file `lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/action/ViewItemAction.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/AdminController.java =================================================================== diff -u --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/AdminController.java (revision 0) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/AdminController.java (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -0,0 +1,127 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.commonCartridge.web.controller; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeConfigItem; +import org.lamsfoundation.lams.tool.commonCartridge.service.ICommonCartridgeService; +import org.lamsfoundation.lams.tool.commonCartridge.web.form.AdminForm; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * @author Andrey Balan + */ +@Controller +@RequestMapping("/laimsc11admin") +public class AdminController { + + @Autowired + @Qualifier("commonCartridgeService") + private ICommonCartridgeService commonCartridgeService; + + @RequestMapping("/start") + public String start(@ModelAttribute("commonCartridgeAdminForm") AdminForm commonCartridgeAdminForm, + HttpServletRequest request, HttpServletResponse response) { + + CommonCartridgeConfigItem allowExposeUserName = commonCartridgeService + .getConfigItem(CommonCartridgeConfigItem.KEY_EXPOSE_USER_NAME); + if (allowExposeUserName != null) { + commonCartridgeAdminForm.setAllowExposeUserName(Boolean.parseBoolean(allowExposeUserName.getConfigValue())); + } + + CommonCartridgeConfigItem allowExposeUserEmail = commonCartridgeService + .getConfigItem(CommonCartridgeConfigItem.KEY_EXPOSE_USER_EMAIL); + if (allowExposeUserEmail != null) { + commonCartridgeAdminForm + .setAllowExposeUserEmail(Boolean.parseBoolean(allowExposeUserEmail.getConfigValue())); + } + + request.setAttribute("error", false); + return "pages/admin/config"; + } + + @RequestMapping("/saveContent") + public String saveContent(@ModelAttribute("commonCartridgeAdminForm") AdminForm commonCartridgeAdminForm, + HttpServletRequest request) { + + MultiValueMap errorMap = validateAdminForm(commonCartridgeAdminForm); + if (!errorMap.isEmpty()) { + request.setAttribute("errorMap", errorMap); + return "pages/admin/config"; + } + + CommonCartridgeConfigItem allowExposeUserName = commonCartridgeService + .getConfigItem(CommonCartridgeConfigItem.KEY_EXPOSE_USER_NAME); + allowExposeUserName.setConfigValue(String.valueOf(commonCartridgeAdminForm.isAllowExposeUserName())); + commonCartridgeService.saveOrUpdateConfigItem(allowExposeUserName); + + CommonCartridgeConfigItem allowExposeUserEmail = commonCartridgeService + .getConfigItem(CommonCartridgeConfigItem.KEY_EXPOSE_USER_EMAIL); + allowExposeUserEmail.setConfigValue(String.valueOf(commonCartridgeAdminForm.isAllowExposeUserEmail())); + commonCartridgeService.saveOrUpdateConfigItem(allowExposeUserEmail); + + request.setAttribute("savedSuccess", true); + return "pages/admin/config"; + + } + + /** + * Validate BasicLTIConfigItems. + * + * @param adminForm + * @return + */ + private MultiValueMap validateAdminForm(AdminForm commonCartridgeAdminForm) { + MultiValueMap errorMap = new LinkedMultiValueMap<>(); + + // if ((adminForm.isAllowExposeUserName() == null) || adminForm.isAllowExposeUserName().equals("")) { + // if (!isParsableToInt(adminForm.isAllowExposeUserName())) { + // errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( + // BasicLTIConstants.ERROR_MSG_ENTERED_VALUES_NOT_INTEGERS)); + // } + // } else { + // errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( + // BasicLTIConstants.ERROR_MSG_REQUIRED_FIELDS_MISSING)); + // } + // + // if ((adminForm.isAllowExposeUserEmail() != null) && !adminForm.isAllowExposeUserEmail().equals("")) { + // if (!isParsableToInt(adminForm.isAllowExposeUserEmail())) { + // errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( + // BasicLTIConstants.ERROR_MSG_ENTERED_VALUES_NOT_INTEGERS)); + // } + // } else { + // errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( + // BasicLTIConstants.ERROR_MSG_REQUIRED_FIELDS_MISSING)); + // } + + return errorMap; + } +} Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/AuthoringController.java =================================================================== diff -u --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/AuthoringController.java (revision 0) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/AuthoringController.java (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -0,0 +1,917 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.commonCartridge.web.controller; + +import java.io.IOException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + +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; +import org.apache.commons.lang.math.NumberUtils; +import org.apache.log4j.Logger; +import org.apache.struts.action.ActionMessage; +import org.lamsfoundation.lams.authoring.web.AuthoringConstants; +import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.commonCartridge.CommonCartridgeConstants; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridge; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeItem; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeUser; +import org.lamsfoundation.lams.tool.commonCartridge.service.CommonCartridgeApplicationException; +import org.lamsfoundation.lams.tool.commonCartridge.service.ICommonCartridgeService; +import org.lamsfoundation.lams.tool.commonCartridge.service.UploadCommonCartridgeFileException; +import org.lamsfoundation.lams.tool.commonCartridge.util.CommonCartridgeItemComparator; +import org.lamsfoundation.lams.tool.commonCartridge.web.form.CommonCartridgeForm; +import org.lamsfoundation.lams.tool.commonCartridge.web.form.CommonCartridgeItemForm; +import org.lamsfoundation.lams.tool.commonCartridge.web.form.CommonCartridgePedagogicalPlannerForm; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.FileValidatorSpringUtil; +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; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.multipart.MultipartFile; + +/** + * @author Andrey Balan + */ +@Controller +@RequestMapping("/authoring") +public class AuthoringController { + private static final String ITEM_TYPE = "itemType"; + + private static Logger log = Logger.getLogger(AuthoringController.class); + + @Autowired + @Qualifier("commonCartridgeService") + private ICommonCartridgeService commonCartridgeService; + + @Autowired + @Qualifier("commonCartridgeMessageService") + private MessageService messageService; + + /** + * Remove commonCartridge item from HttpSession list and update page display. As authoring rule, all persist only + * happen when user submit whole page. So this remove is just impact HttpSession values. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping("/removeItem") + private String removeItem(HttpServletRequest request) { + + // get back sessionMAP + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + + int itemIdx = NumberUtils.stringToInt(request.getParameter(CommonCartridgeConstants.PARAM_ITEM_INDEX), -1); + if (itemIdx != -1) { + SortedSet commonCartridgeList = getCommonCartridgeItemList(sessionMap); + List rList = new ArrayList<>(commonCartridgeList); + CommonCartridgeItem item = rList.remove(itemIdx); + commonCartridgeList.clear(); + commonCartridgeList.addAll(rList); + // add to delList + List delList = getDeletedCommonCartridgeItemList(sessionMap); + delList.add(item); + } + + request.setAttribute(CommonCartridgeConstants.ATTR_SESSION_MAP_ID, sessionMapID); + return "pages/authoring/parts/itemlist"; + } + + /** + * Display edit page for existed commonCartridge item. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + + @RequestMapping("/editItemInit") + private String editItemInit( + @ModelAttribute("commonCartridgeItemForm") CommonCartridgeItemForm commonCartridgeItemForm, + HttpServletRequest request) { + + // get back sessionMAP + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + + int itemIdx = NumberUtils.stringToInt(request.getParameter(CommonCartridgeConstants.PARAM_ITEM_INDEX), -1); + CommonCartridgeItem item = null; + if (itemIdx != -1) { + SortedSet commonCartridgeList = getCommonCartridgeItemList(sessionMap); + List rList = new ArrayList<>(commonCartridgeList); + item = rList.get(itemIdx); + if (item != null) { + populateItemToForm(itemIdx, item, commonCartridgeItemForm, request); + } + } + return findForward(item == null ? -1 : item.getType()); + } + + /** + * Display empty page for new commonCartridge item. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping("/newItemInit") + private String newItemInit( + @ModelAttribute("commonCartridgeItemForm") CommonCartridgeItemForm commonCartridgeItemForm, + HttpServletRequest request) { + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + commonCartridgeItemForm.setSessionMapID(sessionMapID); + + short type = (short) NumberUtils.stringToInt(request.getParameter(AuthoringController.ITEM_TYPE)); + return findForward(type); + } + + /** + * This method will get necessary information from commonCartridge item form and save or update into + * HttpSession CommonCartridgeItemList. Notice, this save is not persist them into database, just save + * HttpSession temporarily. Only they will be persist when the entire authoring page is being + * persisted. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws ServletException + */ + @RequestMapping(path = "/saveOrUpdateItem", method = RequestMethod.POST) + private String saveOrUpdateItem( + @ModelAttribute("commonCartridgeItemForm") CommonCartridgeItemForm commonCartridgeItemForm, + HttpServletRequest request) { + MultiValueMap errorMap = validateCommonCartridgeItem(commonCartridgeItemForm); + + if (!errorMap.isEmpty()) { + request.setAttribute("errorMap", errorMap); + return findForward(commonCartridgeItemForm.getItemType()); + } + + short type = commonCartridgeItemForm.getItemType(); + try { + if (type == CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE) { + uploadCommonCartridge(request, commonCartridgeItemForm); + } else { + extractFormToCommonCartridgeItem(request, commonCartridgeItemForm); + } + } catch (Exception e) { + // any upload exception will display as normal error message rather then throw exception directly + errorMap.add("GLOBAL", messageService.getMessage(CommonCartridgeConstants.ERROR_MSG_UPLOAD_FAILED, + new Object[] { e.getMessage() })); + if (!errorMap.isEmpty()) { + request.setAttribute("errorMap", errorMap); + return findForward(commonCartridgeItemForm.getItemType()); + } + } + // set session map ID so that itemlist.jsp can get sessionMAP + request.setAttribute(CommonCartridgeConstants.ATTR_SESSION_MAP_ID, commonCartridgeItemForm.getSessionMapID()); + // return null to close this window + + if (type == CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE) { + return "pages/authoring/parts/selectResources"; + } else { + return "pages/authoring/parts/itemlist"; + } + } + + /** + * + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws ServletException + */ + @RequestMapping("/selectResources") + private String selectResources(HttpServletRequest request) { + //count uploaded resources + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + List uploadedCartridgeResources = getUploadedCartridgeResources(sessionMap); + int countUploadedResources = uploadedCartridgeResources.size(); + + SortedSet items = getCommonCartridgeItemList(sessionMap); + + for (int i = 0; i < countUploadedResources; i++) { + String itemStr = request.getParameter(CommonCartridgeConstants.ATTR_ITEM + i); + if (StringUtils.isBlank(itemStr)) { + continue; + } + + CommonCartridgeItem resource = uploadedCartridgeResources.get(i); + + String launchUrl = request.getParameter(CommonCartridgeConstants.ATTR_LAUNCH_URL + i); + resource.setLaunchUrl(launchUrl); + String secureLaunchUrl = request.getParameter(CommonCartridgeConstants.ATTR_SECURE_LAUNCH_URL + i); + resource.setSecureLaunchUrl(secureLaunchUrl); + String toolKey = request.getParameter(CommonCartridgeConstants.ATTR_REMOTE_TOOL_KEY + i); + resource.setKey(toolKey); + String toolSecret = request.getParameter(CommonCartridgeConstants.ATTR_REMOTE_TOOL_SECRET + i); + resource.setSecret(toolSecret); + String buttonText = request.getParameter(CommonCartridgeConstants.ATTR_BUTTON_TEXT + i); + resource.setButtonText(buttonText); + String isOpenUrlNewWindow = request.getParameter(CommonCartridgeConstants.ATTR_OPEN_URL_NEW_WINDOW + i); + resource.setOpenUrlNewWindow(isOpenUrlNewWindow != null); + int frameHeight = WebUtil.readIntParam(request, CommonCartridgeConstants.ATTR_FRAME_HEIGHT + i, true); + resource.setFrameHeight(frameHeight); + + //add selected resource to item list + items.add(resource); + } + + // set session map ID so that itemlist.jsp can get sessionMAP + request.setAttribute(CommonCartridgeConstants.ATTR_SESSION_MAP_ID, sessionMapID); + // return null to close this window + + return "pages/authoring/parts/itemlist"; + + } + + /** + * Read commonCartridge data from database and put them into HttpSession. It will redirect to init.do directly after + * this method run successfully. + * + * This method will avoid read database again and lost un-saved resouce item lost when user "refresh page", + * + * @throws ServletException + * + */ + + @RequestMapping("/start") + private String start(@ModelAttribute("authoringForm") CommonCartridgeForm authoringForm, HttpServletRequest request) + throws ServletException { + ToolAccessMode mode = WebUtil.readToolAccessModeAuthorDefaulted(request); + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + return starting(authoringForm, request); + } + + @RequestMapping("/definelater") + private String definelater(@ModelAttribute("authoringForm") CommonCartridgeForm authoringForm, + HttpServletRequest request) throws ServletException { + // update define later flag to true + Long contentId = new Long(WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID)); + CommonCartridge commonCartridge = commonCartridgeService.getCommonCartridgeByContentId(contentId); + + commonCartridge.setDefineLater(true); + commonCartridgeService.saveOrUpdateCommonCartridge(commonCartridge); + + //audit log the teacher has started editing activity in monitor + commonCartridgeService.auditLogStartEditingActivityInMonitor(contentId); + + request.setAttribute(AttributeNames.ATTR_MODE, ToolAccessMode.TEACHER.toString()); + return starting(authoringForm, request); + } + + private String starting(@ModelAttribute("authoringForm") CommonCartridgeForm authoringForm, + HttpServletRequest request) throws ServletException { + + // save toolContentID into HTTPSession + Long contentId = new Long(WebUtil.readLongParam(request, CommonCartridgeConstants.PARAM_TOOL_CONTENT_ID)); + + // get back the commonCartridge and item list and display them on page + + List items = null; + CommonCartridge commonCartridge = null; + + // Get contentFolderID and save to form. + String contentFolderID = WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID); + authoringForm.setContentFolderID(contentFolderID); + + // initial Session Map + SessionMap sessionMap = new SessionMap<>(); + request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); + authoringForm.setSessionMapID(sessionMap.getSessionID()); + + try { + commonCartridge = commonCartridgeService.getCommonCartridgeByContentId(contentId); + // if commonCartridge does not exist, try to use default content instead. + if (commonCartridge == null) { + commonCartridge = commonCartridgeService.getDefaultContent(contentId); + if (commonCartridge.getCommonCartridgeItems() != null) { + items = new ArrayList(commonCartridge.getCommonCartridgeItems()); + } else { + items = null; + } + } else { + items = commonCartridgeService.getAuthoredItems(commonCartridge.getUid()); + } + + authoringForm.setCommonCartridge(commonCartridge); + } catch (Exception e) { + AuthoringController.log.error(e); + throw new ServletException(e); + } + + // init it to avoid null exception in following handling + if (items == null) { + items = new ArrayList<>(); + } else { + CommonCartridgeUser commonCartridgeUser = null; + // handle system default question: createBy is null, now set it to current user + for (CommonCartridgeItem item : items) { + if (item.getCreateBy() == null) { + if (commonCartridgeUser == null) { + // get back login user DTO + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + commonCartridgeUser = new CommonCartridgeUser(user, commonCartridge); + } + item.setCreateBy(commonCartridgeUser); + } + } + } + // init commonCartridge item list + SortedSet commonCartridgeItemList = getCommonCartridgeItemList(sessionMap); + commonCartridgeItemList.clear(); + commonCartridgeItemList.addAll(items); + + sessionMap.put(CommonCartridgeConstants.ATTR_RESOURCE_FORM, authoringForm); + request.getSession().setAttribute(AttributeNames.PARAM_NOTIFY_CLOSE_URL, + request.getParameter(AttributeNames.PARAM_NOTIFY_CLOSE_URL)); + return "pages/authoring/start"; + } + + /** + * Display same entire authoring page content from HttpSession variable. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws ServletException + */ + @RequestMapping("/init") + private String initPage(@ModelAttribute("authoringForm") CommonCartridgeForm authoringForm, + HttpServletRequest request) throws ServletException { + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + CommonCartridgeForm existForm = (CommonCartridgeForm) sessionMap + .get(CommonCartridgeConstants.ATTR_RESOURCE_FORM); + + try { + PropertyUtils.copyProperties(authoringForm, existForm); + } catch (Exception e) { + throw new ServletException(e); + } + + ToolAccessMode mode = WebUtil.readToolAccessModeAuthorDefaulted(request); + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + authoringForm.setMode(mode.toString()); + + return "pages/authoring/authoring"; + } + + /** + * This method will persist all inforamtion in this authoring page, include all commonCartridge item, information + * etc. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws ServletException + */ + @RequestMapping(path = "/update", method = RequestMethod.POST) + private String updateContent(@ModelAttribute("authoringForm") CommonCartridgeForm authoringForm, + HttpServletRequest request) throws Exception { + + // get back sessionMAP + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(authoringForm.getSessionMapID()); + + ToolAccessMode mode = WebUtil.readToolAccessModeAuthorDefaulted(request); + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + + CommonCartridge commonCartridge = authoringForm.getCommonCartridge(); + + // **********************************Get CommonCartridge PO********************* + CommonCartridge commonCartridgePO = commonCartridgeService + .getCommonCartridgeByContentId(authoringForm.getCommonCartridge().getContentId()); + if (commonCartridgePO == null) { + // new CommonCartridge, create it. + commonCartridgePO = commonCartridge; + commonCartridgePO.setCreated(new Timestamp(new Date().getTime())); + commonCartridgePO.setUpdated(new Timestamp(new Date().getTime())); + + } else { + Long uid = commonCartridgePO.getUid(); + PropertyUtils.copyProperties(commonCartridgePO, commonCartridge); + // get back UID + commonCartridgePO.setUid(uid); + + // if it's a teacher - change define later status + if (mode.isTeacher()) { + commonCartridgePO.setDefineLater(false); + } + + commonCartridgePO.setUpdated(new Timestamp(new Date().getTime())); + } + + // *******************************Handle user******************* + // try to get form system session + HttpSession ss = SessionManager.getSession(); + // get back login user DTO + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + CommonCartridgeUser commonCartridgeUser = commonCartridgeService.getUserByIDAndContent( + new Long(user.getUserID().intValue()), authoringForm.getCommonCartridge().getContentId()); + if (commonCartridgeUser == null) { + commonCartridgeUser = new CommonCartridgeUser(user, commonCartridgePO); + } + + commonCartridgePO.setCreatedBy(commonCartridgeUser); + + // ************************* Handle commonCartridge items ******************* + + Set itemList = new LinkedHashSet(); + SortedSet topics = getCommonCartridgeItemList(sessionMap); + Iterator iter = topics.iterator(); + while (iter.hasNext()) { + CommonCartridgeItem item = (CommonCartridgeItem) iter.next(); + if (item != null) { + // This flushs user UID info to message if this user is a new user. + item.setCreateBy(commonCartridgeUser); + itemList.add(item); + } + } + commonCartridgePO.setCommonCartridgeItems(itemList); + // delete instructino file from database. + List delCommonCartridgeItemList = getDeletedCommonCartridgeItemList(sessionMap); + iter = delCommonCartridgeItemList.iterator(); + while (iter.hasNext()) { + CommonCartridgeItem item = (CommonCartridgeItem) iter.next(); + iter.remove(); + if (item.getUid() != null) { + commonCartridgeService.deleteCommonCartridgeItem(item.getUid()); + } + } + + // if miniview number is bigger than available items, then set it topics size + if (commonCartridgePO.getMiniViewCommonCartridgeNumber() > topics.size()) { + commonCartridgePO.setMiniViewCommonCartridgeNumber(topics.size()); + } + // ********************************************** + // finally persist commonCartridgePO again + commonCartridgeService.saveOrUpdateCommonCartridge(commonCartridgePO); + + authoringForm.setCommonCartridge(commonCartridgePO); + + request.setAttribute(AuthoringConstants.LAMS_AUTHORING_SUCCESS_FLAG, Boolean.TRUE); + return "pages/authoring/authoring"; + } + + // ************************************************************************************* + // Private method + // ************************************************************************************* + /** + * List items from fresh uploaded cartridge. + * + * @param request + * @return + */ + private List getUploadedCartridgeResources(SessionMap sessionMap) { + return getListFromSession(sessionMap, "uploadedCartridgeResources"); + } + + /** + * List save current commonCartridge items. + * + * @param request + * @return + */ + private SortedSet getCommonCartridgeItemList(SessionMap sessionMap) { + SortedSet list = (SortedSet) sessionMap + .get(CommonCartridgeConstants.ATTR_RESOURCE_ITEM_LIST); + if (list == null) { + list = new TreeSet<>(new CommonCartridgeItemComparator()); + sessionMap.put(CommonCartridgeConstants.ATTR_RESOURCE_ITEM_LIST, list); + } + return list; + } + + /** + * List save deleted commonCartridge items, which could be persisted or non-persisted items. + * + * @param request + * @return + */ + private List getDeletedCommonCartridgeItemList(SessionMap sessionMap) { + return getListFromSession(sessionMap, CommonCartridgeConstants.ATTR_DELETED_RESOURCE_ITEM_LIST); + } + + /** + * Get java.util.List from HttpSession by given name. + * + * @param request + * @param name + * @return + */ + private List getListFromSession(SessionMap sessionMap, String name) { + List list = (List) sessionMap.get(name); + if (list == null) { + list = new ArrayList(); + sessionMap.put(name, list); + } + return list; + } + + /** + * Get back relative ActionForward from request. + * + * @param type + * @param mapping + * @return + */ + private String findForward(short type) { + String forward; + switch (type) { + case CommonCartridgeConstants.RESOURCE_TYPE_BASIC_LTI: + forward = "pages/authoring/parts/addbasiclti"; + break; + case CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE: + forward = "pages/authoring/parts/addcommoncartridge"; + break; + default: + forward = null; + break; + } + return forward; + } + + /** + * This method will populate commonCartridge item information to its form for edit use. + * + * @param itemIdx + * @param item + * @param form + * @param request + */ + private void populateItemToForm(int itemIdx, CommonCartridgeItem item, CommonCartridgeItemForm form, + HttpServletRequest request) { + form.setDescription(item.getDescription()); + form.setTitle(item.getTitle()); + if (itemIdx >= 0) { + form.setItemIndex(new Integer(itemIdx).toString()); + } + + if (StringUtils.isBlank(item.getLaunchUrl()) && StringUtils.isNotBlank(item.getSecureLaunchUrl())) { + form.setUrl(item.getSecureLaunchUrl()); + } else { + form.setUrl(item.getLaunchUrl()); + } + form.setKey(item.getKey()); + form.setSecret(item.getSecret()); + form.setCustomStr(item.getCustomStr()); + form.setButtonText(item.getButtonText()); + form.setOpenUrlNewWindow(item.isOpenUrlNewWindow()); + form.setFrameHeight(item.getFrameHeight()); + + // FOR requirment from LDEV-754 + // add extra blank line for instructions + // for(int idx=0;idx items = null; + if (itemForm.getFile() != null) { + try { + CommonCartridgeItem itemTemp = new CommonCartridgeItem(); + items = commonCartridgeService.uploadCommonCartridgeFile(itemTemp, itemForm.getFile()); + } catch (UploadCommonCartridgeFileException e) { + throw e; + } + } + + for (CommonCartridgeItem item : items) { + item.setCreateDate(new Timestamp(new Date().getTime())); + item.setType(CommonCartridgeConstants.RESOURCE_TYPE_BASIC_LTI); + item.setCreateByAuthor(true); + item.setHide(false); + //item.setDescription(itemForm.getDescription()); + } + + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(itemForm.getSessionMapID()); + List uploadedCartridgeResources = getUploadedCartridgeResources(sessionMap); + uploadedCartridgeResources.clear(); + uploadedCartridgeResources.addAll(items); + } + + /** + * Extract web from content to commonCartridge item. + * + * @param request + * @param itemForm + * @throws CommonCartridgeApplicationException + */ + private void extractFormToCommonCartridgeItem(HttpServletRequest request, CommonCartridgeItemForm itemForm) + throws Exception { + /* + * BE CAREFUL: This method will copy nessary info from request form to a old or new CommonCartridgeItem + * instance. It gets all info EXCEPT CommonCartridgeItem.createDate and CommonCartridgeItem.createBy, which need + * be set when persisting this commonCartridge item. + */ + + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(itemForm.getSessionMapID()); + // check whether it is "edit(old item)" or "add(new item)" + SortedSet commonCartridgeList = getCommonCartridgeItemList(sessionMap); + int itemIdx = NumberUtils.stringToInt(itemForm.getItemIndex(), -1); + CommonCartridgeItem item = null; + + if (itemIdx == -1) { // add + item = new CommonCartridgeItem(); + item.setCreateDate(new Timestamp(new Date().getTime())); + commonCartridgeList.add(item); + } else { // edit + List rList = new ArrayList<>(commonCartridgeList); + item = rList.get(itemIdx); + } + short type = itemForm.getItemType(); + item.setType(itemForm.getItemType()); + + item.setTitle(itemForm.getTitle()); + item.setCreateByAuthor(true); + item.setHide(false); + + if (type == CommonCartridgeConstants.RESOURCE_TYPE_BASIC_LTI) { + + if (StringUtils.isBlank(item.getLaunchUrl()) && StringUtils.isNotBlank(item.getSecureLaunchUrl())) { + item.setSecureLaunchUrl(itemForm.getUrl()); + } else { + item.setLaunchUrl(itemForm.getUrl()); + } + + item.setKey(itemForm.getKey()); + item.setSecret(itemForm.getSecret()); + item.setButtonText(itemForm.getButtonText()); + item.setOpenUrlNewWindow(itemForm.isOpenUrlNewWindow()); + item.setFrameHeight(itemForm.getFrameHeight()); + item.setCustomStr(itemForm.getCustomStr()); + } + // if(type == CommonCartridgeConstants.RESOURCE_TYPE_WEBSITE + // ||itemForm.getItemType() == CommonCartridgeConstants.RESOURCE_TYPE_LEARNING_OBJECT){ + item.setDescription(itemForm.getDescription()); + // } + + } + + /** + * Vaidate commonCartridge item regards to their type (url/file/learning object/website zip file) + * + * @param itemForm + * @return + */ + private MultiValueMap validateCommonCartridgeItem(CommonCartridgeItemForm itemForm) { + MultiValueMap errorMap = new LinkedMultiValueMap<>(); + + if (itemForm.getItemType() == CommonCartridgeConstants.RESOURCE_TYPE_BASIC_LTI) { + if (StringUtils.isBlank(itemForm.getTitle())) { + errorMap.add("GLOBAL", messageService.getMessage(CommonCartridgeConstants.ERROR_MSG_TITLE_BLANK)); + } + + if (StringUtils.isBlank(itemForm.getUrl())) { + errorMap.add("GLOBAL", messageService.getMessage(CommonCartridgeConstants.ERROR_MSG_URL_BLANK)); + // URL validation: Commom URL validate(1.3.0) work not very well: it can not support http:// + // address:port format!!! + // UrlValidator validator = new UrlValidator(); + // if(!validator.isValid(itemForm.getUrl())) + // errors.add(ActionMessages.GLOBAL_MESSAGE,new + // ActionMessage(CommonCartridgeConstants.ERROR_MSG_INVALID_URL)); + } + } + // if(itemForm.getItemType() == CommonCartridgeConstants.RESOURCE_TYPE_WEBSITE + // ||itemForm.getItemType() == CommonCartridgeConstants.RESOURCE_TYPE_LEARNING_OBJECT){ + // if(StringUtils.isBlank(itemForm.getDescription())) + // errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(CommonCartridgeConstants.ERROR_MSG_DESC_BLANK)); + // } + if (itemForm.getItemType() == CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE) { + // validate item size + FileValidatorSpringUtil.validateFileSize(itemForm.getFile(), true); + // for edit validate: file already exist + if (!itemForm.isHasFile() + && (itemForm.getFile() == null || StringUtils.isEmpty(itemForm.getFile().getName()))) { + errorMap.add("GLOBAL", messageService.getMessage(CommonCartridgeConstants.ERROR_MSG_FILE_BLANK)); + } + } + return errorMap; + } + + @RequestMapping("/initPedagogicalPlannerForm") + public String initPedagogicalPlannerForm( + @ModelAttribute("pedagogicalPlannerForm") CommonCartridgePedagogicalPlannerForm pedagogicalPlannerForm, + HttpServletRequest request) { + Long toolContentID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + CommonCartridge taskList = commonCartridgeService.getCommonCartridgeByContentId(toolContentID); + String command = WebUtil.readStrParam(request, AttributeNames.PARAM_COMMAND, true); + if (command == null) { + pedagogicalPlannerForm.fillForm(taskList); + String contentFolderId = WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID); + pedagogicalPlannerForm.setContentFolderID(contentFolderId); + return "pages/authoring/pedagogicalPlannerForm"; + } + + return null; + + } + + @RequestMapping(path = "/saveOrUpdatePedagogicalPlannerForm", method = RequestMethod.POST) + public String saveOrUpdatePedagogicalPlannerForm( + @ModelAttribute("pedagogicalPlannerForm") CommonCartridgePedagogicalPlannerForm pedagogicalPlannerForm, + HttpServletRequest request) throws IOException { + MultiValueMap errorMap = pedagogicalPlannerForm.validate(); + if (errorMap.isEmpty()) { + CommonCartridge taskList = commonCartridgeService + .getCommonCartridgeByContentId(pedagogicalPlannerForm.getToolContentID()); + taskList.setInstructions(pedagogicalPlannerForm.getInstructions()); + + int itemIndex = 0; + String title = null; + CommonCartridgeItem commonCartridgeItem = null; + List newItems = new LinkedList<>(); + Set commonCartridgeItems = taskList.getCommonCartridgeItems(); + Iterator taskListItemIterator = commonCartridgeItems.iterator(); + // We need to reverse the order, since the items are delivered newest-first + LinkedList reversedCommonCartridgeItems = new LinkedList<>(); + while (taskListItemIterator.hasNext()) { + reversedCommonCartridgeItems.addFirst(taskListItemIterator.next()); + } + taskListItemIterator = reversedCommonCartridgeItems.iterator(); + do { + title = pedagogicalPlannerForm.getTitle(itemIndex); + if (StringUtils.isEmpty(title)) { + pedagogicalPlannerForm.removeItem(itemIndex); + } else { + if (taskListItemIterator.hasNext()) { + commonCartridgeItem = taskListItemIterator.next(); + } else { + commonCartridgeItem = new CommonCartridgeItem(); + commonCartridgeItem.setCreateByAuthor(true); + Date currentDate = new Date(); + commonCartridgeItem.setCreateDate(currentDate); + + HttpSession session = SessionManager.getSession(); + UserDTO user = (UserDTO) session.getAttribute(AttributeNames.USER); + CommonCartridgeUser taskListUser = commonCartridgeService.getUserByIDAndContent( + new Long(user.getUserID().intValue()), pedagogicalPlannerForm.getToolContentID()); + commonCartridgeItem.setCreateBy(taskListUser); + + newItems.add(commonCartridgeItem); + } + commonCartridgeItem.setTitle(title); + Short type = pedagogicalPlannerForm.getType(itemIndex); + commonCartridgeItem.setType(type); + boolean hasFile = commonCartridgeItem.getFileUuid() != null; + if (type.equals(CommonCartridgeConstants.RESOURCE_TYPE_BASIC_LTI)) { + commonCartridgeItem.setUrl(pedagogicalPlannerForm.getUrl(itemIndex)); + if (hasFile) { + commonCartridgeItem.setFileName(null); + commonCartridgeItem.setFileUuid(null); + commonCartridgeItem.setFileVersionId(null); + commonCartridgeItem.setFileType(null); + } + } else if (type.equals(CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE)) { + MultipartFile file = pedagogicalPlannerForm.getFile(itemIndex); + commonCartridgeItem.setUrl(null); + if (file != null) { + try { + if (hasFile) { + // delete the old file + commonCartridgeService.deleteFromRepository(commonCartridgeItem.getFileUuid(), + commonCartridgeItem.getFileVersionId()); + } + commonCartridgeService.uploadCommonCartridgeFile(commonCartridgeItem, file); + } catch (Exception e) { + AuthoringController.log.error(e); + ActionMessage error = new ActionMessage("error.msg.io.exception"); + errorMap.add("GLOBAL", messageService.getMessage("error.msg.io.exception")); + request.setAttribute("erroeMap", errorMap); + pedagogicalPlannerForm.setValid(false); + return "pages/authoring/pedagogicalPlannerForm"; + } + } + pedagogicalPlannerForm.setFileName(itemIndex, commonCartridgeItem.getFileName()); + pedagogicalPlannerForm.setFileUuid(itemIndex, commonCartridgeItem.getFileUuid()); + pedagogicalPlannerForm.setFileVersion(itemIndex, commonCartridgeItem.getFileVersionId()); + pedagogicalPlannerForm.setFile(itemIndex, null); + } + itemIndex++; + } + + } while (title != null); + // we need to clear it now, otherwise we get Hibernate error (item re-saved by cascade) + taskList.getCommonCartridgeItems().clear(); + while (taskListItemIterator.hasNext()) { + commonCartridgeItem = taskListItemIterator.next(); + taskListItemIterator.remove(); + commonCartridgeService.deleteCommonCartridgeItem(commonCartridgeItem.getUid()); + } + reversedCommonCartridgeItems.addAll(newItems); + + taskList.getCommonCartridgeItems().addAll(reversedCommonCartridgeItems); + commonCartridgeService.saveOrUpdateCommonCartridge(taskList); + } else { + request.setAttribute("eerorMap", errorMap); + } + return "pages/authoring/pedagogicalPlannerForm"; + } + + @RequestMapping("/createPedagogicalPlannerItem") + public String createPedagogicalPlannerItem( + @ModelAttribute("pedagogicalPlannerForm") CommonCartridgePedagogicalPlannerForm pedagogicalPlannerForm, + HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + int insertIndex = pedagogicalPlannerForm.getItemCount(); + pedagogicalPlannerForm.setTitle(insertIndex, ""); + pedagogicalPlannerForm.setType(insertIndex, + new Short(request.getParameter(CommonCartridgeConstants.ATTR_ADD_RESOURCE_TYPE))); + pedagogicalPlannerForm.setUrl(insertIndex, null); + pedagogicalPlannerForm.setFileName(insertIndex, null); + pedagogicalPlannerForm.setFile(insertIndex, null); + pedagogicalPlannerForm.setFileUuid(insertIndex, null); + pedagogicalPlannerForm.setFileVersion(insertIndex, null); + return "pages/authoring/pedagogicalPlannerForm"; + } +} Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/ClearSessionController.java =================================================================== diff -u --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/ClearSessionController.java (revision 0) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/ClearSessionController.java (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -0,0 +1,62 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.commonCartridge.web.controller; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.lamsfoundation.lams.authoring.web.LamsAuthoringFinishController; +import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.context.WebApplicationContext; + +/** + * This class give a chance to clear HttpSession when user save/close authoring page. + * + * @author Andrey Balan + */ +@Controller +public class ClearSessionController extends LamsAuthoringFinishController { + + @Autowired + private WebApplicationContext applicationContext; + + @RequestMapping("/clearsession") + public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException { + super.execute(request, response, applicationContext); + } + + @Override + public void clearSession(String customiseSessionID, HttpSession session, ToolAccessMode mode) { + if (mode.isAuthor()) { + session.removeAttribute(customiseSessionID); + } + } + +} Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/LearningController.java =================================================================== diff -u --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/LearningController.java (revision 0) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/LearningController.java (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -0,0 +1,472 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.commonCartridge.web.controller; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.learning.web.bean.ActivityPositionDTO; +import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; +import org.lamsfoundation.lams.notebook.model.NotebookEntry; +import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; +import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.commonCartridge.CommonCartridgeConstants; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridge; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeItem; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeSession; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeUser; +import org.lamsfoundation.lams.tool.commonCartridge.service.CommonCartridgeApplicationException; +import org.lamsfoundation.lams.tool.commonCartridge.service.ICommonCartridgeService; +import org.lamsfoundation.lams.tool.commonCartridge.util.CommonCartridgeItemComparator; +import org.lamsfoundation.lams.tool.commonCartridge.web.form.ReflectionForm; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.CentralConstants; +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; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.context.WebApplicationContext; + +/** + * + * @author Andrey Balan + */ +@Controller +@RequestMapping("/learning") +public class LearningController { + + private static Logger log = Logger.getLogger(LearningController.class); + + @Autowired + private WebApplicationContext applicationContext; + + @Autowired + @Qualifier("commonCartridgeService") + private ICommonCartridgeService commonCartridgeService; + + @Autowired + @Qualifier("commonCartridgeMessageService") + private MessageService messageService; + + /** + * Read commonCartridge data from database and put them into HttpSession. It will redirect to init.do directly after + * this + * method run successfully. + * + * This method will avoid read database again and lost un-saved resouce item lost when user "refresh page", + * + */ + + @RequestMapping("/start") + private String start(HttpServletRequest request) { + + // initial Session Map + SessionMap sessionMap = new SessionMap<>(); + request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); + + // save toolContentID into HTTPSession + ToolAccessMode mode = WebUtil.readToolAccessModeParam(request, AttributeNames.PARAM_MODE, true); + + Long sessionId = new Long(request.getParameter(CommonCartridgeConstants.PARAM_TOOL_SESSION_ID)); + + request.setAttribute(CommonCartridgeConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(AttributeNames.PARAM_TOOL_SESSION_ID, sessionId); + + // get back the commonCartridge and item list and display them on page + CommonCartridgeUser commonCartridgeUser = null; + if (mode != null && mode.isTeacher()) { + // monitoring mode - user is specified in URL + // commonCartridgeUser may be null if the user was force completed. + commonCartridgeUser = getSpecifiedUser(commonCartridgeService, sessionId, + WebUtil.readIntParam(request, AttributeNames.PARAM_USER_ID, false)); + } else { + commonCartridgeUser = getCurrentUser(commonCartridgeService, sessionId); + } + + CommonCartridge commonCartridge = commonCartridgeService.getCommonCartridgeBySessionId(sessionId); + List items = new ArrayList<>(); + items.addAll(commonCartridge.getCommonCartridgeItems()); + + // check whehter finish lock is on/off + boolean lock = commonCartridge.getLockWhenFinished() && commonCartridgeUser != null + && commonCartridgeUser.isSessionFinished(); + + // check whether there is only one commonCartridge item and run auto flag is true or not. + boolean runAuto = false; + Long runAutoItemUid = null; + int itemsNumber = 0; + if (commonCartridge.getCommonCartridgeItems() != null) { + itemsNumber = commonCartridge.getCommonCartridgeItems().size(); + if (commonCartridge.isRunAuto() && itemsNumber == 1) { + CommonCartridgeItem item = (CommonCartridgeItem) commonCartridge.getCommonCartridgeItems().iterator() + .next(); + // only visible item can be run auto. + if (!item.isHide()) { + runAuto = true; + runAutoItemUid = item.getUid(); + } + } + } + + // get notebook entry + String entryText = new String(); + if (commonCartridgeUser != null) { + NotebookEntry notebookEntry = commonCartridgeService.getEntry(sessionId, + CoreNotebookConstants.NOTEBOOK_TOOL, CommonCartridgeConstants.TOOL_SIGNATURE, + commonCartridgeUser.getUserId().intValue()); + if (notebookEntry != null) { + entryText = notebookEntry.getEntry(); + } + } + + // basic information + sessionMap.put(CommonCartridgeConstants.ATTR_TITLE, commonCartridge.getTitle()); + sessionMap.put(CommonCartridgeConstants.ATTR_RESOURCE_INSTRUCTION, commonCartridge.getInstructions()); + sessionMap.put(CommonCartridgeConstants.ATTR_FINISH_LOCK, lock); + sessionMap.put(CommonCartridgeConstants.ATTR_LOCK_ON_FINISH, commonCartridge.getLockWhenFinished()); + sessionMap.put(CommonCartridgeConstants.ATTR_USER_FINISHED, + commonCartridgeUser != null && commonCartridgeUser.isSessionFinished()); + + sessionMap.put(AttributeNames.PARAM_TOOL_SESSION_ID, sessionId); + sessionMap.put(AttributeNames.ATTR_MODE, mode); + // reflection information + sessionMap.put(CommonCartridgeConstants.ATTR_REFLECTION_ON, commonCartridge.isReflectOnActivity()); + sessionMap.put(CommonCartridgeConstants.ATTR_REFLECTION_INSTRUCTION, commonCartridge.getReflectInstructions()); + sessionMap.put(CommonCartridgeConstants.ATTR_REFLECTION_ENTRY, entryText); + sessionMap.put(CommonCartridgeConstants.ATTR_RUN_AUTO, new Boolean(runAuto)); + + // add define later support + if (commonCartridge.isDefineLater()) { + return "pages/learning/definelater"; + } + + // set contentInUse flag to true! + commonCartridge.setContentInUse(true); + commonCartridge.setDefineLater(false); + commonCartridgeService.saveOrUpdateCommonCartridge(commonCartridge); + + ActivityPositionDTO activityPosition = LearningWebUtil.putActivityPositionInRequestByToolSessionId(sessionId, + request, applicationContext.getServletContext()); + sessionMap.put(AttributeNames.ATTR_ACTIVITY_POSITION, activityPosition); + + // init commonCartridge item list + SortedSet commonCartridgeItemList = getCommonCartridgeItemList(sessionMap); + commonCartridgeItemList.clear(); + if (items != null) { + // remove hidden items. + for (CommonCartridgeItem item : items) { + // becuase in webpage will use this login name. Here is just + // initial it to avoid session close error in proxy object. + if (item.getCreateBy() != null) { + item.getCreateBy().getLoginName(); + } + if (!item.isHide()) { + commonCartridgeItemList.add(item); + } + } + } + + // set complete flag for display purpose + if (commonCartridgeUser != null) { + commonCartridgeService.retrieveComplete(commonCartridgeItemList, commonCartridgeUser); + } + sessionMap.put(CommonCartridgeConstants.ATTR_RESOURCE, commonCartridge); + + if (runAuto) { + String redirectURL = "redirect:/reviewItem.do"; + redirectURL = WebUtil.appendParameterToURL(redirectURL, CommonCartridgeConstants.ATTR_SESSION_MAP_ID, + sessionMap.getSessionID()); + redirectURL = WebUtil.appendParameterToURL(redirectURL, CommonCartridgeConstants.ATTR_TOOL_SESSION_ID, + sessionId.toString()); + redirectURL = WebUtil.appendParameterToURL(redirectURL, CommonCartridgeConstants.ATTR_RESOURCE_ITEM_UID, + runAutoItemUid.toString()); + redirectURL = WebUtil.appendParameterToURL(redirectURL, CentralConstants.PARAM_MODE, mode.toString()); + return redirectURL; + + } else { + return "pages/learning/learning"; + } + } + + /** + * Finish learning session. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping("/finish") + private String finish(@ModelAttribute("reflectionForm") ReflectionForm reflectionForm, HttpServletRequest request) { + + // get back SessionMap + String sessionMapID = request.getParameter(CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + + // get mode and ToolSessionID from sessionMAP + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + + // auto run mode, when use finish the only one commonCartridge item, mark it as complete then finish this activity as + // well. + String commonCartridgeItemUid = request.getParameter(CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID); + if (commonCartridgeItemUid != null) { + doComplete(request); + // NOTE:So far this flag is useless(31/08/2006). + // set flag, then finish page can know redir target is parent(AUTO_RUN) or self(normal) + request.setAttribute(CommonCartridgeConstants.ATTR_RUN_AUTO, true); + } else { + request.setAttribute(CommonCartridgeConstants.ATTR_RUN_AUTO, false); + } + + if (!validateBeforeFinish(request, sessionMapID)) { + return "pages/learning/learning"; + } + + // get sessionId from HttpServletRequest + String nextActivityUrl = null; + try { + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + Long userID = new Long(user.getUserID().longValue()); + + nextActivityUrl = commonCartridgeService.finishToolSession(sessionId, userID); + request.setAttribute(CommonCartridgeConstants.ATTR_NEXT_ACTIVITY_URL, nextActivityUrl); + } catch (CommonCartridgeApplicationException e) { + LearningController.log.error("Failed get next activity url:" + e.getMessage()); + } + + return "pages/learning/finish"; + } + + /** + * Display empty reflection form. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping("/newReflection") + private String newReflection(@ModelAttribute("reflectionForm") ReflectionForm reflectionForm, + HttpServletRequest request) { + + // get session value + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + if (!validateBeforeFinish(request, sessionMapID)) { + return "pages/learning/learning"; + } + + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + + reflectionForm.setUserID(user.getUserID()); + reflectionForm.setSessionMapID(sessionMapID); + + // get the existing reflection entry + + SessionMap map = (SessionMap) request.getSession().getAttribute(sessionMapID); + Long toolSessionID = (Long) map.get(AttributeNames.PARAM_TOOL_SESSION_ID); + NotebookEntry entry = commonCartridgeService.getEntry(toolSessionID, CoreNotebookConstants.NOTEBOOK_TOOL, + CommonCartridgeConstants.TOOL_SIGNATURE, user.getUserID()); + + if (entry != null) { + reflectionForm.setEntryText(entry.getEntry()); + } + + return "pages/learning/notebook"; + } + + /** + * Submit reflection form input database. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping(path = "/submitReflection", method = RequestMethod.POST) + private String submitReflection(@ModelAttribute("reflectionForm") ReflectionForm reflectionForm, + HttpServletRequest request) { + Integer userId = reflectionForm.getUserID(); + + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + + // check for existing notebook entry + NotebookEntry entry = commonCartridgeService.getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, + CommonCartridgeConstants.TOOL_SIGNATURE, userId); + + if (entry == null) { + // create new entry + commonCartridgeService.createNotebookEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, + CommonCartridgeConstants.TOOL_SIGNATURE, userId, reflectionForm.getEntryText()); + } else { + // update existing entry + entry.setEntry(reflectionForm.getEntryText()); + entry.setLastModified(new Date()); + commonCartridgeService.updateEntry(entry); + } + + return finish(reflectionForm, request); + } + + // ************************************************************************************* + // Private method + // ************************************************************************************* + private boolean validateBeforeFinish(HttpServletRequest request, String sessionMapID) { + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + Long userID = new Long(user.getUserID().longValue()); + + int miniViewFlag = commonCartridgeService.checkMiniView(sessionId, userID); + // if current user view less than reqired view count number, then just return error message. + if (miniViewFlag > 0) { + MultiValueMap errorMap = new LinkedMultiValueMap<>(); + errorMap.add("GLOBAL", messageService.getMessage("lable.learning.minimum.view.number.less", + new Object[] { miniViewFlag })); + request.setAttribute("errorMap", errorMap); + return false; + } + + return true; + } + + /** + * List save current commonCartridge items. + * + * @param request + * @return + */ + private SortedSet getCommonCartridgeItemList(SessionMap sessionMap) { + SortedSet list = (SortedSet) sessionMap + .get(CommonCartridgeConstants.ATTR_RESOURCE_ITEM_LIST); + if (list == null) { + list = new TreeSet<>(new CommonCartridgeItemComparator()); + sessionMap.put(CommonCartridgeConstants.ATTR_RESOURCE_ITEM_LIST, list); + } + return list; + } + + /** + * Get java.util.List from HttpSession by given name. + * + * @param request + * @param name + * @return + */ + private List getListFromSession(SessionMap sessionMap, String name) { + List list = (List) sessionMap.get(name); + if (list == null) { + list = new ArrayList(); + sessionMap.put(name, list); + } + return list; + } + + private CommonCartridgeUser getCurrentUser(ICommonCartridgeService service, Long sessionId) { + // try to get form system session + HttpSession ss = SessionManager.getSession(); + // get back login user DTO + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + CommonCartridgeUser commonCartridgeUser = service.getUserByIDAndSession(new Long(user.getUserID().intValue()), + sessionId); + + if (commonCartridgeUser == null) { + CommonCartridgeSession session = service.getCommonCartridgeSessionBySessionId(sessionId); + commonCartridgeUser = new CommonCartridgeUser(user, session); + service.createUser(commonCartridgeUser); + } + return commonCartridgeUser; + } + + private CommonCartridgeUser getSpecifiedUser(ICommonCartridgeService service, Long sessionId, Integer userId) { + CommonCartridgeUser commonCartridgeUser = service.getUserByIDAndSession(new Long(userId.intValue()), sessionId); + if (commonCartridgeUser == null) { + LearningController.log.error( + "Unable to find specified user for commonCartridge activity. Screens are likely to fail. SessionId=" + + sessionId + " UserId=" + userId); + } + return commonCartridgeUser; + } + + /** + * Set complete flag for given commonCartridge item. + * + * @param request + * @param sessionId + */ + private void doComplete(HttpServletRequest request) { + // get back sessionMap + String sessionMapID = request.getParameter(CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + + Long commonCartridgeItemUid = new Long(request.getParameter(CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID)); + HttpSession ss = SessionManager.getSession(); + // get back login user DTO + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + + Long sessionId = (Long) sessionMap.get(CommonCartridgeConstants.ATTR_TOOL_SESSION_ID); + commonCartridgeService.setItemComplete(commonCartridgeItemUid, new Long(user.getUserID().intValue()), + sessionId); + + // set commonCartridge item complete tag + SortedSet commonCartridgeItemList = getCommonCartridgeItemList(sessionMap); + for (CommonCartridgeItem item : commonCartridgeItemList) { + if (item.getUid().equals(commonCartridgeItemUid)) { + item.setComplete(true); + break; + } + } + } + +} Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/MonitoringController.java =================================================================== diff -u --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/MonitoringController.java (revision 0) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/MonitoringController.java (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -0,0 +1,181 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.commonCartridge.web.controller; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.notebook.model.NotebookEntry; +import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; +import org.lamsfoundation.lams.tool.commonCartridge.CommonCartridgeConstants; +import org.lamsfoundation.lams.tool.commonCartridge.dto.ReflectDTO; +import org.lamsfoundation.lams.tool.commonCartridge.dto.Summary; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridge; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeSession; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeUser; +import org.lamsfoundation.lams.tool.commonCartridge.service.ICommonCartridgeService; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.lamsfoundation.lams.web.util.SessionMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/monitoring") +public class MonitoringController { + + public static Logger log = Logger.getLogger(MonitoringController.class); + + @Autowired + @Qualifier("commonCartridgeService") + private ICommonCartridgeService commonCartridgeService; + + @RequestMapping("/hideitem") + private String hideitem(HttpServletRequest request) { + + // get back SessionMap + String sessionMapID = request.getParameter(CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(CommonCartridgeConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + Long toolContentId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_CONTENT_ID); + + Long itemUid = WebUtil.readLongParam(request, CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID); + commonCartridgeService.setItemVisible(itemUid, toolContentId, false); + + // update session value + List groupList = (List) sessionMap.get(CommonCartridgeConstants.ATTR_SUMMARY_LIST); + if (groupList != null) { + for (List group : groupList) { + for (Summary sum : group) { + if (itemUid.equals(sum.getItemUid())) { + sum.setItemHide(true); + break; + } + } + } + } + + return "pages/monitoring/monitoring"; + } + + @RequestMapping("/showitem") + private String showitem(HttpServletRequest request) { + + // get back SessionMap + String sessionMapID = request.getParameter(CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(CommonCartridgeConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + Long toolContentId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_CONTENT_ID); + + Long itemUid = WebUtil.readLongParam(request, CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID); + commonCartridgeService.setItemVisible(itemUid, toolContentId, true); + + // update session value + List groupList = (List) sessionMap.get(CommonCartridgeConstants.ATTR_SUMMARY_LIST); + if (groupList != null) { + for (List group : groupList) { + for (Summary sum : group) { + if (itemUid.equals(sum.getItemUid())) { + sum.setItemHide(false); + break; + } + } + } + } + return "pages/monitoring/monitoring"; + } + + @RequestMapping("/summary") + private String summary(HttpServletRequest request) { + // initial Session Map + SessionMap sessionMap = new SessionMap<>(); + request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); + request.setAttribute(CommonCartridgeConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + // save contentFolderID into session + sessionMap.put(AttributeNames.PARAM_CONTENT_FOLDER_ID, + WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID)); + + Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + List> summaryList = commonCartridgeService.getSummary(contentId); + + CommonCartridge commonCartridge = commonCartridgeService.getCommonCartridgeByContentId(contentId); + + Map> relectList = commonCartridgeService.getReflectList(contentId, false); + + // cache into sessionMap + sessionMap.put(CommonCartridgeConstants.ATTR_SUMMARY_LIST, summaryList); + sessionMap.put(CommonCartridgeConstants.PAGE_EDITABLE, commonCartridge.isContentInUse()); + sessionMap.put(CommonCartridgeConstants.ATTR_RESOURCE, commonCartridge); + sessionMap.put(CommonCartridgeConstants.ATTR_TOOL_CONTENT_ID, contentId); + sessionMap.put(CommonCartridgeConstants.ATTR_REFLECT_LIST, relectList); + return "pages/monitoring/monitoring"; + } + + @RequestMapping("/listuser") + private String listuser(HttpServletRequest request) { + Long sessionId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID); + Long itemUid = WebUtil.readLongParam(request, CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID); + + // get user list by given item uid + List list = commonCartridgeService.getUserListBySessionItem(sessionId, itemUid); + + // set to request + request.setAttribute(CommonCartridgeConstants.ATTR_USER_LIST, list); + return "pages/monitoring/userlist"; + } + + @RequestMapping("/viewReflection") + private String viewReflection(HttpServletRequest request) { + + Long uid = WebUtil.readLongParam(request, CommonCartridgeConstants.ATTR_USER_UID); + Long sessionID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID); + + CommonCartridgeUser user = commonCartridgeService.getUser(uid); + NotebookEntry notebookEntry = commonCartridgeService.getEntry(sessionID, CoreNotebookConstants.NOTEBOOK_TOOL, + CommonCartridgeConstants.TOOL_SIGNATURE, user.getUserId().intValue()); + + CommonCartridgeSession session = commonCartridgeService.getCommonCartridgeSessionBySessionId(sessionID); + + ReflectDTO refDTO = new ReflectDTO(user); + if (notebookEntry == null) { + refDTO.setFinishReflection(false); + refDTO.setReflect(null); + } else { + refDTO.setFinishReflection(true); + refDTO.setReflect(notebookEntry.getEntry()); + } + refDTO.setReflectInstrctions(session.getCommonCartridge().getReflectInstructions()); + + request.setAttribute("userDTO", refDTO); + return "pages/monitoring/notebook"; + } +} Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/ViewItemController.java =================================================================== diff -u --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/ViewItemController.java (revision 0) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/controller/ViewItemController.java (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -0,0 +1,314 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.commonCartridge.web.controller; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.regex.Pattern; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.commons.lang.math.NumberUtils; +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.commonCartridge.CommonCartridgeConstants; +import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeItem; +import org.lamsfoundation.lams.tool.commonCartridge.service.ICommonCartridgeService; +import org.lamsfoundation.lams.tool.commonCartridge.util.CommonCartridgeItemComparator; +import org.lamsfoundation.lams.tool.commonCartridge.util.CommonCartridgeWebUtils; +import org.lamsfoundation.lams.tool.commonCartridge.util.LamsBasicLTIUtil; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +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; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; + +@Controller +public class ViewItemController { + + private static final Logger log = Logger.getLogger(ViewItemController.class); + + @Autowired + private WebApplicationContext applicationContext; + + @Autowired + @Qualifier("commonCartridgeService") + private ICommonCartridgeService commonCartridgeService;; + + /** + * Open url in popup window page. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping("/openUrlPopup") + private String openUrlPopup(HttpServletRequest request) { + String mode = request.getParameter(AttributeNames.ATTR_MODE); + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + CommonCartridgeItem item = getCommonCartridgeItem(request, sessionMap, mode); + int itemIdx = NumberUtils.stringToInt(request.getParameter(CommonCartridgeConstants.PARAM_ITEM_INDEX)); + + String launchBasicLTIUrl; + if (CommonCartridgeConstants.MODE_AUTHOR_SESSION.equals(mode)) { + launchBasicLTIUrl = "/launchBasicLTI.do?" + AttributeNames.ATTR_MODE + "=" + mode + "&" + + CommonCartridgeConstants.PARAM_ITEM_INDEX + "=" + itemIdx + "&" + + CommonCartridgeConstants.ATTR_SESSION_MAP_ID + "=" + sessionMapID; + } else { + launchBasicLTIUrl = "/launchBasicLTI.do?" + CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID + "=" + + item.getUid() + "&" + CommonCartridgeConstants.ATTR_SESSION_MAP_ID + "=" + sessionMapID; + } + request.setAttribute(CommonCartridgeConstants.PARAM_OPEN_URL_POPUP, launchBasicLTIUrl); + request.setAttribute(CommonCartridgeConstants.PARAM_TITLE, item.getTitle()); + return "pages/itemreview/openurl"; + } + + /** + * Return next instrucion to page. It need four input parameters, mode, itemIndex or itemUid, and insIdx. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping("/nextInstruction") + private String nextInstruction(HttpServletRequest request) { + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + request.setAttribute(CommonCartridgeConstants.ATTR_SESSION_MAP_ID, sessionMapID); + return "pages/itemreview/instructionsnav"; + } + + /** + * Display main frame to display instrcution and item content. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws IOException + */ + @RequestMapping("/reviewItem") + private String reviewItem(HttpServletRequest request) throws IOException { + String mode = request.getParameter(AttributeNames.ATTR_MODE); + + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + + CommonCartridgeItem item = getCommonCartridgeItem(request, sessionMap, mode); + + String idStr = request.getParameter(CommonCartridgeConstants.ATTR_TOOL_SESSION_ID); + Long sessionId = NumberUtils.createLong(idStr); + // mark this item access flag if it is learner + if (ToolAccessMode.LEARNER.toString().equals(mode)) { + HttpSession ss = SessionManager.getSession(); + // get back login user DTO + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + commonCartridgeService.setItemAccess(item.getUid(), new Long(user.getUserID().intValue()), sessionId); + } + + if (item == null) { + return "error"; + } + // set url to content frame + + int itemIdx = NumberUtils.stringToInt(request.getParameter(CommonCartridgeConstants.PARAM_ITEM_INDEX)); + + short type = item.getType(); + String url = null; + switch (type) { + case CommonCartridgeConstants.RESOURCE_TYPE_BASIC_LTI: + if (item.isOpenUrlNewWindow()) { + url = "/openUrlPopup.do?"; + } else { + url = "/launchBasicLTI.do?"; + } + if (CommonCartridgeConstants.MODE_AUTHOR_SESSION.equals(mode)) { + url += AttributeNames.ATTR_MODE + "=" + mode + "&" + CommonCartridgeConstants.PARAM_ITEM_INDEX + "=" + + itemIdx + "&" + CommonCartridgeConstants.ATTR_SESSION_MAP_ID + "=" + sessionMapID; + } else { + url += CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID + "=" + item.getUid() + "&" + + CommonCartridgeConstants.ATTR_SESSION_MAP_ID + "=" + sessionMapID; + } + + break; + case CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE: + url = "/download/?uuid=" + item.getFileUuid() + "&preferDownload=false"; + break; + } + request.setAttribute(CommonCartridgeConstants.ATTR_RESOURCE_REVIEW_URL, url); + + // these attribute will be use to instruction navigator page + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(CommonCartridgeConstants.PARAM_ITEM_INDEX, itemIdx); + Long itemUid = NumberUtils.createLong(request.getParameter(CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID)); + request.setAttribute(CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID, itemUid); + request.setAttribute(CommonCartridgeConstants.ATTR_TOOL_SESSION_ID, sessionId); + request.setAttribute(CommonCartridgeConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + return "pages/itemreview/mainframe"; + + } + + // ************************************************************************************* + // Private method + // ************************************************************************************* + /** + * Submit reflection form input database. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws Exception + */ + @RequestMapping("/launchBasicLTI") + @ResponseBody + private void launchBasicLTI(HttpServletRequest request, HttpServletResponse response) throws IOException { + String mode = request.getParameter(AttributeNames.ATTR_MODE); + String sessionMapID = WebUtil.readStrParam(request, CommonCartridgeConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + CommonCartridgeItem item = getCommonCartridgeItem(request, sessionMap, mode); + + WebApplicationContext wac = WebApplicationContextUtils + .getRequiredWebApplicationContext(applicationContext.getServletContext()); + MessageService messageService = (MessageService) wac.getBean("commonCartridgeMessageService"); + + // Get the post data for the placement + String returnValues = LamsBasicLTIUtil.postLaunchHTML(commonCartridgeService, messageService, item); + + try { + response.setContentType("text/html; charset=UTF-8"); + response.setCharacterEncoding("utf-8"); + response.addDateHeader("Expires", System.currentTimeMillis() - (1000L * 60L * 60L * 24L * 365L)); + response.addDateHeader("Last-Modified", System.currentTimeMillis()); + response.addHeader("Cache-Control", + "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0"); + response.addHeader("Pragma", "no-cache"); + ServletOutputStream out = response.getOutputStream(); + + out.println(""); + out.println(""); + out.println("\n"); + out.println(""); + out.println("\n"); + out.println(returnValues); + out.println("\n"); + + } catch (IOException e) { + e.printStackTrace(); + throw e; + } + + } + + /** + * Return resoruce item according to ToolAccessMode. + * + * @param request + * @param sessionMap + * @param mode + * @return + */ + private CommonCartridgeItem getCommonCartridgeItem(HttpServletRequest request, SessionMap sessionMap, String mode) { + CommonCartridgeItem item = null; + if (CommonCartridgeConstants.MODE_AUTHOR_SESSION.equals(mode)) { + int itemIdx = NumberUtils.stringToInt(request.getParameter(CommonCartridgeConstants.PARAM_ITEM_INDEX), 0); + // authoring: does not save item yet, so only has ItemList from session and identity by Index + List commonCartridgeList = new ArrayList<>(getCommonCartridgeItemList(sessionMap)); + item = commonCartridgeList.get(itemIdx); + } else { + Long itemUid = NumberUtils + .createLong(request.getParameter(CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID)); + // get back the commonCartridge and item list and display them on page + item = commonCartridgeService.getCommonCartridgeItemByUid(itemUid); + } + return item; + } + + private static Pattern wikipediaPattern = Pattern.compile("wikipedia", + Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); + + private Object getReviewUrl(CommonCartridgeItem item, String sessionMapID, String mode, int itemIdx) { + short type = item.getType(); + String url = null; + switch (type) { + case CommonCartridgeConstants.RESOURCE_TYPE_BASIC_LTI: + if (item.isOpenUrlNewWindow()) { + if (CommonCartridgeConstants.MODE_AUTHOR_SESSION.equals(mode)) { + url = "/openUrlPopup.do?" + AttributeNames.ATTR_MODE + "=" + mode + "&" + + CommonCartridgeConstants.PARAM_ITEM_INDEX + "=" + itemIdx + "&" + + CommonCartridgeConstants.ATTR_SESSION_MAP_ID + "=" + sessionMapID; + } else { + url = "/openUrlPopup.do?" + CommonCartridgeConstants.PARAM_RESOURCE_ITEM_UID + "=" + + item.getUid() + "&" + CommonCartridgeConstants.ATTR_SESSION_MAP_ID + "=" + + sessionMapID; + } + } else { + url = CommonCartridgeWebUtils.protocol(item.getUrl()); + } + break; + case CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE: + url = "/download/?uuid=" + item.getFileUuid() + "&preferDownload=false"; + break; + } + return url; + } + + /** + * List save current commonCartridge items. + * + * @param request + * @return + */ + private SortedSet getCommonCartridgeItemList(SessionMap sessionMap) { + SortedSet list = (SortedSet) sessionMap + .get(CommonCartridgeConstants.ATTR_RESOURCE_ITEM_LIST); + if (list == null) { + list = new TreeSet<>(new CommonCartridgeItemComparator()); + sessionMap.put(CommonCartridgeConstants.ATTR_RESOURCE_ITEM_LIST, list); + } + return list; + } + +} Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/AdminForm.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/AdminForm.java (.../AdminForm.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/AdminForm.java (.../AdminForm.java) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -20,36 +20,20 @@ * **************************************************************** */ - package org.lamsfoundation.lams.tool.commonCartridge.web.form; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; - /** * * * @author Andrey Balan */ -public class AdminForm extends ActionForm { +public class AdminForm { private static final long serialVersionUID = 414425664356226L; private boolean allowExposeUserName; private boolean allowExposeUserEmail; - @Override - public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) { - ActionErrors ac = new ActionErrors(); - ac.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("this is an error")); - return ac; - } - public boolean isAllowExposeUserName() { return allowExposeUserName; } Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/CommonCartridgeForm.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/CommonCartridgeForm.java (.../CommonCartridgeForm.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/CommonCartridgeForm.java (.../CommonCartridgeForm.java) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -27,9 +27,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridge; /** @@ -40,7 +37,7 @@ * * User: Dapeng.Ni */ -public class CommonCartridgeForm extends ActionForm { +public class CommonCartridgeForm { private static final long serialVersionUID = 3599879328307492312L; private static Logger logger = Logger.getLogger(CommonCartridgeForm.class.getName()); @@ -49,8 +46,9 @@ private String sessionMapID; private String contentFolderID; private int currentTab; - private FormFile offlineFile; - private FormFile onlineFile; + private String offlineFile; + private String onlineFile; + private String mode; private CommonCartridge commonCartridge; @@ -68,9 +66,7 @@ } } - @Override - public void reset(ActionMapping mapping, HttpServletRequest request) { - String param = mapping.getParameter(); + public void reset(HttpServletRequest request, String param) { // if it is start page, all data read out from database or current session // so need not reset checkbox to refresh value! if (!StringUtils.equals(param, "start") && !StringUtils.equals(param, "initPage")) { @@ -89,19 +85,19 @@ this.currentTab = currentTab; } - public FormFile getOfflineFile() { + public String getOfflineFile() { return offlineFile; } - public void setOfflineFile(FormFile offlineFile) { + public void setOfflineFile(String offlineFile) { this.offlineFile = offlineFile; } - public FormFile getOnlineFile() { + public String getOnlineFile() { return onlineFile; } - public void setOnlineFile(FormFile onlineFile) { + public void setOnlineFile(String onlineFile) { this.onlineFile = onlineFile; } @@ -125,4 +121,14 @@ this.contentFolderID = contentFolderID; } + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + + } Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/CommonCartridgeItemForm.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/CommonCartridgeItemForm.java (.../CommonCartridgeItemForm.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/CommonCartridgeItemForm.java (.../CommonCartridgeItemForm.java) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -23,16 +23,15 @@ package org.lamsfoundation.lams.tool.commonCartridge.web.form; -import org.apache.struts.action.ActionForm; -import org.apache.struts.upload.FormFile; +import org.springframework.web.multipart.MultipartFile; /** * CommonCartridge Item Form. * * * @author Steve.Ni */ -public class CommonCartridgeItemForm extends ActionForm { +public class CommonCartridgeItemForm { private String itemIndex; private String sessionMapID; @@ -49,7 +48,7 @@ private Long fileUuid; private Long fileVersionId; private String fileName; - private FormFile file; + private MultipartFile file; private String launchUrl; private String secureLaunchUrl; @@ -67,11 +66,11 @@ this.description = description; } - public FormFile getFile() { + public MultipartFile getFile() { return file; } - public void setFile(FormFile file) { + public void setFile(MultipartFile file) { this.file = file; } Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/CommonCartridgePedagogicalPlannerForm.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/CommonCartridgePedagogicalPlannerForm.java (.../CommonCartridgePedagogicalPlannerForm.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/CommonCartridgePedagogicalPlannerForm.java (.../CommonCartridgePedagogicalPlannerForm.java) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -20,40 +20,45 @@ * **************************************************************** */ - package org.lamsfoundation.lams.tool.commonCartridge.web.form; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.apache.commons.lang.StringUtils; -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; -import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.tool.commonCartridge.CommonCartridgeConstants; import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridge; import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridgeItem; -import org.lamsfoundation.lams.util.FileValidatorUtil; -import org.lamsfoundation.lams.web.planner.PedagogicalPlannerActivityForm; +import org.lamsfoundation.lams.util.FileValidatorSpringUtil; +import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.web.planner.PedagogicalPlannerActivitySpringForm; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.multipart.MultipartFile; /** * */ -public class CommonCartridgePedagogicalPlannerForm extends PedagogicalPlannerActivityForm { +public class CommonCartridgePedagogicalPlannerForm extends PedagogicalPlannerActivitySpringForm { private List title; private List url; - private List file; + private List file; private List fileName; private List fileUuid; private List fileVersion; private List type; private String instructions; private String contentFolderID; - @Override - public ActionMessages validate() { - ActionMessages errors = new ActionMessages(); + @Autowired + @Qualifier("commonCartridgeMessageService") + private MessageService messageService; + + public MultiValueMap validate() { + MultiValueMap errorMap = new LinkedMultiValueMap<>(); boolean allEmpty = true; if (title != null && !title.isEmpty()) { for (int index = 0; index < title.size(); index++) { @@ -64,26 +69,25 @@ // URL should not be blank if (itemType.equals(CommonCartridgeConstants.RESOURCE_TYPE_BASIC_LTI) && StringUtils.isEmpty(url.get(index))) { - ActionMessage error = new ActionMessage("error.planner.url.blank", index + 1); - errors.add(ActionMessages.GLOBAL_MESSAGE, error); + errorMap.add("GLOBAL", + messageService.getMessage("error.planner.url.blank", new Object[] { index + 1 })); } else if (itemType.equals(CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE)) { /* * File should be saved already or it should be provided. This functionality required some * changes in pedagogicalPlanner.js in lams_central (see prepareFormData() there) */ - FileValidatorUtil.validateFileSize(file.get(index), true, errors); + FileValidatorSpringUtil.validateFileSize(file.get(index), true); if (fileUuid.get(index) == null && file.get(index) == null) { - ActionMessage error = new ActionMessage("error.planner.file.blank", index + 1); - errors.add(ActionMessages.GLOBAL_MESSAGE, error); + errorMap.add("GLOBAL", + messageService.getMessage("error.planner.file.blank", new Object[] { index + 1 })); } } } } } if (allEmpty) { - ActionMessage error = new ActionMessage("error.planner.no.resource.save"); - errors.add(ActionMessages.GLOBAL_MESSAGE, error); + errorMap.add("GLOBAL", messageService.getMessage("error.planner.no.resource.save")); title = null; url = null; fileName = null; @@ -92,20 +96,20 @@ type = null; } - setValid(errors.isEmpty()); - return errors; + setValid(errorMap.isEmpty()); + return errorMap; } public void fillForm(CommonCartridge commonCartridge) { if (commonCartridge != null) { setToolContentID(commonCartridge.getContentId()); setInstructions(commonCartridge.getInstructions()); - title = new ArrayList(); - url = new ArrayList(); - fileName = new ArrayList(); - file = new ArrayList(); - type = new ArrayList(); + title = new ArrayList<>(); + url = new ArrayList<>(); + fileName = new ArrayList<>(); + file = new ArrayList<>(); + type = new ArrayList<>(); Set items = commonCartridge.getCommonCartridgeItems(); if (items != null) { int topicIndex = 0; @@ -115,12 +119,16 @@ setType(topicIndex, itemType); setUrl(topicIndex, itemType == CommonCartridgeConstants.RESOURCE_TYPE_BASIC_LTI ? item.getUrl() : null); - setFileName(topicIndex, itemType == CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE - ? item.getFileName() : null); - setFileUuid(topicIndex, itemType == CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE - ? item.getFileUuid() : null); - setFileVersion(topicIndex, itemType == CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE - ? item.getFileVersionId() : null); + setFileName(topicIndex, + itemType == CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE ? item.getFileName() + : null); + setFileUuid(topicIndex, + itemType == CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE ? item.getFileUuid() + : null); + setFileVersion(topicIndex, + itemType == CommonCartridgeConstants.RESOURCE_TYPE_COMMON_CARTRIDGE + ? item.getFileVersionId() + : null); topicIndex++; } } @@ -129,7 +137,7 @@ public void setTitle(int number, String formTitle) { if (title == null) { - title = new ArrayList(); + title = new ArrayList<>(); } while (number >= title.size()) { title.add(null); @@ -150,7 +158,7 @@ public void setUrl(int number, String formUrl) { if (url == null) { - url = new ArrayList(); + url = new ArrayList<>(); } while (number >= url.size()) { url.add(null); @@ -167,7 +175,7 @@ public void setType(int number, Short formType) { if (type == null) { - type = new ArrayList(); + type = new ArrayList<>(); } while (number >= type.size()) { type.add(null); @@ -182,17 +190,17 @@ return type.get(number); } - public void setFile(int number, FormFile formFile) { + public void setFile(int number, MultipartFile formFile) { if (file == null) { - file = new ArrayList(); + file = new ArrayList<>(); } while (number >= file.size()) { file.add(null); } file.set(number, formFile); } - public FormFile getFile(int number) { + public MultipartFile getFile(int number) { if (file == null || number >= file.size()) { return null; } @@ -201,7 +209,7 @@ public void setFileName(int number, String formFileName) { if (fileName == null) { - fileName = new ArrayList(); + fileName = new ArrayList<>(); } while (number >= fileName.size()) { fileName.add(null); @@ -218,7 +226,7 @@ public void setFileVersion(int number, Long formFileVersion) { if (fileVersion == null) { - fileVersion = new ArrayList(); + fileVersion = new ArrayList<>(); } while (number >= fileVersion.size()) { fileVersion.add(null); @@ -235,7 +243,7 @@ public void setFileUuid(int number, Long formFileUuid) { if (fileUuid == null) { - fileUuid = new ArrayList(); + fileUuid = new ArrayList<>(); } while (number >= fileUuid.size()) { fileUuid.add(null); Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/ReflectionForm.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/ReflectionForm.java (.../ReflectionForm.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/web/form/ReflectionForm.java (.../ReflectionForm.java) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -21,11 +21,9 @@ * **************************************************************** */ - package org.lamsfoundation.lams.tool.commonCartridge.web.form; import org.apache.log4j.Logger; -import org.apache.struts.validator.ValidatorForm; /** * @@ -34,7 +32,7 @@ * * */ -public class ReflectionForm extends ValidatorForm { +public class ReflectionForm { private static final long serialVersionUID = -9054365604649146735L; private static Logger logger = Logger.getLogger(ReflectionForm.class.getName()); Index: lams_tool_imscc/web/WEB-INF/spring-servlet.xml =================================================================== diff -u --- lams_tool_imscc/web/WEB-INF/spring-servlet.xml (revision 0) +++ lams_tool_imscc/web/WEB-INF/spring-servlet.xml (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -0,0 +1,17 @@ + + + + + + + + + + + \ No newline at end of file Index: lams_tool_imscc/web/WEB-INF/tags/AuthoringButton.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/AuthoringButton.tag (.../AuthoringButton.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/AuthoringButton.tag (.../AuthoringButton.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -32,7 +32,6 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ attribute name="formID" required="true" rtexprvalue="true" %> @@ -123,11 +122,11 @@ } \ No newline at end of file Index: lams_tool_imscc/web/WEB-INF/tags/AuthoringRatingAllStyleCriteria.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/AuthoringRatingAllStyleCriteria.tag (.../AuthoringRatingAllStyleCriteria.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/AuthoringRatingAllStyleCriteria.tag (.../AuthoringRatingAllStyleCriteria.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -8,7 +8,6 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ taglib uri="tags-function" prefix="fn" %> Index: lams_tool_imscc/web/WEB-INF/tags/AuthoringRatingCriteria.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/AuthoringRatingCriteria.tag (.../AuthoringRatingCriteria.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/AuthoringRatingCriteria.tag (.../AuthoringRatingCriteria.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -8,7 +8,6 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ taglib uri="tags-function" prefix="fn" %> @@ -284,42 +283,42 @@ - - + + - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + - - + + - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + Index: lams_tool_imscc/web/WEB-INF/tags/CommentsAuthor.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/CommentsAuthor.tag (.../CommentsAuthor.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/CommentsAuthor.tag (.../CommentsAuthor.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -1,5 +1,4 @@ <%@ taglib uri="tags-core" prefix="c"%> -<%@ taglib uri="tags-html" prefix="html"%> <%@ taglib uri="tags-fmt" prefix="fmt"%> <%@ taglib uri="tags-lams" prefix="lams"%> @@ -42,23 +41,23 @@
-     -   +     +  
Index: lams_tool_imscc/web/WEB-INF/tags/Page.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/Page.tag (.../Page.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/Page.tag (.../Page.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -4,6 +4,7 @@ <%@ taglib uri="tags-lams" prefix="lams"%> <%@ attribute name="type" required="true" rtexprvalue="true"%> +<%@ attribute name="formID" required="false" rtexprvalue="true"%> <%@ attribute name="style" required="false" rtexprvalue="true"%> <%@ attribute name="title" required="false" rtexprvalue="true"%> <%@ attribute name="titleHelpURL" required="false" rtexprvalue="true"%> @@ -88,8 +89,8 @@ - - + + ${toolForm.toolSessionID} Index: lams_tool_imscc/web/WEB-INF/tags/Rating.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/Rating.tag (.../Rating.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/Rating.tag (.../Rating.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -8,7 +8,6 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ taglib uri="tags-function" prefix="fn" %> Index: lams_tool_imscc/web/WEB-INF/tags/StyledRating.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/StyledRating.tag (.../StyledRating.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/StyledRating.tag (.../StyledRating.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -8,7 +8,6 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ taglib uri="tags-function" prefix="fn" %> Index: lams_tool_imscc/web/WEB-INF/tags/TabBody.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/TabBody.tag (.../TabBody.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/TabBody.tag (.../TabBody.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -34,7 +34,6 @@ <%@ attribute name="titleKey" required="false" rtexprvalue="true"%> <%@ attribute name="page" required="false" rtexprvalue="true"%> <%@ taglib uri="tags-core" prefix="c"%> -<%@ taglib uri="tags-bean" prefix="bean"%> Index: lams_tool_imscc/web/WEB-INF/tags/TabBodyArea.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/TabBodyArea.tag (.../TabBodyArea.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/TabBodyArea.tag (.../TabBodyArea.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -30,7 +30,6 @@ %> <%@ taglib uri="tags-core" prefix="c"%> -<%@ taglib uri="tags-bean" prefix="bean"%>
Index: lams_tool_imscc/web/WEB-INF/tags/TextSearch.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/tags/TextSearch.tag (.../TextSearch.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/tags/TextSearch.tag (.../TextSearch.tag) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -32,12 +32,11 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ taglib uri="tags-lams" prefix="lams" %> <%-- Required attributes --%> <%@ attribute name="sessionMapID" required="true" rtexprvalue="true" %> -<%@ attribute name="wrapInFormTag" required="true" rtexprvalue="true" %> <%-- Optional attributes --%> <%@ attribute name="action" required="false" rtexprvalue="true" %> @@ -53,10 +52,10 @@ <%-- Default value for message key --%> - + - + @@ -85,52 +84,40 @@ - -
- - -

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

+ + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
\ No newline at end of file Index: lams_tool_imscc/web/WEB-INF/web.xml =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/WEB-INF/web.xml (.../web.xml) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/WEB-INF/web.xml (.../web.xml) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -79,27 +79,14 @@ - action - org.apache.struts.action.ActionServlet - - config - /WEB-INF/struts-config.xml - - - debug - 999 - - - detail - 1 - - - validate - true - - 2 + spring + + org.springframework.web.servlet.DispatcherServlet + + 1 + Connector net.fckeditor.connector.ConnectorServlet @@ -128,7 +115,7 @@ - action + spring *.do Index: lams_tool_imscc/web/common/header.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/common/header.jsp (.../header.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/common/header.jsp (.../header.jsp) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -11,6 +11,6 @@ - + Index: lams_tool_imscc/web/common/messages.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/common/messages.jsp (.../messages.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/common/messages.jsp (.../messages.jsp) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -1,9 +1,9 @@ <%-- Error Messages --%> - - - -
-
-
-
- + + + + +
+
+
+
\ No newline at end of file Index: lams_tool_imscc/web/common/tabbedheader.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/common/tabbedheader.jsp (.../tabbedheader.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/common/tabbedheader.jsp (.../tabbedheader.jsp) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -11,6 +11,6 @@ - + Index: lams_tool_imscc/web/common/taglibs.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/common/taglibs.jsp (.../taglibs.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/common/taglibs.jsp (.../taglibs.jsp) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -1,10 +1,7 @@ <%@ page language="java" errorPage="/error.jsp" pageEncoding="UTF-8" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="tags-bean" prefix="bean" %> -<%@ taglib uri="tags-html" prefix="html" %> -<%@ taglib uri="tags-logic" prefix="logic" %> <%@ taglib uri="tags-function" prefix="fn" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> <%@ taglib uri="tags-xml" prefix="x" %> <%@ taglib uri="tags-lams" prefix="lams" %> - +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> \ No newline at end of file Index: lams_tool_imscc/web/pages/admin/config.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/pages/admin/config.jsp (.../config.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/pages/admin/config.jsp (.../config.jsp) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -24,15 +24,15 @@
- + @@ -42,12 +42,12 @@
- +
- +
- -
+ + Index: lams_tool_imscc/web/pages/authoring/advance.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1d6eef003bf303f75c5405b66a13ac86232cec03 --- lams_tool_imscc/web/pages/authoring/advance.jsp (.../advance.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_imscc/web/pages/authoring/advance.jsp (.../advance.jsp) (revision 1d6eef003bf303f75c5405b66a13ac86232cec03) @@ -1,23 +1,22 @@ <%@ include file="/common/taglibs.jsp"%> -
- + - + @@ -29,7 +28,7 @@ - +