From 93bb3d2e2142d01f9d049a6adeda80e45a6b366e Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 23 Mar 2017 10:10:50 +0100 Subject: [PATCH] DATACMNS-867 - Additional assertions in AuditingHandler. --- .../data/auditing/AuditingHandler.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/auditing/AuditingHandler.java b/src/main/java/org/springframework/data/auditing/AuditingHandler.java index cdb69f919..8315a3a63 100644 --- a/src/main/java/org/springframework/data/auditing/AuditingHandler.java +++ b/src/main/java/org/springframework/data/auditing/AuditingHandler.java @@ -22,6 +22,7 @@ import java.util.Optional; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.data.domain.Auditable; import org.springframework.data.domain.AuditorAware; @@ -125,6 +126,9 @@ public class AuditingHandler implements InitializingBean { * @param source */ public void markCreated(Object source) { + + Assert.notNull(source, "Entity must not be null!"); + touch(source, true); } @@ -134,6 +138,9 @@ public class AuditingHandler implements InitializingBean { * @param source */ public void markModified(Object source) { + + Assert.notNull(source, "Entity must not be null!"); + touch(source, false); } @@ -169,17 +176,22 @@ public class AuditingHandler implements InitializingBean { } /** - * Sets modifying and creating auditioner. Creating auditioner is only set on new auditables. + * Sets modifying and creating auditor. Creating auditor is only set on new auditables. * * @param auditable * @return */ private Optional touchAuditor(AuditableBeanWrapper wrapper, boolean isNew) { + Assert.notNull(wrapper, "AuditableBeanWrapper must not be null!"); + return auditorAware.map(it -> { Optional auditor = it.getCurrentAuditor(); + Assert.notNull(auditor, + () -> String.format("Auditor must not be null! Returned by: %s!", AopUtils.getTargetClass(it))); + auditor.filter(__ -> isNew).ifPresent(foo -> wrapper.setCreatedBy(foo)); auditor.filter(__ -> !isNew || modifyOnCreation).ifPresent(foo -> wrapper.setLastModifiedBy(foo)); @@ -196,8 +208,12 @@ public class AuditingHandler implements InitializingBean { */ private Optional touchDate(AuditableBeanWrapper wrapper, boolean isNew) { + Assert.notNull(wrapper, "AuditableBeanWrapper must not be null!"); + Optional now = dateTimeProvider.getNow(); + Assert.notNull(now, () -> String.format("Now must not be null! Returned by: %s!", dateTimeProvider.getClass())); + now.filter(__ -> isNew).ifPresent(it -> wrapper.setCreatedDate(it)); now.filter(__ -> !isNew || modifyOnCreation).ifPresent(it -> wrapper.setLastModifiedDate(it));