From e770d11be4592c3b5f90f02e1c2c7c0da45ec96b Mon Sep 17 00:00:00 2001 From: Alexandru Epure Date: Tue, 9 Aug 2016 14:12:27 +0000 Subject: [PATCH] Merged 5.2.N (5.2.1) to HEAD (5.2) 129166 mmuller: Merged RETURN-OF-THE-API (5.2.0) to 5.2.N (5.2.1) 128489 jvonka: V1 REST API: Node Version History - minor tweak for "delete version" - re: fix-up versionType if deleting last version REPO-835 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@129340 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/public-rest-context.xml | 4 ++- .../rest/api/nodes/NodeVersionsRelation.java | 30 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/config/alfresco/public-rest-context.xml b/config/alfresco/public-rest-context.xml index e8b7149d0c..bfe5e94778 100644 --- a/config/alfresco/public-rest-context.xml +++ b/config/alfresco/public-rest-context.xml @@ -798,7 +798,9 @@ - + + + diff --git a/source/java/org/alfresco/rest/api/nodes/NodeVersionsRelation.java b/source/java/org/alfresco/rest/api/nodes/NodeVersionsRelation.java index ad6374d215..5afa2097eb 100644 --- a/source/java/org/alfresco/rest/api/nodes/NodeVersionsRelation.java +++ b/source/java/org/alfresco/rest/api/nodes/NodeVersionsRelation.java @@ -26,6 +26,7 @@ package org.alfresco.rest.api.nodes; import org.alfresco.model.ContentModel; +import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.repo.version.Version2Model; import org.alfresco.repo.version.VersionModel; @@ -82,6 +83,7 @@ public class NodeVersionsRelation extends AbstractNodeRelation implements InitializingBean { protected VersionService versionService; + protected BehaviourFilter behaviourFilter; @Override public void afterPropertiesSet() @@ -91,6 +93,12 @@ public class NodeVersionsRelation extends AbstractNodeRelation implements this.versionService = sr.getVersionService(); } + + public void setBehaviourFilter(BehaviourFilter behaviourFilter) + { + this.behaviourFilter = behaviourFilter; + } + /** * List version history * @@ -233,24 +241,34 @@ public class NodeVersionsRelation extends AbstractNodeRelation implements { Version v = findVersion(nodeId, versionId); - NodeRef liveVersionedNodeRef = v.getVersionedNodeRef(); + // live (aka versioned) nodeRef + NodeRef nodeRef = v.getVersionedNodeRef(); - if (sr.getPermissionService().hasPermission(liveVersionedNodeRef, PermissionService.DELETE) != AccessStatus.ALLOWED) + if (sr.getPermissionService().hasPermission(nodeRef, PermissionService.DELETE) != AccessStatus.ALLOWED) { throw new PermissionDeniedException("Cannot delete version"); } - versionService.deleteVersion(liveVersionedNodeRef, v); + versionService.deleteVersion(nodeRef, v); - Map props = sr.getNodeService().getProperties(liveVersionedNodeRef); + Map props = sr.getNodeService().getProperties(nodeRef); if (props.get(ContentModel.PROP_VERSION_LABEL) == null) { // last version was deleted if (props.get(ContentModel.PROP_VERSION_TYPE) != null) { // minor fix up to versionable aspect - ie. remove versionType - // TODO should we disable behaviours, eg. audit, versionable - sr.getNodeService().removeProperty(liveVersionedNodeRef, ContentModel.PROP_VERSION_TYPE); + behaviourFilter.disableBehaviour(nodeRef, ContentModel.ASPECT_VERSIONABLE); + behaviourFilter.disableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE); + try + { + sr.getNodeService().removeProperty(nodeRef, ContentModel.PROP_VERSION_TYPE); + } + finally + { + behaviourFilter.enableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE); + behaviourFilter.enableBehaviour(nodeRef, ContentModel.ASPECT_VERSIONABLE); + } } } }