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);
+ }
}
}
}