diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/atomentry.lib.atom.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/atomentry.lib.atom.ftl index e89adf226c..3172968d4e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/atomentry.lib.atom.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/atomentry.lib.atom.ftl @@ -201,8 +201,8 @@ [#macro row row renditionfilter="cmis:none" includeallowableactions=false includerelationships="none"] [@entry] [#-- TODO: calculate multiNodeResultSet from result set --] -[#if row.nodes?? && row.nodes?size == 1][#assign node = row.nodes?first/][/#if] -[#if node??] +[#if row.node??] +[#assign node = row.node/] ${node.properties.creator!""} [@contentstream node/] urn:uuid:${node.id} diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js index 79c76c3e20..f75e9a4109 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js @@ -248,22 +248,32 @@ function unpackProperties(node, typeDef, props, exclude, validator, vals) // extract value var val = null; var prop = (props == null) ? null : props.find(propName); - if (prop != null && !prop.isNull()) + if (prop != null) { - if (prop.isMultiValued()) + if (prop.type !== propDef.dataType.label) { - if (propDef.updatability === CMISCardinalityEnum.MULTI_VALUED) - { - status.code = 500; - status.message = "Property " + propName + " is single valued." - status.redirect = true; - return null; - } - val = prop.nativeValues; + status.code = 500; + status.message = "Property " + propName + " has a data type " + prop.type + " which is different to its property definition type " + propDef.dataType.label; + status.redirect = true; + return null; } - else + if (!prop.isNull()) { - val = prop.nativeValue; + if (prop.isMultiValued()) + { + if (propDef.updatability === CMISCardinalityEnum.MULTI_VALUED) + { + status.code = 500; + status.message = "Property " + propName + " is single valued." + status.redirect = true; + return null; + } + val = prop.nativeValues; + } + else + { + val = prop.nativeValue; + } } } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/queries.post.cmisquery.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/queries.post.cmisquery.js index 7b59d4969c..4ab05f8ca3 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/queries.post.cmisquery.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/queries.post.cmisquery.js @@ -68,18 +68,14 @@ script: model.resultset = paged.result; model.cursor = paged.cursor; - // check includeFlags are valid for query - var multiNodeResultSet = false; // todo: calculate from result set (for now, don't support joins) - if (multiNodeResultSet && (model.includeAllowableActions)) - { - status.setCode(status.STATUS_BAD_REQUEST, "Can't includeAllowableActions for multi-selector column result sets"); - break script; - } - + // TODO: check includeFlags are valid for query (with multiple types referenced in selectors) + // construct query uri model.queryUri = "/cmis/query"; model.queryArgs = cmis.ARG_QUERY_STATEMENT + "=" + model.statement; - if (model.includeAllowableActions) model.queryArgs += "&" + cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS + "=true"; + if (model.includeAllowableActions) model.queryArgs += "&" + cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS + "=" + model.includeAllowableActions; + if (model.includeRelationships != "none") model.queryArgs += "&" + cmis.ARG_INCLUDE_RELATIONSHIPS + "=" + model.includeRelationships; + if (model.renditionFilter != "cmis:none") model.queryArgs += "&" + cmis.ARG_RENDITION_FILTER + "=" + model.renditionFilter; model.queryArgs += "&" + cmis.ARG_SKIP_COUNT + "=" + page.number; model.queryArgs += "&" + cmis.ARG_MAX_ITEMS + "=" + page.size; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/query.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/query.get.js index 3ad56254ba..9930825de5 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/query.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/query.get.js @@ -43,11 +43,5 @@ script: model.resultset = paged.result; model.cursor = paged.cursor; - // check includeFlags are valid for query - var multiNodeResultSet = false; // TODO: calculate from result set (for now, don't support joins) - if (!multiNodeResultSet && (model.includeAllowableActions)) - { - status.setCode(status.STATUS_BAD_REQUEST, "Can't includeAllowableActions for multi-selector column result sets"); - break script; - } + // TODO: check includeFlags are valid for query (with multiple types referenced in selectors) } \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blogpost.lib.js b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blogpost.lib.js index b4d40ab729..68d255f8d1 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blogpost.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blogpost.lib.js @@ -14,7 +14,7 @@ function setOrUpdateReleasedAndUpdatedDates(node) // (re-)enable permission inheritance which got disable for draft posts // only set if was previously draft - as only the owner/admin can do this - if (!node.inheritsPermissions) + if (!node.inheritsPermissions()) { node.setInheritsPermissions(true); } diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/post/blog-post.put.json.js b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/post/blog-post.put.json.js index f39fd54f98..4c52114aba 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/post/blog-post.put.json.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/post/blog-post.put.json.js @@ -12,14 +12,14 @@ function updateBlogPostDraftMode(postNode) var isDraft = json.has("draft") && json.get("draft").toString() == "true"; // requested draft, previously non-draft: throw an exception - if (isDraft && ! currentDraft) + if (isDraft && !currentDraft) { // set an error status.setCode(status.STATUS_BAD_REQUEST, "Cannot put a published post back into draft mode"); return null; } - if (! isDraft) + if (!isDraft) { setOrUpdateReleasedAndUpdatedDates(postNode); } diff --git a/source/java/org/alfresco/repo/cmis/rest/CMISTemplateResultSet.java b/source/java/org/alfresco/repo/cmis/rest/CMISTemplateResultSet.java index cdcdd63aef..0c8cfa5b80 100644 --- a/source/java/org/alfresco/repo/cmis/rest/CMISTemplateResultSet.java +++ b/source/java/org/alfresco/repo/cmis/rest/CMISTemplateResultSet.java @@ -190,6 +190,20 @@ public class CMISTemplateResultSet implements Serializable return nodes.size() == 0 ? null : nodes.values(); } + /** + * @return node (if there is only a single node associated with the row), otherwise null + */ + public TemplateNode getNode() + { + try + { + NodeRef nodeRef = row.getNodeRef(); + return new TemplateNode(nodeRef, serviceRegistry, imageResolver); + } + catch(UnsupportedOperationException e) {} + return null; + } + /** * Builds a map of Template Nodes for the nodes associated with this row * diff --git a/source/java/org/alfresco/repo/cmis/ws/DMDiscoveryServicePort.java b/source/java/org/alfresco/repo/cmis/ws/DMDiscoveryServicePort.java index 4c6dd77949..b4194bbdb9 100644 --- a/source/java/org/alfresco/repo/cmis/ws/DMDiscoveryServicePort.java +++ b/source/java/org/alfresco/repo/cmis/ws/DMDiscoveryServicePort.java @@ -39,6 +39,7 @@ import org.alfresco.cmis.CMISResultSetColumn; import org.alfresco.cmis.CMISResultSetRow; import org.alfresco.cmis.CMISServiceException; import org.alfresco.cmis.PropertyFilter; +import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode; import org.alfresco.repo.cmis.ws.utils.ExceptionUtil; import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.service.cmr.repository.NodeRef; @@ -91,6 +92,7 @@ public class DMDiscoveryServicePort extends DMAbstractServicePort implements Dis // execute query // TODO: If the select clause includes properties from more than a single type reference, then the repository SHOULD throw an exception if includeRelationships or // includeAllowableActions is specified as true. + options.setQueryMode(CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); CMISResultSet resultSet = cmisQueryService.query(options); CMISResultSetColumn[] columns = resultSet.getMetaData().getColumns();