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;