From 37e0b65814b6acb8b210f5c8953d7ec8eeefd7a4 Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Thu, 15 Jul 2010 10:37:56 +0000 Subject: [PATCH] SAIL-390 (SAIL-294): NodeDAO: Allow cm:auditable to be set - Added test and guard against client code wiping out cm:auditable by not passing in any values - If the cm:auditable behaviour is off and NO cm:auditable properties are passed in, then do nothing git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21192 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/audit/AuditableAspectTest.java | 24 +++++++++++++++++-- .../repo/domain/node/AbstractNodeDAOImpl.java | 7 +++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/source/java/org/alfresco/repo/audit/AuditableAspectTest.java b/source/java/org/alfresco/repo/audit/AuditableAspectTest.java index 82479054aa..701e1c805b 100644 --- a/source/java/org/alfresco/repo/audit/AuditableAspectTest.java +++ b/source/java/org/alfresco/repo/audit/AuditableAspectTest.java @@ -39,6 +39,7 @@ import org.alfresco.service.namespace.QName; import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.ApplicationContextHelper; import org.alfresco.util.debug.NodeStoreInspector; +import org.apache.chemistry.tck.atompub.fixture.AssertNotExistVisitor; import org.springframework.context.ApplicationContext; /** @@ -259,8 +260,12 @@ public class AuditableAspectTest extends TestCase // Now modify the node so that the auditable values advance nodeService.setProperty(nodeRef, ContentModel.PROP_FIRSTNAME, "TEST-FIRST-NAME-" + System.currentTimeMillis()); + String modifiedBy = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIER); + assertEquals( + "The modifier should have changed to reflect the current user", + AuthenticationUtil.getRunAsUser(), modifiedBy); - RetryingTransactionCallback setAuditableCallback = new RetryingTransactionCallback() + RetryingTransactionCallback setAuditableCallback1 = new RetryingTransactionCallback() { public Void execute() throws Throwable { @@ -272,7 +277,22 @@ public class AuditableAspectTest extends TestCase return null; } }; - transactionService.getRetryingTransactionHelper().doInTransaction(setAuditableCallback); + transactionService.getRetryingTransactionHelper().doInTransaction(setAuditableCallback1); + // Check + assertAuditableProperties(nodeRef, auditableProps); + + RetryingTransactionCallback setAuditableCallback2 = new RetryingTransactionCallback() + { + public Void execute() throws Throwable + { + behaviourFilter.disableBehaviour(ContentModel.ASPECT_AUDITABLE); // Lasts for txn + // Set some other property and ensure that the cm:auditable does not change + nodeService.setProperty(nodeRef, ContentModel.PROP_FIRSTNAME, "TEST-FIRST-NAME-" + System.currentTimeMillis()); + // Done + return null; + } + }; + transactionService.getRetryingTransactionHelper().doInTransaction(setAuditableCallback2); // Check assertAuditableProperties(nodeRef, auditableProps); } diff --git a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java index 45e6ca5178..067ae98a5b 100644 --- a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java @@ -1600,7 +1600,12 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO if (!policyBehaviourFilter.isEnabled(node.getNodeRef(), ContentModel.ASPECT_AUDITABLE)) { auditableProps = new AuditablePropertiesEntity(); - auditableProps.setAuditValues(null, null, newProps); + boolean containedAuditProperties = auditableProps.setAuditValues(null, null, newProps); + if (!containedAuditProperties) + { + // The behaviour is disabled, but no audit properties were passed in + auditableProps = null; + } } // Remove cm:auditable