diff --git a/source/java/org/alfresco/repo/domain/node/AuditablePropertiesEntity.java b/source/java/org/alfresco/repo/domain/node/AuditablePropertiesEntity.java index 28585d2272..dc4cb09a10 100644 --- a/source/java/org/alfresco/repo/domain/node/AuditablePropertiesEntity.java +++ b/source/java/org/alfresco/repo/domain/node/AuditablePropertiesEntity.java @@ -31,6 +31,7 @@ import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.TypeDefinition; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.namespace.QName; +import org.alfresco.util.EqualsHelper; /** * Class holding properties associated with the cm:auditable aspect. @@ -60,6 +61,23 @@ public class AuditablePropertiesEntity return auditablePropertyQNames; } + /** + * + * @param qnames the property names to check + * @return Returns true if the set contains a cm:auditable property + */ + public static boolean hasAuditableProperty(Set qnames) + { + for (QName qname : qnames) + { + if (auditablePropertyQNames.contains(qname)) + { + return true; + } + } + return false; + } + /** * @return Returns true if the property belongs to the cm:auditable aspect */ @@ -299,47 +317,67 @@ public class AuditablePropertiesEntity if (properties.containsKey(ContentModel.PROP_CREATOR)) { - auditCreator = DefaultTypeConverter.INSTANCE.convert( + String auditCreatorNew = DefaultTypeConverter.INSTANCE.convert( String.class, properties.get(ContentModel.PROP_CREATOR)); - changed = true; + if (!EqualsHelper.nullSafeEquals(auditCreator, auditCreatorNew)) + { + auditCreator = auditCreatorNew; + changed = true; + } } if (properties.containsKey(ContentModel.PROP_MODIFIER)) { - auditModifier = DefaultTypeConverter.INSTANCE.convert( + String auditModifierNew = DefaultTypeConverter.INSTANCE.convert( String.class, properties.get(ContentModel.PROP_MODIFIER)); - changed = true; + if (!EqualsHelper.nullSafeEquals(auditModifier, auditModifierNew)) + { + auditModifier = auditModifierNew; + changed = true; + } } if (properties.containsKey(ContentModel.PROP_CREATED)) { - auditCreated = DefaultTypeConverter.INSTANCE.convert( + String auditCreatedNew = DefaultTypeConverter.INSTANCE.convert( String.class, properties.get(ContentModel.PROP_CREATED)); - changed = true; + if (!EqualsHelper.nullSafeEquals(auditCreated, auditCreatedNew)) + { + auditCreated = auditCreatedNew; + changed = true; + } } if (properties.containsKey(ContentModel.PROP_MODIFIED)) { - Date auditModifiedDate = DefaultTypeConverter.INSTANCE.convert( + Date auditModifiedNew = DefaultTypeConverter.INSTANCE.convert( Date.class, properties.get(ContentModel.PROP_MODIFIED)); - auditModifiedTime = auditModifiedDate.getTime(); - auditModified = DefaultTypeConverter.INSTANCE.convert( - String.class, - auditModifiedDate); - changed = true; + if (!EqualsHelper.nullSafeEquals(auditModified, auditModifiedNew)) + { + auditModifiedTime = auditModifiedNew.getTime(); + auditModified = DefaultTypeConverter.INSTANCE.convert( + String.class, + auditModifiedNew); + changed = true; + } } if (properties.containsKey(ContentModel.PROP_ACCESSED)) { - auditAccessed = DefaultTypeConverter.INSTANCE.convert( + String auditAccessedNew = DefaultTypeConverter.INSTANCE.convert( String.class, properties.get(ContentModel.PROP_ACCESSED)); - changed = true; + if (!EqualsHelper.nullSafeEquals(auditAccessed, auditAccessedNew)) + { + auditAccessed = auditAccessedNew; + changed = true; + } } - if (changed) + // If something has changed, make sure that any missing values are populated + if (changed && + (auditCreator == null || auditModifier == null || auditCreated == null || auditModified == null)) { - // Make sure populate any missing values // Get a user if we need if (user == null) {