DATACMNS-867 - Removed Optionals from Auditing methods signatures.

This commit is contained in:
Oliver Gierke
2017-03-22 23:03:36 +01:00
parent ba875187cd
commit 58b2bde303
9 changed files with 104 additions and 109 deletions

View File

@@ -31,21 +31,21 @@ public interface AuditableBeanWrapper {
*
* @param value
*/
Optional<? extends Object> setCreatedBy(Optional<? extends Object> value);
Object setCreatedBy(Object value);
/**
* Set the date the object was created.
*
* @param value
*/
Optional<TemporalAccessor> setCreatedDate(Optional<TemporalAccessor> value);
TemporalAccessor setCreatedDate(TemporalAccessor value);
/**
* Set the last modifier of the object.
*
* @param value
*/
Optional<? extends Object> setLastModifiedBy(Optional<? extends Object> value);
Object setLastModifiedBy(Object value);
/**
* Returns the date of the last modification date of the backing bean.
@@ -60,5 +60,5 @@ public interface AuditableBeanWrapper {
*
* @param value
*/
Optional<TemporalAccessor> setLastModifiedDate(Optional<TemporalAccessor> value);
TemporalAccessor setLastModifiedDate(TemporalAccessor value);
}

View File

@@ -157,11 +157,14 @@ public class AuditingHandler implements InitializingBean {
Optional<Object> auditor = touchAuditor(it, isNew);
Optional<TemporalAccessor> now = dateTimeForNow ? touchDate(it, isNew) : Optional.empty();
Object defaultedNow = now.map(Object::toString).orElse("not set");
Object defaultedAuditor = auditor.map(Object::toString).orElse("unknown");
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Touched {} - Last modification at {} by {}",
new Object[] { target, defaultedNow, defaultedAuditor });
Object defaultedNow = now.map(Object::toString).orElse("not set");
Object defaultedAuditor = auditor.map(Object::toString).orElse("unknown");
LOGGER.debug("Touched {} - Last modification at {} by {}",
new Object[] { target, defaultedNow, defaultedAuditor });
}
});
}
@@ -177,14 +180,10 @@ public class AuditingHandler implements InitializingBean {
Optional<?> auditor = it.getCurrentAuditor();
if (isNew) {
wrapper.setCreatedBy(auditor);
if (!modifyOnCreation) {
return auditor;
}
}
auditor.filter(__ -> isNew).ifPresent(foo -> wrapper.setCreatedBy(foo));
auditor.filter(__ -> !isNew || modifyOnCreation).ifPresent(foo -> wrapper.setLastModifiedBy(foo));
return wrapper.setLastModifiedBy(auditor);
return auditor;
});
}
@@ -199,14 +198,10 @@ public class AuditingHandler implements InitializingBean {
Optional<TemporalAccessor> now = dateTimeProvider.getNow();
if (isNew) {
wrapper.setCreatedDate(now);
if (!modifyOnCreation) {
return now;
}
}
now.filter(__ -> isNew).ifPresent(it -> wrapper.setCreatedDate(it));
now.filter(__ -> !isNew || modifyOnCreation).ifPresent(it -> wrapper.setLastModifiedDate(it));
return wrapper.setLastModifiedDate(now);
return now;
}
/*

View File

@@ -94,10 +94,9 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @see org.springframework.data.auditing.AuditableBeanWrapper#setCreatedBy(java.util.Optional)
*/
@Override
public Optional<? extends Object> setCreatedBy(Optional<? extends Object> value) {
public Object setCreatedBy(Object value) {
auditable.setCreatedBy(value);
return value;
}
@@ -106,9 +105,10 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @see org.springframework.data.auditing.AuditableBeanWrapper#setCreatedDate(java.util.Optional)
*/
@Override
public Optional<TemporalAccessor> setCreatedDate(Optional<TemporalAccessor> value) {
public TemporalAccessor setCreatedDate(TemporalAccessor value) {
auditable.setCreatedDate(getAsTemporalAccessor(value, type));
auditable.setCreatedDate(
getAsTemporalAccessor(Optional.of(value), type).orElseThrow(() -> new IllegalStateException()));
return value;
}
@@ -118,7 +118,8 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @see org.springframework.data.auditing.DefaultAuditableBeanWrapperFactory.AuditableInterfaceBeanWrapper#setLastModifiedBy(java.util.Optional)
*/
@Override
public Optional<? extends Object> setLastModifiedBy(Optional<? extends Object> value) {
public Object setLastModifiedBy(Object value) {
auditable.setLastModifiedBy(value);
return value;
@@ -138,9 +139,10 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @see org.springframework.data.auditing.AuditableBeanWrapper#setLastModifiedDate(java.util.Optional)
*/
@Override
public Optional<TemporalAccessor> setLastModifiedDate(Optional<TemporalAccessor> value) {
public TemporalAccessor setLastModifiedDate(TemporalAccessor value) {
auditable.setLastModifiedDate(getAsTemporalAccessor(value, type));
auditable.setLastModifiedDate(
getAsTemporalAccessor(Optional.of(value), type).orElseThrow(() -> new IllegalStateException()));
return value;
}
@@ -179,33 +181,30 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @param source must not be {@literal null}.
* @return
*/
protected Optional<Object> getDateValueToSet(Optional<TemporalAccessor> value, Class<?> targetType, Object source) {
protected Object getDateValueToSet(TemporalAccessor value, Class<?> targetType, Object source) {
return value.map(it -> {
if (TemporalAccessor.class.equals(targetType)) {
return value;
}
if (TemporalAccessor.class.equals(targetType)) {
return it;
if (conversionService.canConvert(value.getClass(), targetType)) {
return conversionService.convert(value, targetType);
}
if (conversionService.canConvert(Date.class, targetType)) {
if (!conversionService.canConvert(value.getClass(), Date.class)) {
throw new IllegalArgumentException(
String.format("Cannot convert date type for member %s! From %s to java.util.Date to %s.", source,
value.getClass(), targetType));
}
if (conversionService.canConvert(it.getClass(), targetType)) {
return conversionService.convert(it, targetType);
}
Date date = conversionService.convert(value, Date.class);
return conversionService.convert(date, targetType);
}
if (conversionService.canConvert(Date.class, targetType)) {
if (!conversionService.canConvert(it.getClass(), Date.class)) {
throw new IllegalArgumentException(
String.format("Cannot convert date type for member %s! From %s to java.util.Date to %s.", source,
it.getClass(), targetType));
}
Date date = conversionService.convert(it, Date.class);
return conversionService.convert(date, targetType);
}
throw new IllegalArgumentException(String.format("Invalid date type for member %s! Supported types are %s.",
source, AnnotationAuditingMetadata.SUPPORTED_DATE_TYPES));
});
throw new IllegalArgumentException(String.format("Invalid date type for member %s! Supported types are %s.",
source, AnnotationAuditingMetadata.SUPPORTED_DATE_TYPES));
}
/**
@@ -215,8 +214,8 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @return
*/
@SuppressWarnings("unchecked")
protected <T> Optional<T> getAsTemporalAccessor(Optional<?> source, Class<T> target) {
protected <T extends TemporalAccessor> Optional<T> getAsTemporalAccessor(Optional<? extends Object> source,
Class<? extends T> target) {
return source.map(it -> target.isInstance(it) ? (T) it : conversionService.convert(it, target));
}
}
@@ -249,7 +248,7 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @see org.springframework.data.auditing.AuditableBeanWrapper#setCreatedBy(java.util.Optional)
*/
@Override
public Optional<? extends Object> setCreatedBy(Optional<? extends Object> value) {
public Object setCreatedBy(Object value) {
return setField(metadata.getCreatedByField(), value);
}
@@ -258,7 +257,8 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @see org.springframework.data.auditing.AuditableBeanWrapper#setCreatedDate(java.util.Optional)
*/
@Override
public Optional<TemporalAccessor> setCreatedDate(Optional<TemporalAccessor> value) {
public TemporalAccessor setCreatedDate(TemporalAccessor value) {
return setDateField(metadata.getCreatedDateField(), value);
}
@@ -267,7 +267,7 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @see org.springframework.data.auditing.AuditableBeanWrapper#setLastModifiedBy(java.util.Optional)
*/
@Override
public Optional<? extends Object> setLastModifiedBy(Optional<? extends Object> value) {
public Object setLastModifiedBy(Object value) {
return setField(metadata.getLastModifiedByField(), value);
}
@@ -291,7 +291,7 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @see org.springframework.data.auditing.AuditableBeanWrapper#setLastModifiedDate(java.util.Optional)
*/
@Override
public Optional<TemporalAccessor> setLastModifiedDate(Optional<TemporalAccessor> value) {
public TemporalAccessor setLastModifiedDate(TemporalAccessor value) {
return setDateField(metadata.getLastModifiedDateField(), value);
}
@@ -301,10 +301,9 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @param field
* @param value
*/
private Optional<? extends Object> setField(Optional<Field> field, Optional<? extends Object> value) {
private <T> T setField(Optional<Field> field, T value) {
field.ifPresent(it -> ReflectionUtils.setField(it, target,
Optional.class.isAssignableFrom(it.getType()) ? value : value.orElse(null)));
field.ifPresent(it -> ReflectionUtils.setField(it, target, value));
return value;
}
@@ -315,13 +314,9 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
* @param field
* @param value
*/
private Optional<TemporalAccessor> setDateField(Optional<Field> field, Optional<TemporalAccessor> value) {
private TemporalAccessor setDateField(Optional<Field> field, TemporalAccessor value) {
field.ifPresent(it -> {
Optional<Object> toSet = getDateValueToSet(value, it.getType(), it);
ReflectionUtils.setField(it, target,
Optional.class.isAssignableFrom(it.getType()) ? toSet : toSet.orElse(null));
});
field.ifPresent(it -> ReflectionUtils.setField(it, target, getDateValueToSet(value, it.getType(), it)));
return value;
}

View File

@@ -15,6 +15,7 @@
*/
package org.springframework.data.auditing;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAccessor;
import java.util.HashMap;
import java.util.Map;
@@ -158,9 +159,9 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap
* @see org.springframework.data.auditing.AuditableBeanWrapper#setCreatedBy(java.util.Optional)
*/
@Override
public Optional<? extends Object> setCreatedBy(Optional<? extends Object> value) {
public Object setCreatedBy(Object value) {
metadata.createdByProperty.ifPresent(it -> this.accessor.setProperty(it, value));
metadata.createdByProperty.ifPresent(it -> this.accessor.setProperty(it, Optional.of(value)));
return value;
}
@@ -170,12 +171,8 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap
* @see org.springframework.data.auditing.AuditableBeanWrapper#setCreatedDate(java.util.Optional)
*/
@Override
public Optional<TemporalAccessor> setCreatedDate(Optional<TemporalAccessor> value) {
metadata.createdDateProperty
.ifPresent(it -> this.accessor.setProperty(it, getDateValueToSet(value, it.getType(), it)));
return value;
public TemporalAccessor setCreatedDate(TemporalAccessor value) {
return setDateProperty(metadata.createdDateProperty, value);
}
/*
@@ -183,11 +180,8 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap
* @see org.springframework.data.auditing.AuditableBeanWrapper#setLastModifiedBy(java.util.Optional)
*/
@Override
public Optional<? extends Object> setLastModifiedBy(Optional<? extends Object> value) {
metadata.lastModifiedByProperty.ifPresent(it -> this.accessor.setProperty(it, value));
return value;
public Object setLastModifiedBy(Object value) {
return setProperty(metadata.lastModifiedByProperty, value);
}
/*
@@ -196,8 +190,8 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap
*/
@Override
public Optional<TemporalAccessor> getLastModifiedDate() {
return getAsTemporalAccessor(metadata.lastModifiedDateProperty.map(accessor::getProperty),
TemporalAccessor.class);
return getAsTemporalAccessor(metadata.lastModifiedDateProperty.flatMap(accessor::getProperty),
LocalDateTime.class);
}
/*
@@ -205,10 +199,22 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap
* @see org.springframework.data.auditing.AuditableBeanWrapper#setLastModifiedDate(java.util.Optional)
*/
@Override
public Optional<TemporalAccessor> setLastModifiedDate(Optional<TemporalAccessor> value) {
public TemporalAccessor setLastModifiedDate(TemporalAccessor value) {
return setDateProperty(metadata.lastModifiedDateProperty, value);
}
metadata.lastModifiedDateProperty
.ifPresent(it -> this.accessor.setProperty(it, getDateValueToSet(value, it.getType(), it)));
private <T, P extends PersistentProperty<?>> T setProperty(Optional<P> property, T value) {
property.ifPresent(it -> this.accessor.setProperty(it, Optional.of(value)));
return value;
}
private <P extends PersistentProperty<?>> TemporalAccessor setDateProperty(Optional<P> property,
TemporalAccessor value) {
property.ifPresent(
it -> this.accessor.setProperty(it, Optional.of(getDateValueToSet(value, it.getType(), accessor.getBean()))));
return value;
}