Index: lams_central/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r4748085544e1f504bda46f614c2bb53f5d397a74 -r3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7 --- lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 4748085544e1f504bda46f614c2bb53f5d397a74) +++ lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7) @@ -460,6 +460,7 @@ authoring.fla.region.fit.button.tooltip =Fit authoring.fla.new.folder.button =New authoring.fla.copy.button =Copy +authoring.fla.cut.button =Cut authoring.fla.paste.button =Paste authoring.fla.delete.button =Delete authoring.fla.rename.button =Rename @@ -488,6 +489,8 @@ authoring.fla.sequence.not.selected.error =Please choose a sequence authoring.fla.sequence.load.error =Error while loading the sequence authoring.fla.transition.from.exists.error =Transition from this activity already exists +authoring.fla.modify.error =You can not modify this resource +authoring.fla.folder.move.to.child.error =Can not move a folder into its child authoring.fla.export.image.dialog.title =Image export authoring.fla.export.sequence.dialog.title =Sequence export authoring.fla.activity.copy.title.prefix =Copy [0] of Index: lams_central/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7 --- lams_central/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java (.../IWorkspaceManagementService.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_central/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java (.../IWorkspaceManagementService.java) (revision 3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7) @@ -206,6 +206,11 @@ throws IOException, LearningDesignException, UserException, WorkspaceFolderException; /** + * Changes the parent of given Learning Design or WorkspaceFolder to the target WorkspaceFolder + */ + void moveResource(Long resourceID, String resourceType, Integer targetFolderID) throws WorkspaceFolderException; + + /** * This method returns a list of organisation workspace folders. * * The organisation folders returned are determined based on whether the user has "write" access. A user can Index: lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java =================================================================== diff -u -r6cab7eecbb7a5b12bcb147db234ff5b6f80d72ab -r3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7 --- lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision 6cab7eecbb7a5b12bcb147db234ff5b6f80d72ab) +++ lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision 3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7) @@ -577,6 +577,28 @@ } } + @Override + public void moveResource(Long resourceID, String resourceType, Integer targetFolderID) + throws WorkspaceFolderException { + WorkspaceFolder targetFolder = getWorkspaceFolder(targetFolderID); + if (FolderContentDTO.DESIGN.equals(resourceType)) { + LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(resourceID); + learningDesign.setWorkspaceFolder(targetFolder); + learningDesignDAO.insertOrUpdate(learningDesign); + } else if (FolderContentDTO.FOLDER.equals(resourceType)) { + WorkspaceFolder folder = getWorkspaceFolder(resourceID.intValue()); + WorkspaceFolder parent = targetFolder.getParentWorkspaceFolder(); + while (parent != null) { + if (parent.equals(folder)) { + throw new WorkspaceFolderException("Can not move a folder into its descendant"); + } + parent = parent.getParentWorkspaceFolder(); + } + folder.setParentWorkspaceFolder(targetFolder); + baseDAO.update(folder); + } + } + /** * This method copies one folder inside another folder. To be able to successfully perform this action following * conditions must be met in the order they are listed. Index: lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7 --- lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java (.../WorkspaceAction.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_central/src/java/org/lamsfoundation/lams/workspace/web/WorkspaceAction.java (.../WorkspaceAction.java) (revision 3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7) @@ -169,8 +169,8 @@ Integer targetFolderID = WebUtil.readIntParam(request, "targetFolderID", false); if (targetFolderID == null) { - log.error("Can not create folder, parent folder ID is NULL"); - response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Parent folder ID is NULL"); + log.error("Can not copy resource, missing target folder ID"); + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing target folder ID"); return null; } @@ -180,6 +180,28 @@ return null; } + public ActionForward moveResource(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException { + Long resourceID = WebUtil.readLongParam(request, WorkspaceAction.RESOURCE_ID, false); + String resourceType = WebUtil.readStrParam(request, WorkspaceAction.RESOURCE_TYPE, false); + Integer targetFolderID = WebUtil.readIntParam(request, "targetFolderID", false); + + if (targetFolderID == null) { + log.error("Can not move resource, missing target folder ID"); + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing target folder ID"); + return null; + } + + try { + getWorkspaceManagementService().moveResource(resourceID, resourceType, targetFolderID); + } catch (WorkspaceFolderException e) { + log.error("Error while moving a resource", e); + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Error while moving a resource"); + return null; + } + return null; + } + public ActionForward renameResource(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException, UserException, WorkspaceFolderException { Index: lams_central/web/authoring/authoring.jsp =================================================================== diff -u -r784fd323a58e84e5d935014177523105f1e99b84 -r3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7 --- lams_central/web/authoring/authoring.jsp (.../authoring.jsp) (revision 784fd323a58e84e5d935014177523105f1e99b84) +++ lams_central/web/authoring/authoring.jsp (.../authoring.jsp) (revision 3750d4ca838633d6f19b1f4e1a8e13d9fc41d7c7) @@ -124,6 +124,10 @@ SEQUENCE_NOT_SELECTED_ERROR : decoderDiv.html('').text(), SEQUENCE_LOAD_ERROR : decoderDiv.html('').text(), + + RESOURCE_MODIFY_ERROR : decoderDiv.html('').text(), + + FOLDER_MOVE_TO_CHILD_ERROR : decoderDiv.html('').text(), // HandlerLib @@ -497,6 +501,11 @@ + +