Index: lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java,v diff -u -r1.47 -r1.48 --- lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java 24 Apr 2014 10:34:47 -0000 1.47 +++ lams_central/src/java/org/lamsfoundation/lams/authoring/web/AuthoringAction.java 7 May 2014 14:21:46 -0000 1.48 @@ -501,6 +501,21 @@ return null; } + public ActionForward getLearningDesignAccess(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException { + Integer userId = getUserId(); + + List accessList = getAuthoringService().getLearningDesignAccessByUser(userId); + accessList = accessList.subList(0, + Math.min(accessList.size(), AuthoringAction.LEARNING_DESIGN_ACCESS_ENTRIES_LIMIT - 1)); + Gson gson = new GsonBuilder().create(); + + response.setContentType("application/json;charset=utf-8"); + response.getWriter().write(gson.toJson(accessList)); + return null; + } + + /** * Get AuditService bean. * Index: lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java,v diff -u -r1.25 -r1.26 --- lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java 19 Mar 2012 19:40:58 -0000 1.25 +++ lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java 7 May 2014 14:21:45 -0000 1.26 @@ -57,586 +57,605 @@ /** * @author Manpreet Minhas - * @struts.action - * path = "/workspace" - * parameter = "method" - * validate = "false" + * @struts.action path = "/workspace" parameter = "method" validate = "false" * @struts.action-forward name = "success" path = "/index.jsp" */ public class WorkspaceAction extends LamsDispatchAction { - - protected Logger log = Logger.getLogger(WorkspaceAction.class.getName()); - public static final String RESOURCE_ID = "resourceID"; - public static final String RESOURCE_TYPE = "resourceType"; - public static final String ROLE_DELIMITER = ","; - - private Integer getUserId(HttpServletRequest request) { - // return new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID)); - HttpSession ss = SessionManager.getSession(); - UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); - return user != null ? user.getUserID() : null; + protected Logger log = Logger.getLogger(WorkspaceAction.class.getName()); + + public static final String RESOURCE_ID = "resourceID"; + public static final String RESOURCE_TYPE = "resourceType"; + public static final String ROLE_DELIMITER = ","; + + private Integer getUserId() { + // return new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID)); + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + return user != null ? user.getUserID() : null; + } + + /** + * Special value for folderID on getFolderContents(). Triggers getting the dummy value for the organisations (see + * ORG_FOLDER_ID) and the user's private folder. See the method for more details. + */ + public static final Integer BOOTSTRAP_FOLDER_ID = new Integer(-1); + + /** + * Special value for folderID on getFolderContents(). Triggers getting the organisation folders that are available + * to a user. See the method for more details. + */ + public static final Integer ORG_FOLDER_ID = new Integer(-2); + + public static final Integer ROOT_ORG_FOLDER_ID = new Integer(1); + + /** + * @return + */ + public IWorkspaceManagementService getWorkspaceManagementService() { + WebApplicationContext webContext = WebApplicationContextUtils.getRequiredWebApplicationContext(this + .getServlet().getServletContext()); + return (IWorkspaceManagementService) webContext.getBean("workspaceManagementService"); + } + + /** Send the flash message back to Flash */ + private ActionForward returnWDDXPacket(FlashMessage flashMessage, HttpServletResponse response) throws IOException { + PrintWriter writer = response.getWriter(); + writer.println(flashMessage.serializeMessage()); + return null; + } + + /** Send the flash message back to Flash */ + private ActionForward returnWDDXPacket(String serializedFlashMessage, HttpServletResponse response) + throws IOException { + PrintWriter writer = response.getWriter(); + writer.println(serializedFlashMessage); + return null; + } + + /** + * Is the folder id one of our special dummy ids? If so, we can't process the normal create, copy, paste, move + * functions on this folder. + */ + private boolean checkResourceDummyValue(Long folderID, String resourceType) throws IOException { + return FolderContentDTO.FOLDER.equals(resourceType) + && (WorkspaceAction.BOOTSTRAP_FOLDER_ID.equals(folderID) || WorkspaceAction.ORG_FOLDER_ID + .equals(folderID)); + } + + /** + * For details please refer to org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService + * + * @param mapping + * @param form + * @param request + * @param response + * @return ActionForward + * @throws ServletException + * @throws IOException + */ + public ActionForward createFolderForFlash(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + Integer parentFolderID = new Integer(WebUtil.readIntParam(request, "parentFolderID")); + boolean isDummyValue = checkResourceDummyValue(parentFolderID.longValue(), FolderContentDTO.FOLDER); + if (isDummyValue) { + FlashMessage errorPacket = new FlashMessage("createFolderForFlash", "FolderID " + parentFolderID + + " invalid for this call.", FlashMessage.ERROR); + return returnWDDXPacket(errorPacket.serializeMessage(), response); } - /** - * Special value for folderID on getFolderContents(). Triggers getting the - * dummy value for the organisations (see ORG_FOLDER_ID) and the user's - * private folder. See the method for more details. - */ - public static final Integer BOOTSTRAP_FOLDER_ID = new Integer(-1); - - /** - * Special value for folderID on getFolderContents(). Triggers getting the - * organisation folders that are available to a user. See - * the method for more details. - */ - public static final Integer ORG_FOLDER_ID = new Integer(-2); + String folderName = WebUtil.readStrParam(request, "name"); + Integer userID = getUserId(); + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + String wddxPacket = workspaceManagementService.createFolderForFlash(parentFolderID, folderName, userID); + return returnWDDXPacket(wddxPacket, response); + } - public static final Integer ROOT_ORG_FOLDER_ID = new Integer(1); - - /** - * @return - */ - public IWorkspaceManagementService getWorkspaceManagementService(){ - WebApplicationContext webContext = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServlet().getServletContext()); - return (IWorkspaceManagementService) webContext.getBean("workspaceManagementService"); + /** + * getFolderContents returns the details of the folders, learning designs and files contained in a folder. + * + * If getFolderContents gets the BOOTSTRAP_FOLDER_ID (-1), then it return the user's private folder and the root + * folder. + * + * If getFolderContents gets the ORG_FOLDER_ID (-2) then it will return all the workspace folders that the user can + * access. + * + * This method handles the special values for the BOOTSTRAP_FOLDER_ID and the ORG_FOLDER_ID as these values are only + * meaningful to the Flash client - they are not meaningful to the progress engine or the like. If we ever had to + * return this data to another client, the data may be returned in a different way. + * + * The calls made to the service layer vary depending on what is required - this decouple's the client's special + * needs from the overall logic of the workspaces. + * + * For more details please refer to org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService + * + * @param mapping + * @param form + * @param request + * @param response + * @return ActionForward + * @throws ServletException + * @throws Exception + */ + public ActionForward getFolderContents(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + Integer folderID = new Integer(WebUtil.readIntParam(request, "folderID")); + Integer mode = new Integer(WebUtil.readIntParam(request, "mode")); + // Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID)); + Integer userID = getUserId(); + + // LDEV-2833 IE9 won't refresh designs in lesson wizard + // so we purposely need to tell the browser not to cache this + response.addHeader("Pragma", "no-cache"); + response.addHeader("Cache-Control", "no-cache"); + response.addDateHeader("Expires", System.currentTimeMillis() - LamsDispatchAction.HEADER_EXPIRES_VALUE); + + String methodKey = "getFolderContents"; + try { + return returnWDDXPacket(new FlashMessage(methodKey, getFolderContents(folderID, mode, userID)), response); + } catch (UserAccessDeniedException e) { + return returnWDDXPacket(FlashMessage.getUserNotAuthorized(methodKey, userID), response); + } catch (WorkspaceFolderException e) { + return returnWDDXPacket(new FlashMessage(methodKey, e.getMessage(), FlashMessage.ERROR), response); + } catch (Exception e) { + log.error("getFolderContents: Exception occured. userID " + userID + " folderID " + folderID, e); + return returnWDDXPacket(FlashMessage.getExceptionOccured(methodKey, e.getMessage()), response); } - - /** Send the flash message back to Flash */ - private ActionForward returnWDDXPacket(FlashMessage flashMessage, HttpServletResponse response) throws IOException { - PrintWriter writer = response.getWriter(); - writer.println(flashMessage.serializeMessage()); - return null; + } + + private Hashtable getFolderContents(Integer folderID, Integer mode, Integer userID) + throws UserAccessDeniedException, WorkspaceFolderException, Exception { + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + + Hashtable packet = null; + String methodKey = "getFolderContents"; + + if (WorkspaceAction.BOOTSTRAP_FOLDER_ID.equals(folderID)) { + MessageService msgService = workspaceManagementService.getMessageService(); + + // return back the dummy org DTO, the user's workspace folder and public folder + Vector folders = new Vector(); + FolderContentDTO userFolder = workspaceManagementService.getUserWorkspaceFolder(userID); + if (userFolder != null) { + folders.add(userFolder); + } + + FolderContentDTO dummyOrgFolder = new FolderContentDTO(msgService.getMessage("organisations"), + msgService.getMessage("folder"), null, null, FolderContentDTO.FOLDER, new Long( + WorkspaceAction.ORG_FOLDER_ID.longValue()), WorkspaceFolder.READ_ACCESS, null); + + folders.add(dummyOrgFolder); + + FolderContentDTO publicFolder = workspaceManagementService.getPublicWorkspaceFolder(userID); + if (publicFolder != null) { + folders.add(publicFolder); + } + + packet = createFolderContentPacket(null, WorkspaceAction.BOOTSTRAP_FOLDER_ID, folders); + + } else if (WorkspaceAction.ORG_FOLDER_ID.equals(folderID)) { + // return back all the organisation folders that the user can access + Vector folders = workspaceManagementService.getAccessibleOrganisationWorkspaceFolders(userID); + + if (folders.size() == 1) { + FolderContentDTO folder = (FolderContentDTO) folders.firstElement(); + if (folder.resourceID.equals(new Long(WorkspaceAction.ROOT_ORG_FOLDER_ID))) { + return getFolderContents(new Integer(WorkspaceAction.ROOT_ORG_FOLDER_ID), mode, userID); + } + } + + packet = createFolderContentPacket(WorkspaceAction.BOOTSTRAP_FOLDER_ID, WorkspaceAction.ORG_FOLDER_ID, + folders); + + } else { + // normal case - just return back the contents of this folder. + WorkspaceFolder folder = workspaceManagementService.getWorkspaceFolder(folderID); + if (folder != null) { + Vector items; + items = workspaceManagementService.getFolderContentsExcludeHome(userID, folder, mode); + if (folder.getWorkspaceFolderId().equals(WorkspaceAction.ROOT_ORG_FOLDER_ID)) { + packet = createFolderContentPacket(WorkspaceAction.BOOTSTRAP_FOLDER_ID, + WorkspaceAction.ORG_FOLDER_ID, items); + } else { + WorkspaceFolder parentWorkspaceFolder = folder.getParentWorkspaceFolder(); + + packet = createFolderContentPacket( + parentWorkspaceFolder != null ? parentWorkspaceFolder.getWorkspaceFolderId() : null, + folder.getWorkspaceFolderId(), items); + } + + } else { + throw new WorkspaceFolderException(FlashMessage + .getNoSuchWorkspaceFolderContentExsists(methodKey, new Long(folderID.longValue())) + .getMessageValue().toString()); + } } - /** Send the flash message back to Flash */ - private ActionForward returnWDDXPacket(String serializedFlashMessage, HttpServletResponse response) throws IOException { - PrintWriter writer = response.getWriter(); - writer.println(serializedFlashMessage); - return null; + return packet; + } + + private Hashtable createFolderContentPacket(Integer parentWorkspaceFolderID, + Integer workspaceFolderID, Vector contents) { + Hashtable packet = new Hashtable(); + + if (parentWorkspaceFolderID != null) { + packet.put("parentWorkspaceFolderID", parentWorkspaceFolderID); } - /** Is the folder id one of our special dummy ids? If so, we can't process the normal create, copy, paste, move - * functions on this folder. - * @return error packet if it is a special id. Should return packet to Flash with no further processing. - */ - private String checkResourceNotDummyValue(String methodName, Integer folderID, String resourceType) throws IOException { - return checkResourceNotDummyValue(methodName, new Long(folderID.longValue()), resourceType); + if (workspaceFolderID != null) { + packet.put("workspaceFolderID", workspaceFolderID); } - /** Is the folder id one of our special dummy ids? If so, we can't process the normal create, copy, paste, move - * functions on this folder. - */ - private String checkResourceNotDummyValue(String methodName, Long folderID, String resourceType) throws IOException { - if ( FolderContentDTO.FOLDER.equals(resourceType) && (BOOTSTRAP_FOLDER_ID.equals(folderID) || ORG_FOLDER_ID.equals(folderID)) ) { - FlashMessage msg = new FlashMessage(methodName, "FolderID "+folderID+" invalid for this call.",FlashMessage.ERROR); - return msg.serializeMessage(); - } - return null; + if (contents != null) { + packet.put("contents", contents); } + return packet; + } - /** - * For details please refer to - * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService - * @param mapping - * @param form - * @param request - * @param response - * @return ActionForward - * @throws ServletException - * @throws IOException - */ - public ActionForward createFolderForFlash(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws ServletException,IOException{ - Integer parentFolderID = new Integer(WebUtil.readIntParam(request,"parentFolderID")); - String errorPacket = checkResourceNotDummyValue("createFolderForFlash", parentFolderID, FolderContentDTO.FOLDER); - if ( errorPacket != null) - return returnWDDXPacket(errorPacket, response); + /** + * For details please refer to org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService + * + * @param mapping + * @param form + * @param request + * @param response + * @return ActionForward + * @throws ServletException + * @throws IOException + */ + public ActionForward deleteResource(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + Long resourceID = new Long(WebUtil.readLongParam(request, WorkspaceAction.RESOURCE_ID)); + String resourceType = WebUtil.readStrParam(request, WorkspaceAction.RESOURCE_TYPE); - String folderName = (String)WebUtil.readStrParam(request,"name"); - Integer userID = getUserId(request); - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - String wddxPacket = workspaceManagementService.createFolderForFlash(parentFolderID,folderName,userID); - return returnWDDXPacket(wddxPacket, response); + boolean isDummyValue = checkResourceDummyValue(resourceID, FolderContentDTO.FOLDER); + if (isDummyValue) { + FlashMessage errorPacket = new FlashMessage("deleteResource", "FolderID " + resourceID + + " invalid for this call.", FlashMessage.ERROR); + return returnWDDXPacket(errorPacket.serializeMessage(), response); } - - /** - * getFolderContents returns the details of the folders, learning designs and files - * contained in a folder. - * - * If getFolderContents gets the BOOTSTRAP_FOLDER_ID (-1), then it return the user's private - * folder and the root folder. - * - * If getFolderContents gets the ORG_FOLDER_ID (-2) then it will return all the workspace - * folders that the user can access. - * - * This method handles the special values for the BOOTSTRAP_FOLDER_ID and the ORG_FOLDER_ID - * as these values are only meaningful to the Flash client - they are not meaningful to - * the progress engine or the like. If we ever had to return this data to another client, - * the data may be returned in a different way. - * - * The calls made to the service layer vary depending on what is required - this decouple's - * the client's special needs from the overall logic of the workspaces. - * - * For more details please refer to - * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService - * - * @param mapping - * @param form - * @param request - * @param response - * @return ActionForward - * @throws ServletException - * @throws Exception - */ - public ActionForward getFolderContents(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws ServletException,IOException{ - Integer folderID = new Integer(WebUtil.readIntParam(request,"folderID")); - Integer mode = new Integer(WebUtil.readIntParam(request,"mode")); - //Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID)); - Integer userID = getUserId(request); - - // LDEV-2833 IE9 won't refresh designs in lesson wizard - // so we purposely need to tell the browser not to cache this - response.addHeader("Pragma", "no-cache"); - response.addHeader("Cache-Control", "no-cache"); - response.addDateHeader("Expires", System.currentTimeMillis() - LamsDispatchAction.HEADER_EXPIRES_VALUE); - String methodKey = "getFolderContents"; - try { - return returnWDDXPacket(new FlashMessage(methodKey,getFolderContents(folderID, mode, userID)), response); - } catch (UserAccessDeniedException e) { - return returnWDDXPacket(FlashMessage.getUserNotAuthorized(methodKey, userID), response); - } catch (WorkspaceFolderException e) { - return returnWDDXPacket(new FlashMessage(methodKey, e.getMessage(), FlashMessage.ERROR), response); - } catch (Exception e) { - log.error("getFolderContents: Exception occured. userID "+userID+" folderID "+folderID, e); - return returnWDDXPacket(FlashMessage.getExceptionOccured(methodKey, e.getMessage()), response); - } + Integer userID = getUserId(); + String wddxPacket = null; + try { + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + wddxPacket = workspaceManagementService.deleteResource(resourceID, resourceType, userID); + } catch (Exception e) { + log.error("deleteResource: Exception occured. userID " + userID + " folderID " + resourceID, e); + FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_DELETE, + e.getMessage()); + wddxPacket = flashMessage.serializeMessage(); } - - private Hashtable getFolderContents(Integer folderID, Integer mode, Integer userID) throws UserAccessDeniedException, WorkspaceFolderException, Exception { - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - - Hashtable packet = null; - String methodKey = "getFolderContents"; - - if ( BOOTSTRAP_FOLDER_ID.equals(folderID )) { - MessageService msgService = workspaceManagementService.getMessageService(); + PrintWriter writer = response.getWriter(); + writer.println(wddxPacket); + return null; - // return back the dummy org DTO, the user's workspace folder and public folder - Vector folders = new Vector(); - FolderContentDTO userFolder = workspaceManagementService.getUserWorkspaceFolder(userID); - if ( userFolder != null ) - folders.add(userFolder); - - FolderContentDTO dummyOrgFolder = new FolderContentDTO(msgService.getMessage("organisations"), - msgService.getMessage("folder"), - null, null, - FolderContentDTO.FOLDER, new Long(ORG_FOLDER_ID.longValue()), WorkspaceFolder.READ_ACCESS, - null); - - folders.add(dummyOrgFolder); - - FolderContentDTO publicFolder = workspaceManagementService.getPublicWorkspaceFolder(userID); - if ( publicFolder != null ) - folders.add(publicFolder); - - packet = createFolderContentPacket(null, BOOTSTRAP_FOLDER_ID, folders); - - } else if ( ORG_FOLDER_ID.equals(folderID) ) { - // return back all the organisation folders that the user can access - Vector folders = workspaceManagementService.getAccessibleOrganisationWorkspaceFolders(userID); - - if(folders.size() == 1) { - FolderContentDTO folder = (FolderContentDTO) folders.firstElement(); - if(folder.resourceID.equals(new Long(ROOT_ORG_FOLDER_ID))) - return getFolderContents(new Integer(ROOT_ORG_FOLDER_ID), mode, userID); - } - - packet = createFolderContentPacket(BOOTSTRAP_FOLDER_ID, ORG_FOLDER_ID, folders); - - } else { - // normal case - just return back the contents of this folder. - WorkspaceFolder folder = workspaceManagementService.getWorkspaceFolder(folderID); - if ( folder != null ) { - Vector items; - items = workspaceManagementService.getFolderContentsExcludeHome(userID,folder,mode); - if(folder.getWorkspaceFolderId().equals(ROOT_ORG_FOLDER_ID)) { - packet = createFolderContentPacket(BOOTSTRAP_FOLDER_ID, ORG_FOLDER_ID, items); - } else { - WorkspaceFolder parentWorkspaceFolder = folder.getParentWorkspaceFolder(); - - packet = createFolderContentPacket(parentWorkspaceFolder!=null?parentWorkspaceFolder.getWorkspaceFolderId():null, - folder.getWorkspaceFolderId(), - items); - } - - } else { - throw new WorkspaceFolderException(FlashMessage.getNoSuchWorkspaceFolderContentExsists(methodKey,new Long(folderID.longValue())).getMessageValue().toString()); - } - } - - return packet; + } + + /** + * For details please refer to org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService + * + * @param mapping + * @param form + * @param request + * @param response + * @return ActionForward + * @throws ServletException + * @throws IOException + */ + public ActionForward copyResource(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + Long resourceID = new Long(WebUtil.readLongParam(request, WorkspaceAction.RESOURCE_ID)); + String resourceType = WebUtil.readStrParam(request, WorkspaceAction.RESOURCE_TYPE); + Integer targetFolderID = new Integer(WebUtil.readIntParam(request, "targetFolderID")); + + boolean isDummyValue = checkResourceDummyValue(targetFolderID.longValue(), FolderContentDTO.FOLDER); + if (isDummyValue) { + FlashMessage errorPacket = new FlashMessage("copyResource", "FolderID " + targetFolderID + + " invalid for this call.", FlashMessage.ERROR); + return returnWDDXPacket(errorPacket.serializeMessage(), response); } - private Hashtable createFolderContentPacket(Integer parentWorkspaceFolderID, Integer workspaceFolderID, Vector contents){ - Hashtable packet = new Hashtable(); - - if ( parentWorkspaceFolderID != null ) - packet.put("parentWorkspaceFolderID", parentWorkspaceFolderID); - - if ( workspaceFolderID != null ) - packet.put("workspaceFolderID", workspaceFolderID); - - if ( contents != null ) - packet.put("contents", contents); - return packet; - } + String wddxPacket = null; + Integer copyType = WebUtil.readIntParam(request, "copyType", true); + Integer userID = getUserId(); + try { + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + wddxPacket = workspaceManagementService.copyResource(resourceID, resourceType, copyType, targetFolderID, + userID); + } catch (Exception e) { + log.error("deleteResource: Exception occured. userID " + userID + " folderID " + resourceID, e); + FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_DELETE, + e.getMessage()); + wddxPacket = flashMessage.serializeMessage(); + } + return returnWDDXPacket(wddxPacket, response); + } + /** + * For details please refer to org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService + * + * @param mapping + * @param form + * @param request + * @param response + * @return ActionForward + * @throws ServletException + * @throws IOException + */ + public ActionForward moveResource(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + Long resourceID = new Long(WebUtil.readLongParam(request, WorkspaceAction.RESOURCE_ID)); + String resourceType = WebUtil.readStrParam(request, WorkspaceAction.RESOURCE_TYPE); + Integer userID = new Integer(WebUtil.readIntParam(request, AttributeNames.PARAM_USER_ID)); + Integer targetFolderID = WebUtil.readIntParam(request, "targetFolderID"); - /** - * For details please refer to - * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService - * - * @param mapping - * @param form - * @param request - * @param response - * @return ActionForward - * @throws ServletException - * @throws IOException - */ - public ActionForward deleteResource(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws ServletException, IOException{ - Long resourceID = new Long(WebUtil.readLongParam(request,RESOURCE_ID)); - String resourceType = WebUtil.readStrParam(request,RESOURCE_TYPE); - String errorPacket = checkResourceNotDummyValue("deleteResource", resourceID, FolderContentDTO.FOLDER); - if ( errorPacket != null) - return returnWDDXPacket(errorPacket, response); + boolean isDummyValue = checkResourceDummyValue(targetFolderID.longValue(), FolderContentDTO.FOLDER); + if (isDummyValue) { + FlashMessage errorPacket = new FlashMessage("copyResource", "FolderID " + targetFolderID + + " invalid for this call.", FlashMessage.ERROR); + return returnWDDXPacket(errorPacket.serializeMessage(), response); + } - Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID)); - String wddxPacket = null; - try { - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - wddxPacket = workspaceManagementService.deleteResource(resourceID,resourceType,userID); - } catch (Exception e) { - log.error("deleteResource: Exception occured. userID "+userID+" folderID "+resourceID, e); - FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_DELETE, e.getMessage()); - wddxPacket = flashMessage.serializeMessage(); - } - PrintWriter writer = response.getWriter(); - writer.println(wddxPacket); - return null; - + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + String wddxPacket = workspaceManagementService.moveResource(resourceID, targetFolderID, resourceType, userID); + PrintWriter writer = response.getWriter(); + writer.println(wddxPacket); + return null; + } + + /** + * For details please refer to org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService + * + * @param mapping + * @param form + * @param request + * @param response + * @return ActionForward + * @throws ServletException + * @throws Exception + */ + public ActionForward createWorkspaceFolderContent(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) throws ServletException, Exception { + Integer contentTypeID = new Integer(WebUtil.readIntParam(request, "contentTypeID")); + String name = WebUtil.readStrParam(request, "name"); + String description = WebUtil.readStrParam(request, "description"); + // Date createDateTime = DateUtil.convertFromString(WebUtil.readStrParam(request,"createDateTime")); + // Date lastModifiedDate = DateUtil.convertFromString(WebUtil.readStrParam(request,"lastModifiedDateTime")); + Integer workspaceFolderID = new Integer(WebUtil.readIntParam(request, "workspaceFolderID")); + String mimeType = WebUtil.readStrParam(request, "mimeType"); + String path = WebUtil.readStrParam(request, "path"); + + boolean isDummyValue = checkResourceDummyValue(workspaceFolderID.longValue(), FolderContentDTO.FOLDER); + if (isDummyValue) { + FlashMessage errorPacket = new FlashMessage("createWorkspaceFolderContent", "FolderID " + workspaceFolderID + + " invalid for this call.", FlashMessage.ERROR); + return returnWDDXPacket(errorPacket.serializeMessage(), response); } - - /** - * For details please refer to - * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService - * - * @param mapping - * @param form - * @param request - * @param response - * @return ActionForward - * @throws ServletException - * @throws IOException - */ - public ActionForward copyResource(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws ServletException, IOException{ - Long resourceID = new Long(WebUtil.readLongParam(request,RESOURCE_ID)); - String resourceType = WebUtil.readStrParam(request,RESOURCE_TYPE); - Integer targetFolderID = new Integer(WebUtil.readIntParam(request,"targetFolderID")); - String errorPacket = checkResourceNotDummyValue("copyResource", targetFolderID, FolderContentDTO.FOLDER); - if ( errorPacket != null) - return returnWDDXPacket(errorPacket, response); - String wddxPacket = null; - Integer copyType = WebUtil.readIntParam(request, "copyType", true); - Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID)); - try { - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - wddxPacket = workspaceManagementService.copyResource(resourceID,resourceType,copyType,targetFolderID,userID); - } catch (Exception e) { - log.error("deleteResource: Exception occured. userID "+userID+" folderID "+resourceID, e); - FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_DELETE, e.getMessage()); - wddxPacket = flashMessage.serializeMessage(); - } - return returnWDDXPacket(wddxPacket, response); + String wddxPacket = null; + try { + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + wddxPacket = workspaceManagementService.createWorkspaceFolderContent(contentTypeID, name, description, + workspaceFolderID, mimeType, path); + } catch (Exception e) { + log.error("createWorkspaceFolderContent: Exception occured. contentTypeID " + contentTypeID + " name " + + name + " workspaceFolderID " + workspaceFolderID, e); + FlashMessage flashMessage = FlashMessage.getExceptionOccured( + IWorkspaceManagementService.MSG_KEY_CREATE_WKF_CONTENT, e.getMessage()); + wddxPacket = flashMessage.serializeMessage(); } - - /** - * For details please refer to - * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService - * - * @param mapping - * @param form - * @param request - * @param response - * @return ActionForward - * @throws ServletException - * @throws IOException - */ - public ActionForward moveResource(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws ServletException, IOException{ - Long resourceID = new Long(WebUtil.readLongParam(request,RESOURCE_ID)); - String resourceType = WebUtil.readStrParam(request,RESOURCE_TYPE); - Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.PARAM_USER_ID)); - Integer targetFolderID = new Integer(WebUtil.readIntParam(request,"targetFolderID")); + return returnWDDXPacket(wddxPacket, response); + } - String errorPacket = checkResourceNotDummyValue("copyResource", targetFolderID, FolderContentDTO.FOLDER); - if ( errorPacket != null) - return returnWDDXPacket(errorPacket, response); + /** + * For details please refer to org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService + * + * @param mapping + * @param form + * @param request + * @param response + * @return ActionForward + * @throws ServletException + * @throws Exception + */ + public ActionForward updateWorkspaceFolderContent(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) throws ServletException, Exception { + Long folderContentID = new Long(WebUtil.readLongParam(request, "folderContentID")); + String path = WebUtil.readStrParam(request, "path"); + String wddxPacket = null; + try { + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + wddxPacket = workspaceManagementService.updateWorkspaceFolderContent(folderContentID, path); + } catch (Exception e) { + log.error("updateWorkspaceFolderContent: Exception occured. path " + path + " folderContentID " + + folderContentID, e); + FlashMessage flashMessage = FlashMessage.getExceptionOccured( + IWorkspaceManagementService.MSG_KEY_UPDATE_WKF_CONTENT, e.getMessage()); + wddxPacket = flashMessage.serializeMessage(); + } + return returnWDDXPacket(wddxPacket, response); + } - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - String wddxPacket = workspaceManagementService.moveResource(resourceID,targetFolderID,resourceType,userID); - PrintWriter writer = response.getWriter(); - writer.println(wddxPacket); - return null; + /** + * For details please refer to org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService + * + * @param mapping + * @param form + * @param request + * @param response + * @return ActionForward + * @throws IOException + */ + public ActionForward renameResource(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException { + Integer userID = getUserId(); + Long resourceID = new Long(WebUtil.readLongParam(request, WorkspaceAction.RESOURCE_ID)); + String resourceType = WebUtil.readStrParam(request, WorkspaceAction.RESOURCE_TYPE); + + boolean isDummyValue = checkResourceDummyValue(resourceID, resourceType); + if (isDummyValue) { + FlashMessage errorPacket = new FlashMessage("renameResource", "FolderID " + resourceID + + " invalid for this call.", FlashMessage.ERROR); + return returnWDDXPacket(errorPacket.serializeMessage(), response); } - - /** - * For details please refer to - * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService - * - * @param mapping - * @param form - * @param request - * @param response - * @return ActionForward - * @throws ServletException - * @throws Exception - */ - public ActionForward createWorkspaceFolderContent(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws ServletException, Exception{ - Integer contentTypeID = new Integer(WebUtil.readIntParam(request,"contentTypeID")); - String name = WebUtil.readStrParam(request,"name"); - String description = WebUtil.readStrParam(request,"description"); - //Date createDateTime = DateUtil.convertFromString(WebUtil.readStrParam(request,"createDateTime")); - //Date lastModifiedDate = DateUtil.convertFromString(WebUtil.readStrParam(request,"lastModifiedDateTime")); - Integer workspaceFolderID = new Integer(WebUtil.readIntParam(request,"workspaceFolderID")); - String mimeType = WebUtil.readStrParam(request,"mimeType"); - String path = WebUtil.readStrParam(request,"path"); - - String errorPacket = checkResourceNotDummyValue("createWorkspaceFolderContent", workspaceFolderID, FolderContentDTO.FOLDER); - if ( errorPacket != null) - return returnWDDXPacket(errorPacket, response); - String wddxPacket = null; - try { - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - wddxPacket = workspaceManagementService.createWorkspaceFolderContent(contentTypeID,name,description, - workspaceFolderID, - mimeType,path); - } catch (Exception e) { - log.error("createWorkspaceFolderContent: Exception occured. contentTypeID "+contentTypeID+" name "+name+" workspaceFolderID "+workspaceFolderID, e); - FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_CREATE_WKF_CONTENT, e.getMessage()); - wddxPacket = flashMessage.serializeMessage(); - } - return returnWDDXPacket(wddxPacket, response); + String name = WebUtil.readStrParam(request, "name"); + String wddxPacket = null; + try { + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + wddxPacket = workspaceManagementService.renameResource(resourceID, resourceType, name, userID); + } catch (Exception e) { + log.error("renameResource: Exception occured. userID " + userID + " resourceID " + resourceID + + " resourceType " + resourceType, e); + FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_RENAME, + e.getMessage()); + wddxPacket = flashMessage.serializeMessage(); } - /** - * For details please refer to - * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService - * - * @param mapping - * @param form - * @param request - * @param response - * @return ActionForward - * @throws ServletException - * @throws Exception - */ - public ActionForward updateWorkspaceFolderContent(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws ServletException, Exception{ - Long folderContentID = new Long(WebUtil.readLongParam(request,"folderContentID")); - String path = WebUtil.readStrParam(request,"path"); - String wddxPacket = null; - try { - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - wddxPacket = workspaceManagementService.updateWorkspaceFolderContent(folderContentID,path); - } catch (Exception e) { - log.error("updateWorkspaceFolderContent: Exception occured. path "+path+" folderContentID "+folderContentID, e); - FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_UPDATE_WKF_CONTENT, e.getMessage()); - wddxPacket = flashMessage.serializeMessage(); - } - return returnWDDXPacket(wddxPacket, response); + return returnWDDXPacket(wddxPacket, response); + } + + public ActionForward renameResourceJSON(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException { + Integer userID = getUserId(); + Long resourceID = new Long(WebUtil.readLongParam(request, WorkspaceAction.RESOURCE_ID)); + String resourceType = WebUtil.readStrParam(request, WorkspaceAction.RESOURCE_TYPE); + + boolean isDummyValue = checkResourceDummyValue(resourceID, FolderContentDTO.FOLDER); + String message = null; + if (isDummyValue) { + message = new FlashMessage("renameResource", "FolderID " + resourceID + " invalid for this call.", + FlashMessage.ERROR).serializeMessage(); + } else { + String name = WebUtil.readStrParam(request, "name"); + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + message = workspaceManagementService.renameResource(resourceID, resourceType, name, userID); } - /** - * For details please refer to - * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService - * - * @param mapping - * @param form - * @param request - * @param response - * @return ActionForward - * @throws IOException - */ - public ActionForward renameResource(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws IOException{ - Integer userID = getUserId(request); - Long resourceID = new Long(WebUtil.readLongParam(request,RESOURCE_ID)); - String resourceType = WebUtil.readStrParam(request,RESOURCE_TYPE); - String errorPacket = checkResourceNotDummyValue("renameResource", resourceID, resourceType); - if ( errorPacket != null) - return returnWDDXPacket(errorPacket, response); + response.getWriter().print(message); + return null; + } - String name = WebUtil.readStrParam(request,"name"); - String wddxPacket = null; - try { - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - wddxPacket = workspaceManagementService.renameResource(resourceID,resourceType,name,userID); - } catch (Exception e) { - log.error("renameResource: Exception occured. userID "+userID+" resourceID "+resourceID+" resourceType "+resourceType, e); - FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_RENAME, e.getMessage()); - wddxPacket = flashMessage.serializeMessage(); - } - return returnWDDXPacket(wddxPacket, response); + /** + * For details please refer to org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws IOException + */ + public ActionForward deleteContentWithVersion(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + Long uuID = new Long(WebUtil.readIntParam(request, "uuID")); + Long versionID = new Long(WebUtil.readIntParam(request, "versionID")); + Long folderContentID = new Long(WebUtil.readIntParam(request, "folderContentID")); + + boolean isDummyValue = checkResourceDummyValue(folderContentID, FolderContentDTO.FOLDER); + if (isDummyValue) { + FlashMessage errorPacket = new FlashMessage("deleteContentWithVersion", "FolderID " + folderContentID + + " invalid for this call.", FlashMessage.ERROR); + return returnWDDXPacket(errorPacket.serializeMessage(), response); } - - /** - * For details please refer to - * org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService - * - * @param mapping - * @param form - * @param request - * @param response - * @return - * @throws IOException - */ - public ActionForward deleteContentWithVersion(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws Exception{ - Long uuID = new Long(WebUtil.readIntParam(request,"uuID")); - Long versionID= new Long(WebUtil.readIntParam(request,"versionID")); - Long folderContentID = new Long(WebUtil.readIntParam(request,"folderContentID")); - String errorPacket = checkResourceNotDummyValue("deleteContentWithVersion", folderContentID, FolderContentDTO.FOLDER); - if ( errorPacket != null) - return returnWDDXPacket(errorPacket, response); + String wddxPacket = null; + try { + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + wddxPacket = workspaceManagementService.deleteContentWithVersion(uuID, versionID, folderContentID); + } catch (Exception e) { + log.error("deleteContentWithVersion: Exception occured. uuID " + uuID + " versionID " + versionID + + " folderContentID " + folderContentID, e); + FlashMessage flashMessage = FlashMessage.getExceptionOccured( + IWorkspaceManagementService.MSG_KEY_DELETE_VERSION, e.getMessage()); + wddxPacket = flashMessage.serializeMessage(); + } + return returnWDDXPacket(wddxPacket, response); + } - String wddxPacket = null; - try { - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - wddxPacket = workspaceManagementService.deleteContentWithVersion(uuID,versionID,folderContentID); - } catch (Exception e) { - log.error("deleteContentWithVersion: Exception occured. uuID "+uuID+" versionID "+versionID+" folderContentID "+folderContentID, e); - FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_DELETE_VERSION, e.getMessage()); - wddxPacket = flashMessage.serializeMessage(); - } - return returnWDDXPacket(wddxPacket, response); + public ActionForward getOrganisationsByUserRole(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + + Integer userID = getUserId(); + + String roles_str = WebUtil.readStrParam(request, "roles"); + String[] roles = roles_str.split(WorkspaceAction.ROLE_DELIMITER); + ArrayList roleList = new ArrayList(); + for (String role : roles) { + roleList.add(role); } - - - public ActionForward getOrganisationsByUserRole(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws Exception{ - - Integer userID = getUserId(request); - - String roles_str = WebUtil.readStrParam(request, "roles"); - String[] roles = roles_str.split(ROLE_DELIMITER); - ArrayList roleList = new ArrayList(); - for ( String role: roles ) { - roleList.add(role); - } - - String wddxPacket = null; - Integer courseId = null; - String[] classIdStrings = null; - try { - courseId = WebUtil.readIntParam(request, AttributeNames.PARAM_COURSE_ID,true); - classIdStrings = request.getParameterValues(AttributeNames.PARAM_CLASS_ID); - ArrayList classIds = new ArrayList(); - if ( classIdStrings != null ) { - for ( String str: classIdStrings) { - // any number format exception will be caught by the general catch - int classId = Integer.parseInt(str); - classIds.add(new Integer(classId)); - } - } - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - wddxPacket = workspaceManagementService.getOrganisationsByUserRole(userID, roleList,courseId,classIds); - - } catch (Exception e) { - String error = new ToStringBuilder(this) - .append("") - .append("userID",userID) - .append("roles",roles) - .append("courseId",courseId) - .append("classIdStrings",classIdStrings) - .toString(); - log.error("getOrganisationsByUserRole: Exception occured. Request data "+error, e); - FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_ORG_BY_ROLE, e.getMessage()); - wddxPacket = flashMessage.serializeMessage(); + String wddxPacket = null; + Integer courseId = null; + String[] classIdStrings = null; + try { + courseId = WebUtil.readIntParam(request, AttributeNames.PARAM_COURSE_ID, true); + classIdStrings = request.getParameterValues(AttributeNames.PARAM_CLASS_ID); + ArrayList classIds = new ArrayList(); + if (classIdStrings != null) { + for (String str : classIdStrings) { + // any number format exception will be caught by the general catch + int classId = Integer.parseInt(str); + classIds.add(new Integer(classId)); } - return returnWDDXPacket(wddxPacket, response); + } + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + wddxPacket = workspaceManagementService.getOrganisationsByUserRole(userID, roleList, courseId, classIds); + + } catch (Exception e) { + String error = new ToStringBuilder(this).append("").append("userID", userID).append("roles", roles) + .append("courseId", courseId).append("classIdStrings", classIdStrings).toString(); + log.error("getOrganisationsByUserRole: Exception occured. Request data " + error, e); + FlashMessage flashMessage = FlashMessage.getExceptionOccured( + IWorkspaceManagementService.MSG_KEY_ORG_BY_ROLE, e.getMessage()); + wddxPacket = flashMessage.serializeMessage(); } - - public ActionForward getUsersFromOrganisationByRole(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws Exception{ - - Integer organisationID = new Integer(WebUtil.readIntParam(request,"organisationID")); - String role = WebUtil.readStrParam(request, "role"); + return returnWDDXPacket(wddxPacket, response); + } - FlashMessage flashMessage = null; - try { - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - Vector users = workspaceManagementService.getUsersFromOrganisationByRole(organisationID, role); - if ( log.isDebugEnabled()) { - log.debug("getUsersFromOrganisationByRole: organisationID="+organisationID+" role="+role+" users "+users); - } - flashMessage = new FlashMessage("getUsersFromOrganisationByRole",users); + public ActionForward getUsersFromOrganisationByRole(ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) throws Exception { - } catch (Exception e) { - log.error("getUsersFromOrganisationByRole: Exception occured. organisationID "+organisationID+" role "+role, e); - flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_USER_BY_ROLE, e.getMessage()); - } - String wddxPacket = flashMessage.serializeMessage(); - return returnWDDXPacket(wddxPacket, response); + Integer organisationID = new Integer(WebUtil.readIntParam(request, "organisationID")); + String role = WebUtil.readStrParam(request, "role"); + + FlashMessage flashMessage = null; + try { + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + Vector users = workspaceManagementService + .getUsersFromOrganisationByRole(organisationID, role); + if (log.isDebugEnabled()) { + log.debug("getUsersFromOrganisationByRole: organisationID=" + organisationID + " role=" + role + + " users " + users); + } + flashMessage = new FlashMessage("getUsersFromOrganisationByRole", users); + + } catch (Exception e) { + log.error("getUsersFromOrganisationByRole: Exception occured. organisationID " + organisationID + " role " + + role, e); + flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_USER_BY_ROLE, + e.getMessage()); } + String wddxPacket = flashMessage.serializeMessage(); + return returnWDDXPacket(wddxPacket, response); + } - public ActionForward getUserOrganisation(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws Exception{ - - Integer userID = getUserId(request); - Integer orgId = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID,true); + public ActionForward getUserOrganisation(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { - String wddxPacket = null; - try { - IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); - wddxPacket = workspaceManagementService.getUserOrganisation(userID, orgId); - } catch (Exception e) { - log.error("getUserOrganisation: Exception occured. userID "+userID+" organisationId "+orgId, e); - FlashMessage flashMessage = FlashMessage.getExceptionOccured(IWorkspaceManagementService.MSG_KEY_ORG_BY_ROLE, e.getMessage()); - wddxPacket = flashMessage.serializeMessage(); - } - return returnWDDXPacket(wddxPacket, response); } + Integer userID = getUserId(); + Integer orgId = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID, true); + + String wddxPacket = null; + try { + IWorkspaceManagementService workspaceManagementService = getWorkspaceManagementService(); + wddxPacket = workspaceManagementService.getUserOrganisation(userID, orgId); + } catch (Exception e) { + log.error("getUserOrganisation: Exception occured. userID " + userID + " organisationId " + orgId, e); + FlashMessage flashMessage = FlashMessage.getExceptionOccured( + IWorkspaceManagementService.MSG_KEY_ORG_BY_ROLE, e.getMessage()); + wddxPacket = flashMessage.serializeMessage(); + } + return returnWDDXPacket(wddxPacket, response); + } } Index: lams_central/web/css/authoring.css =================================================================== RCS file: /usr/local/cvsroot/lams_central/web/css/authoring.css,v diff -u -r1.21 -r1.22 --- lams_central/web/css/authoring.css 24 Apr 2014 10:34:47 -0000 1.21 +++ lams_central/web/css/authoring.css 7 May 2014 14:21:45 -0000 1.22 @@ -122,6 +122,11 @@ display: none; } +div#leftDialogButtonContainer { + float: left; + margin-left: 10px; +} + div#ldStoreDialogNameContainer { float: left; padding: 8px 0 0 215px; Index: lams_central/web/includes/javascript/authoring/authoringGeneral.js =================================================================== RCS file: /usr/local/cvsroot/lams_central/web/includes/javascript/authoring/authoringGeneral.js,v diff -u -r1.36 -r1.37 --- lams_central/web/includes/javascript/authoring/authoringGeneral.js 24 Apr 2014 10:34:47 -0000 1.36 +++ lams_central/web/includes/javascript/authoring/authoringGeneral.js 7 May 2014 14:21:46 -0000 1.37 @@ -6,6 +6,7 @@ var paper = null, canvas = null, nameValidator = /^[^<>^*@%$]*$/i, + numberValidator = /^[\d\.]+$/, // configuration and storage of various elements layout = { @@ -230,13 +231,273 @@ .addClass( "ui-corner-bottom" ); $('#tabs .ui-tabs-nav').appendTo('#tabs'); - // the close button is shared by both load and save dialogs - var closeLdStoreDialogButton ={ - 'text' : 'Cancel', - 'click' : function() { + // buttons shared by both load and save dialogs + var sharedButtons = [ + { + 'text' : 'Cancel', + 'tabIndex' : -1, + 'click' : function() { $(this).dialog('close'); } }, + + // creates a new folder + { + 'class' : 'leftDialogButton', + 'text' : 'New', + 'tabIndex' : -1, + 'click' : function(){ + var dialog = $(this), + tree = dialog.dialog('option', 'ldTree'), + // hightlighted sequence/folder in the tree + ldNode = tree.getHighlightedNode(); + if (!ldNode) { + return; + } + + var title = prompt('Please enter the name for a new folder'); + // skip if no name was provided + if (!title) { + return; + } + if (!nameValidator.test(title)) { + alert('The title can not contain any of these characters < > ^ * @ % $'); + return; + } + + var parentFolder = ldNode.data.learningDesignId ? ldNode.parent : ldNode; + $.each(parentFolder.children, function(){ + if (this.label == title) { + alert('A folder with this name already exists.'); + title = null; + return false; + } + }); + if (!title) { + return; + } + + + $.ajax({ + cache : false, + async : false, + url : LAMS_URL + "workspace.do", + dataType : 'text', + data : { + 'method' : 'createFolderForFlash', + 'name' : title, + 'parentFolderID' : parentFolder.data.folderID + }, + success : function(response) { + // still process WDDX packed, to be changed when we get rid of Flash Authoring + var messageIndex = response.indexOf("folderID'>") + 18, + folderID = response.substring(messageIndex, response.indexOf('<', messageIndex)); + + if (!numberValidator.test(folderID)) { + // error + var messageIndex = response.indexOf("messageValue'>") + 22, + message = response.substring(messageIndex, response.indexOf('<', messageIndex)); + alert(message); + return; + } + + tree.removeChildren(parentFolder); + parentFolder.expand(); + } + }); + } + }, + + // copy sequence or folder + { + 'class' : 'leftDialogButton', + 'text' : 'Copy', + 'tabIndex' : -1, + 'click' : function(){ + var dialog = $(this), + tree = dialog.dialog('option', 'ldTree'), + // hightlighted sequence/folder in the tree + ldNode = tree.getHighlightedNode(), + isFolder = ldNode && !ldNode.data.learningDesignId; + if (!ldNode) { + return; + } + + dialog.dialog('option', 'copiedResource', { + 'isFolder' : isFolder, + 'resourceID' : isFolder ? ldNode.data.folderID : ldNode.data.learningDesignId + }); + } + }, + + // pastes sequence or folder + { + 'class' : 'leftDialogButton', + 'text' : 'Paste', + 'tabIndex' : -1, + 'click' : function(){ + var dialog = $(this), + tree = dialog.dialog('option', 'ldTree'), + // hightlighted sequence/folder in the tree + ldNode = tree.getHighlightedNode(), + folderNode = ldNode ? (ldNode.data.learningDesignId ? ldNode.parent : ldNode) : null, + copiedResource = dialog.dialog('option','copiedResource'); + + if (!folderNode || !copiedResource) { + return; + } + + $.ajax({ + cache : false, + async : false, + url : LAMS_URL + "workspace.do", + dataType : 'text', + data : { + 'method' : 'copyResource', + 'targetFolderID' : folderNode.data.folderID, + 'resourceID' : copiedResource.resourceID, + 'resourceType' : copiedResource.isFolder ? 'Folder' : 'LearningDesign' + }, + success : function(response) { + // still process WDDX packed, to be changed when we get rid of Flash Authoring + var messageIndex = response.indexOf("messageValue'>") + 22, + message = response.substring(messageIndex, response.indexOf('<', messageIndex)); + if (!numberValidator.test(message)) { + // error + alert(message); + return; + } + + tree.removeChildren(folderNode); + folderNode.expand(); + } + }); + } + }, + + // removes sequence or folder + { + 'class' : 'leftDialogButton', + 'text' : 'Delete', + 'tabIndex' : -1, + 'click' : function(){ + var dialog = $(this), + tree = dialog.dialog('option', 'ldTree'), + // hightlighted sequence/folder in the tree + ldNode = tree.getHighlightedNode(), + isFolder = ldNode && !ldNode.data.learningDesignId; + if (!ldNode || !confirm('Are you sure you want to delete this ' + (isFolder ? 'folder' : 'sequence') + '?')) { + return; + } + + $.ajax({ + cache : false, + async : false, + url : LAMS_URL + "workspace.do", + dataType : 'text', + data : { + 'method' : 'deleteResource', + 'resourceID' : isFolder? ldNode.data.folderID : ldNode.data.learningDesignId, + 'resourceType' : isFolder ? 'Folder' : 'LearningDesign' + }, + success : function(response) { + // still process WDDX packed, to be changed when we get rid of Flash Authoring + var messageIndex = response.indexOf("messageValue'>") + 22, + message = response.substring(messageIndex, response.indexOf('<', messageIndex)); + if (!/^.*:\d+$/.test(message)) { + // error + alert(message); + return; + } + + var parentFolder = ldNode.parent; + tree.removeChildren(parentFolder); + parentFolder.expand(); + } + }); + } + }, + + + // renames sequence or folder + { + 'class' : 'leftDialogButton', + 'text' : 'Rename', + 'tabIndex' : -1, + 'click' : function(){ + var dialog = $(this), + tree = dialog.dialog('option', 'ldTree'), + // hightlighted sequence/folder in the tree + ldNode = tree.getHighlightedNode(), + isFolder = ldNode && !ldNode.data.learningDesignId; + if (!ldNode) { + return; + } + var title = prompt('Please enter the new name for ' + (isFolder ? 'folder' : 'sequence') + ' "' + ldNode.label + '"'); + + // skip if no name or the same name was provided + if (!title || ldNode.label == title) { + return; + } + if (!nameValidator.test(title)) { + alert('The title can not contain any of these characters < > ^ * @ % $'); + return; + } + + $.each(ldNode.parent.children, function(){ + if (this.label == title && (isFolder == (this.data.folderID != null))) { + alert('A ' + (isFolder ? 'folder' : 'sequence') + ' with this name already exists.'); + title = null; + return false; + } + }); + if (!title) { + return; + } + + $.ajax({ + cache : false, + async : false, + url : LAMS_URL + "workspace.do", + dataType : 'text', + data : { + 'method' : 'renameResourceJSON', + 'name' : title, + 'resourceID' : isFolder? ldNode.data.folderID : ldNode.data.learningDesignId, + 'resourceType' : isFolder ? 'Folder' : 'LearningDesign' + }, + success : function(response) { + // still process WDDX packed, to be changed when we get rid of Flash Authoring + var messageIndex = response.indexOf("messageValue'>") + 22, + message = response.substring(messageIndex, response.indexOf('<', messageIndex)); + if (message != title) { + // error + alert(message); + return; + } + if (isFolder) { + ldNode.label = title; + ldNode.getLabelEl().innerHTML = title; + } else { + // refresh all opened folders in the tree + var folders = tree.getRoot().children; + if (folders) { + $.each(folders, function(){ + var expanded = this.expanded; + tree.removeChildren(this); + if (expanded) { + this.expand(); + } + }); + } + + // fetch access list again + updateAccess(null, true); + } + } + }); + } + }], // initalise Learning Design load/save dialog ldStoreDialog = $('#ldStoreDialog').dialog({ @@ -250,9 +511,10 @@ 'width' : 1240, 'height' : 785, 'draggable' : false, - 'buttonsLoad' : [ - closeLdStoreDialogButton, + 'buttonsLoad' : sharedButtons.concat([ { + 'id' : 'openLdStoreButton', + 'class' : 'defaultFocus', 'text' : 'Open', 'click' : function() { var dialog = $(this), @@ -274,11 +536,11 @@ openLearningDesign(learningDesignID); } } - ], + ]), - 'buttonsSave' : [ - closeLdStoreDialogButton, + 'buttonsSave' : sharedButtons.concat([ { + 'class' : 'defaultFocus', 'text' : 'Save', 'click' : function() { var dialog = $(this), @@ -335,8 +597,7 @@ // otherwise check if there is no other sequence with the same name if (folderNode && folderNode.children) { $.each(folderNode.children, function(){ - var nodeTitle = $(this.getContentHtml()).text(); - if (nodeTitle == title) { + if (this.label == title) { this.highlight(); learningDesignID = this.data.learningDesignId; return false; @@ -354,14 +615,24 @@ } } } - ], + ]), 'open' : function(){ showLearningDesignThumbnail(); - var nameContainer = $('#ldStoreDialogNameContainer'); + $('#leftDialogButtonContainer').remove(); + var nameContainer = $('#ldStoreDialogNameContainer'), + leftButtonContainer = $('
').attr('id','leftDialogButtonContainer'); $('input', nameContainer).val(null); - $(this).siblings('.ui-dialog-buttonpane').append(nameContainer); + $(this).siblings('.ui-dialog-buttonpane').append(leftButtonContainer).append(nameContainer); $('#ldStoreDialogNameField', nameContainer).focus(); + + $('.leftDialogButton') + .attr('disabled', 'disabled') + .button('option', 'disabled', true) + .appendTo(leftButtonContainer); + $('.defaultFocus').focus(); + + $(this).dialog('option', 'copiedResource', null); } }); @@ -398,13 +669,17 @@ var dialog = $(this.getEl()).closest('.ui-dialog'), isSaveDialog = dialog.hasClass('ldStoreDialogSave'); + $('.leftDialogButton') + .attr('disabled', event.node.highlightState > 0 ? 'disabled' : null) + .button('option', 'disabled', event.node.highlightState > 0); + if (!isSaveDialog && !event.node.data.learningDesignId){ - // it is a folder in load sequence dialog, do not highlight - return false; + // it is a folder in load sequence dialog, hightlight but stop processing + return true; } - var learningDesignID = event.node.highlightState == 0 ? +event.node.data.learningDesignId : null, - title = isSaveDialog && learningDesignID ? $(event.node.getContentHtml()).text() : null; + var learningDesignID = event.node.highlightState == 0 ? +event.node.data.learningDesignId : null, + title = isSaveDialog && learningDesignID ? event.node.label : null; showLearningDesignThumbnail(learningDesignID, title); }); @@ -1385,31 +1660,48 @@ } -function updateAccess(access){ - var accessCell = $('#ldStoreDialogAccessCell'); - accessCell.children('div.access').remove(); - $.each(access, function(){ - $('
').addClass('access') - .attr({ - 'learningDesignId' : this.learningDesignId, - 'folderID' : this.workspaceFolderId - }) - .text(this.title) - .appendTo(accessCell) - .click(function(){ - var accessEntry = $(this); - if (accessEntry.hasClass('selected')) { - return; - } - - var dialog = accessEntry.closest('.ui-dialog'), - isSaveDialog = dialog.hasClass('ldStoreDialogSave'), - learningDesignID = +accessEntry.attr('learningDesignId'), - title = isSaveDialog ? accessEntry.text() : null; +function updateAccess(access, fetchIfEmpty){ + if (fetchIfEmpty && !access) { + $.ajax({ + cache : false, + async : false, + url : LAMS_URL + "authoring/author.do", + dataType : 'json', + data : { + 'method' : 'getLearningDesignAccess' + }, + success : function(response) { + access = response; + } + }); + } + + if (access) { + var accessCell = $('#ldStoreDialogAccessCell'); + accessCell.children('div.access').remove(); + $.each(access, function(){ + $('
').addClass('access') + .attr({ + 'learningDesignId' : this.learningDesignId, + 'folderID' : this.workspaceFolderId + }) + .text(this.title) + .appendTo(accessCell) + .click(function(){ + var accessEntry = $(this); + if (accessEntry.hasClass('selected')) { + return; + } - showLearningDesignThumbnail(learningDesignID, title); - }); - }); + var dialog = accessEntry.closest('.ui-dialog'), + isSaveDialog = dialog.hasClass('ldStoreDialogSave'), + learningDesignID = +accessEntry.attr('learningDesignId'), + title = isSaveDialog ? accessEntry.text() : null; + + showLearningDesignThumbnail(learningDesignID, title); + }); + }); + } }