diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml
index 96b1ab2d79..fcb95681be 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml
@@ -1050,6 +1050,15 @@
+
+
+
+ cm:lastThumbnailModification
+ cm:autoVersion
+ cm:autoVersionOnUpdateProps
+ cm:initialVersion
+
+
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditService.java
index ff22298610..2619299e26 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditService.java
@@ -75,7 +75,7 @@ public interface RecordsManagementAuditService extends RecordsManagementAuditSer
String eventName);
/**
- * Audits an event, assumes that the event should not be audited immediately.
+ * Audits an event, assumes that the event should not be audited immediately and not be removed if no property is changed.
*
* @param nodeRef node reference
* @param eventName event name
@@ -90,17 +90,19 @@ public interface RecordsManagementAuditService extends RecordsManagementAuditSer
/**
* Audit event.
*
- * @param nodeRef node reference
- * @param eventName event name
- * @param before property values before event
- * @param after property values after event
- * @param immediate true if event is to be audited immediately, false otherwise
+ * @param nodeRef node reference
+ * @param eventName event name
+ * @param before property values before event
+ * @param after property values after event
+ * @param immediate true if event is to be audited immediately, false otherwise
+ * @param removeIfNoPropertyChanged true if event is not audited when there are no properties changed, false otherwise
*/
void auditEvent(NodeRef nodeRef,
String eventName,
Map before,
Map after,
- boolean immediate);
+ boolean immediate,
+ boolean removeIfNoPropertyChanged);
/**
* Determines whether the RM audit log is currently enabled.
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java
index d433ff7ca2..0f80f5c1ab 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java
@@ -150,9 +150,14 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
private RecordsManagementService rmService;
private RecordsManagementActionService rmActionService;
private FilePlanService filePlanService;
+ private NamespaceService namespaceService;
private boolean shutdown = false;
+ private List ignoredAuditProperties;
+
+ private List propertiesToBeRemoved = new ArrayList();
+
private RMAuditTxnListener txnListener = new RMAuditTxnListener();
/** Registered and initialised records management auditEvents */
@@ -238,6 +243,22 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
this.filePlanService = filePlanService;
}
+ /**
+ * @param namespaceService namespace service
+ */
+ public void setNamespaceService(NamespaceService namespaceService)
+ {
+ this.namespaceService = namespaceService;
+ }
+
+ /**
+ * @param ignoredAuditProperties
+ */
+ public void setIgnoredAuditProperties(List ignoredAuditProperties)
+ {
+ this.ignoredAuditProperties = ignoredAuditProperties;
+ }
+
/**
* @see org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService#registerAuditEvent(java.lang.String, java.lang.String)
*/
@@ -282,6 +303,12 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
registerAuditEvent(AUDIT_EVENT_START, MSG_AUDIT_START);
registerAuditEvent(AUDIT_EVENT_STOP, MSG_AUDIT_STOP);
registerAuditEvent(AUDIT_EVENT_VIEW, MSG_AUDIT_VIEW);
+
+ // properties to be ignored by audit
+ for (String qname : ignoredAuditProperties)
+ {
+ this.propertiesToBeRemoved.add(QName.createQName(qname, this.namespaceService));
+ }
}
/**
@@ -332,7 +359,7 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
logger.info("Started Records Management auditing");
}
- auditEvent(filePlan, AUDIT_EVENT_START, null, null, true);
+ auditEvent(filePlan, AUDIT_EVENT_START, null, null, true, false);
}
/**
@@ -343,7 +370,7 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
ParameterCheck.mandatory("filePlan", filePlan);
// TODO use file plan to scope audit log
- auditEvent(filePlan, AUDIT_EVENT_STOP, null, null, true);
+ auditEvent(filePlan, AUDIT_EVENT_STOP, null, null, true, false);
auditService.disableAudit(
RM_AUDIT_APPLICATION_NAME,
@@ -370,7 +397,7 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
logger.debug("Records Management audit log has been cleared");
}
- auditEvent(filePlan, AUDIT_EVENT_CLEAR, null, null, true);
+ auditEvent(filePlan, AUDIT_EVENT_CLEAR, null, null, true, false);
}
/**
@@ -404,7 +431,7 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
@Override
public void auditEvent(NodeRef nodeRef, String eventName)
{
- auditEvent(nodeRef, eventName, null, null, false);
+ auditEvent(nodeRef, eventName, null, null, false, false);
}
/**
@@ -413,19 +440,19 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
@Override
public void auditEvent(NodeRef nodeRef, String eventName, Map before, Map after)
{
- auditEvent(nodeRef, eventName, before, after, false);
+ auditEvent(nodeRef, eventName, before, after, false, false);
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService#auditEvent(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, java.util.Map, java.util.Map, boolean)
*/
@Override
- public void auditEvent(NodeRef nodeRef, String eventName, Map before, Map after, boolean immediate)
+ public void auditEvent(NodeRef nodeRef, String eventName, Map before, Map after, boolean immediate, boolean removeIfNoPropertyChanged)
{
// deal with immediate auditing if required
if (immediate == true)
{
- Map auditMap = buildAuditMap(nodeRef, eventName, before, after);
+ Map auditMap = buildAuditMap(nodeRef, eventName, before, after, removeIfNoPropertyChanged);
auditComponent.recordAuditValues(RM_AUDIT_PATH_ROOT, auditMap);
}
else
@@ -457,6 +484,7 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
auditedNode.setEventName(eventName);
auditedNode.setNodePropertiesBefore(before);
auditedNode.setNodePropertiesAfter(after);
+ auditedNode.setRemoveIfNoPropertyChanged(removeIfNoPropertyChanged);
auditDetails.add(auditedNode);
}
@@ -471,7 +499,7 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
* @return
* @since 2.0.3
*/
- private Map buildAuditMap(NodeRef nodeRef, String eventName, Map propertiesBefore, Map propertiesAfter)
+ private Map buildAuditMap(NodeRef nodeRef, String eventName, Map propertiesBefore, Map propertiesAfter, boolean removeOnNoPropertyChange)
{
Map auditMap = new HashMap(13);
auditMap.put(
@@ -488,33 +516,63 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
RM_AUDIT_SNIPPET_NODE),
nodeRef);
}
-
+
+ // Filter out any properties to be audited if specified in the Spring configuration.
+ if (ignoredAuditProperties.isEmpty() == false)
+ {
+ removeAuditProperties(ignoredAuditProperties, propertiesBefore, propertiesAfter);
+ }
+
// Property changes
Pair