diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/store/children.post.atom.js b/config/alfresco/templates/webscripts/org/alfresco/repository/store/children.post.atom.js index 1f99eb4530..e6c86f1808 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/store/children.post.atom.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/store/children.post.atom.js @@ -24,11 +24,60 @@ script: break script; } - // create node - var node = createNode(model.parent, entry, slug); - if (node == null) + // is this a create or move? + var object = entry.getExtension(atom.names.cmisra_object); + var objectIdProp = (object !== null) ? object.objectId : null; + var objectId = (objectIdProp !== null) ? objectIdProp.nativeValue : null; + var node = null; + + if (objectId == null) { - break script; + // create node + node = createNode(model.parent, entry, slug); + if (node == null) + { + break script; + } + } + else + { + // move node + var sourceFolderId = args[cmis.ARG_SOURCE_FOLDER_ID]; + if (sourceFolderId == null) + { + status.code = 400; + status.message = "Move of object " + objectId + " requires sourceFolderId argument"; + status.redirect = true; + break script; + } + + // locate node and its source folder + node = search.findNode(objectId); + if (node == null) + { + status.code = 400; + status.message = "Object " + objectId + " does not exist"; + status.redirect = true; + break script; + } + sourceFolder = search.findNode(sourceFolderId); + if (sourceFolder == null || !(sourceFolder.nodeRef.equals(node.parent.nodeRef))) + { + status.code = 400; + status.message = "Source Folder " + sourceFolderId + " is not valid for object " + objectId; + status.redirect = true; + break script; + } + + // perform move + var success = node.move(model.parent); + if (!success) + { + status.code = 500; + status.message = "Failed to move object " + objectId + " from folder " + sourceFolderId + " to folder " + model.parent.nodeRef; + status.redirect = true; + break script; + } } // success diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/store/children.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/store/children.post.desc.xml index 1277f9cfda..a65414ce30 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/store/children.post.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/store/children.post.desc.xml @@ -39,10 +39,10 @@ ID objectId: Id of the created folder object
Notes:
If the to-be-created Folder’s Object Type is not one of the “Allowed_Child_Object_Types” for the parent Folder, throw ConstraintViolationException.
Root folder can not be created using this service.
-]]> +]]> - /api/node/{store_type}/{store_id}/{id}/children - /api/path/{store_type}/{store_id}/{id}/children + /api/node/{store_type}/{store_id}/{id}/children?sourceFolderId={sourceFolderId} + /api/path/{store_type}/{store_id}/{id}/children?sourceFolderId={sourceFolderId} user CMIS diff --git a/source/java/org/alfresco/repo/cmis/rest/CMISScript.java b/source/java/org/alfresco/repo/cmis/rest/CMISScript.java index 28ff278626..e3cdd185ba 100644 --- a/source/java/org/alfresco/repo/cmis/rest/CMISScript.java +++ b/source/java/org/alfresco/repo/cmis/rest/CMISScript.java @@ -96,6 +96,8 @@ public class CMISScript extends BaseScopableProcessorExtension public static final String ARG_TYPES = "types"; public static final String ARG_UNFILE_MULTIFILE_DOCUMENTS = "unfileMultiFiledDocuments"; public static final String ARG_VERSIONING_STATE = "versioningState"; + public static final String ARG_SOURCE_FOLDER_ID = "sourceFolderId"; + // service dependencies private ServiceRegistry services;