DATACMNS-1676 - Polishing.
Encapsulate field and introduce getter for ConversionService. Add missing Override annotation. Add author tags. Minor cleanups. Original pull request: #432.
This commit is contained in:
@@ -42,14 +42,26 @@ import org.springframework.util.Assert;
|
||||
* @author Oliver Gierke
|
||||
* @author Christoph Strobl
|
||||
* @author Jens Schauder
|
||||
* @author Pavel Horal
|
||||
* @since 1.5
|
||||
*/
|
||||
class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory {
|
||||
|
||||
protected final ConversionService conversionService;
|
||||
private final ConversionService conversionService;
|
||||
|
||||
public DefaultAuditableBeanWrapperFactory() {
|
||||
this.conversionService = getDateConversionService();
|
||||
|
||||
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
|
||||
|
||||
JodaTimeConverters.getConvertersToRegister().forEach(conversionService::addConverter);
|
||||
Jsr310Converters.getConvertersToRegister().forEach(conversionService::addConverter);
|
||||
ThreeTenBackPortConverters.getConvertersToRegister().forEach(conversionService::addConverter);
|
||||
|
||||
this.conversionService = conversionService;
|
||||
}
|
||||
|
||||
ConversionService getConversionService() {
|
||||
return conversionService;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -58,6 +70,7 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
|
||||
* @param source the auditing candidate.
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> Optional<AuditableBeanWrapper<T>> getBeanWrapperFor(T source) {
|
||||
|
||||
@@ -79,21 +92,6 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates conversion service for conversions between {@link TemporalAccessor} values and other supported date type values.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
static ConversionService getDateConversionService() {
|
||||
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
|
||||
|
||||
JodaTimeConverters.getConvertersToRegister().forEach(conversionService::addConverter);
|
||||
Jsr310Converters.getConvertersToRegister().forEach(conversionService::addConverter);
|
||||
ThreeTenBackPortConverters.getConvertersToRegister().forEach(conversionService::addConverter);
|
||||
|
||||
return conversionService;
|
||||
}
|
||||
|
||||
/**
|
||||
* An {@link AuditableBeanWrapper} that works with objects implementing
|
||||
*
|
||||
@@ -107,6 +105,7 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public AuditableInterfaceBeanWrapper(ConversionService conversionService, Auditable<Object, ?, TemporalAccessor> auditable) {
|
||||
|
||||
super(conversionService);
|
||||
|
||||
this.auditable = auditable;
|
||||
|
||||
@@ -17,10 +17,10 @@ package org.springframework.data.auditing;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.time.temporal.TemporalAccessor;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.data.annotation.CreatedBy;
|
||||
@@ -49,6 +49,7 @@ import org.springframework.util.ConcurrentReferenceHashMap;
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author Christoph Strobl
|
||||
* @author Pavel Horal
|
||||
* @since 1.8
|
||||
*/
|
||||
public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrapperFactory {
|
||||
@@ -88,7 +89,8 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap
|
||||
key -> new MappingAuditingMetadata(context, it.getClass()));
|
||||
|
||||
return Optional.<AuditableBeanWrapper<T>> ofNullable(metadata.isAuditable() //
|
||||
? new MappingMetadataAuditableBeanWrapper<T>(conversionService, entity.getPropertyPathAccessor(it), metadata)
|
||||
? new MappingMetadataAuditableBeanWrapper<>(getConversionService(), entity.getPropertyPathAccessor(it),
|
||||
metadata)
|
||||
: null);
|
||||
|
||||
}).orElseGet(() -> super.getBeanWrapperFor(source));
|
||||
@@ -126,8 +128,8 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap
|
||||
this.lastModifiedDatePaths = findPropertyPaths(type, LastModifiedDate.class, context);
|
||||
|
||||
this.isAuditable = Lazy.of( //
|
||||
() -> Arrays.asList(createdByPaths, createdDatePaths, lastModifiedByPaths, lastModifiedDatePaths) //
|
||||
.stream() //
|
||||
() -> //
|
||||
Stream.of(createdByPaths, createdDatePaths, lastModifiedByPaths, lastModifiedDatePaths) //
|
||||
.anyMatch(it -> !it.isEmpty())//
|
||||
);
|
||||
}
|
||||
@@ -249,7 +251,7 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap
|
||||
return accessor.getBean();
|
||||
}
|
||||
|
||||
private <S, P extends PersistentProperty<?>> S setProperty(
|
||||
private <S> S setProperty(
|
||||
PersistentPropertyPaths<?, ? extends PersistentProperty<?>> paths, S value) {
|
||||
|
||||
paths.forEach(it -> this.accessor.setProperty(it, value, OPTIONS));
|
||||
@@ -257,7 +259,7 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap
|
||||
return value;
|
||||
}
|
||||
|
||||
private <P extends PersistentProperty<?>> TemporalAccessor setDateProperty(
|
||||
private TemporalAccessor setDateProperty(
|
||||
PersistentPropertyPaths<?, ? extends PersistentProperty<?>> property, TemporalAccessor value) {
|
||||
|
||||
property.forEach(it -> {
|
||||
|
||||
Reference in New Issue
Block a user