Efficiencies during low-level setting of cm:auditable properties (found during ALF-10224 investigation)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@30383 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2011-09-09 13:23:54 +00:00
parent 661e8777f7
commit e03abe5d16

View File

@@ -31,6 +31,7 @@ import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.dictionary.TypeDefinition; import org.alfresco.service.cmr.dictionary.TypeDefinition;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.util.EqualsHelper;
/** /**
* Class holding properties associated with the <b>cm:auditable</b> aspect. * Class holding properties associated with the <b>cm:auditable</b> aspect.
@@ -60,6 +61,23 @@ public class AuditablePropertiesEntity
return auditablePropertyQNames; return auditablePropertyQNames;
} }
/**
*
* @param qnames the property names to check
* @return Returns <tt>true</tt> if the set contains a <b>cm:auditable</b> property
*/
public static boolean hasAuditableProperty(Set<QName> qnames)
{
for (QName qname : qnames)
{
if (auditablePropertyQNames.contains(qname))
{
return true;
}
}
return false;
}
/** /**
* @return Returns <tt>true</tt> if the property belongs to the <b>cm:auditable</b> aspect * @return Returns <tt>true</tt> if the property belongs to the <b>cm:auditable</b> aspect
*/ */
@@ -299,47 +317,67 @@ public class AuditablePropertiesEntity
if (properties.containsKey(ContentModel.PROP_CREATOR)) if (properties.containsKey(ContentModel.PROP_CREATOR))
{ {
auditCreator = DefaultTypeConverter.INSTANCE.convert( String auditCreatorNew = DefaultTypeConverter.INSTANCE.convert(
String.class, String.class,
properties.get(ContentModel.PROP_CREATOR)); properties.get(ContentModel.PROP_CREATOR));
if (!EqualsHelper.nullSafeEquals(auditCreator, auditCreatorNew))
{
auditCreator = auditCreatorNew;
changed = true; changed = true;
} }
}
if (properties.containsKey(ContentModel.PROP_MODIFIER)) if (properties.containsKey(ContentModel.PROP_MODIFIER))
{ {
auditModifier = DefaultTypeConverter.INSTANCE.convert( String auditModifierNew = DefaultTypeConverter.INSTANCE.convert(
String.class, String.class,
properties.get(ContentModel.PROP_MODIFIER)); properties.get(ContentModel.PROP_MODIFIER));
if (!EqualsHelper.nullSafeEquals(auditModifier, auditModifierNew))
{
auditModifier = auditModifierNew;
changed = true; changed = true;
} }
}
if (properties.containsKey(ContentModel.PROP_CREATED)) if (properties.containsKey(ContentModel.PROP_CREATED))
{ {
auditCreated = DefaultTypeConverter.INSTANCE.convert( String auditCreatedNew = DefaultTypeConverter.INSTANCE.convert(
String.class, String.class,
properties.get(ContentModel.PROP_CREATED)); properties.get(ContentModel.PROP_CREATED));
if (!EqualsHelper.nullSafeEquals(auditCreated, auditCreatedNew))
{
auditCreated = auditCreatedNew;
changed = true; changed = true;
} }
}
if (properties.containsKey(ContentModel.PROP_MODIFIED)) if (properties.containsKey(ContentModel.PROP_MODIFIED))
{ {
Date auditModifiedDate = DefaultTypeConverter.INSTANCE.convert( Date auditModifiedNew = DefaultTypeConverter.INSTANCE.convert(
Date.class, Date.class,
properties.get(ContentModel.PROP_MODIFIED)); properties.get(ContentModel.PROP_MODIFIED));
auditModifiedTime = auditModifiedDate.getTime(); if (!EqualsHelper.nullSafeEquals(auditModified, auditModifiedNew))
{
auditModifiedTime = auditModifiedNew.getTime();
auditModified = DefaultTypeConverter.INSTANCE.convert( auditModified = DefaultTypeConverter.INSTANCE.convert(
String.class, String.class,
auditModifiedDate); auditModifiedNew);
changed = true; changed = true;
} }
}
if (properties.containsKey(ContentModel.PROP_ACCESSED)) if (properties.containsKey(ContentModel.PROP_ACCESSED))
{ {
auditAccessed = DefaultTypeConverter.INSTANCE.convert( String auditAccessedNew = DefaultTypeConverter.INSTANCE.convert(
String.class, String.class,
properties.get(ContentModel.PROP_ACCESSED)); properties.get(ContentModel.PROP_ACCESSED));
if (!EqualsHelper.nullSafeEquals(auditAccessed, auditAccessedNew))
{
auditAccessed = auditAccessedNew;
changed = true; 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 // Get a user if we need
if (user == null) if (user == null)
{ {