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();