diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/store/checkedout.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/store/checkedout.get.js index 52e414becd..b3201609a7 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/store/checkedout.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/store/checkedout.get.js @@ -5,7 +5,7 @@ script: var folderId = args[cmis.ARG_FOLDER_ID]; if (folderId !== null) { - model.folder = search.findNode(folderId); + model.folder = cmis.findNode(folderId); if (model.folder === null) { status.code = 400; diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/store/checkedout.post.atomentry.js b/config/alfresco/templates/webscripts/org/alfresco/repository/store/checkedout.post.atomentry.js index cece79f060..95f40ae8b0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/store/checkedout.post.atomentry.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/store/checkedout.post.atomentry.js @@ -21,11 +21,11 @@ script: } // locate node - model.node = search.findNode(objectId); + model.node = cmis.findNode(objectId); if (model.node === null) { status.code = 400; - status.message = "Repository node " + model.node + " not found"; + status.message = "Repository node " + objectId + " not found"; status.redirect = true; break script; } diff --git a/source/java/org/alfresco/repo/cmis/rest/CMISScript.java b/source/java/org/alfresco/repo/cmis/rest/CMISScript.java index 1f5959c160..d5b85a029b 100644 --- a/source/java/org/alfresco/repo/cmis/rest/CMISScript.java +++ b/source/java/org/alfresco/repo/cmis/rest/CMISScript.java @@ -26,6 +26,8 @@ package org.alfresco.repo.cmis.rest; import java.util.Collection; import java.util.Iterator; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.alfresco.cmis.CMISDictionaryService; import org.alfresco.cmis.CMISJoinEnum; @@ -102,6 +104,10 @@ public class CMISScript extends BaseScopableProcessorExtension private CMISQueryService cmisQueryService; private Paging paging; + // versioned objectId pattern + // TODO: encapsulate elsewhere + private static final Pattern versionedObjectIdPattern = Pattern.compile(".+://.+/.+/.+"); + /** * Set the service registry @@ -229,7 +235,7 @@ public class CMISScript extends BaseScopableProcessorExtension } /** - * Finds a Node with the repository given a reference + * Finds a Node given a repository reference * * @param referenceType node, path * @param reference node => id, path => path @@ -246,6 +252,29 @@ public class CMISScript extends BaseScopableProcessorExtension return node; } + /** + * Finds a Node given CMIS ObjectId + * + * @param objectId + * @return node (or null, if not found) + */ + public ScriptNode findNode(String objectId) + { + NodeRef nodeRef; + Matcher matcher = versionedObjectIdPattern.matcher(objectId); + if (matcher.matches()) + { + // TODO: handle version id + nodeRef = new NodeRef(objectId.substring(0, objectId.lastIndexOf("/"))); + } + else + { + nodeRef = new NodeRef(objectId); + } + String[] reference = new String[] {nodeRef.getStoreRef().getProtocol(), nodeRef.getStoreRef().getIdentifier(), nodeRef.getId()}; + return findNode("node", reference); + } + /** * Finds an Association * diff --git a/source/java/org/alfresco/repo/cmis/rest/test/CMISTest.java b/source/java/org/alfresco/repo/cmis/rest/test/CMISTest.java index 84263770cc..18d58518b3 100644 --- a/source/java/org/alfresco/repo/cmis/rest/test/CMISTest.java +++ b/source/java/org/alfresco/repo/cmis/rest/test/CMISTest.java @@ -1068,6 +1068,10 @@ public class CMISTest extends BaseCMISWebScriptTest args2.put("checkin", "true"); Response checkinRes = sendRequest(new PutRequest(checkinUrl, checkinFile, Format.ATOMENTRY.mimetype()).setArgs(args2), 200, getAtomValidator()); assertNotNull(checkinRes); + + // use result of checkin (i.e. document returned), for next checkout + xml = checkinRes.getContentAsString(); + assertNotNull(xml); } // get all versions