DATACMNS-867 - Removed Optionals from Auditing methods signatures.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user