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:
Mark Paluch
2020-05-12 10:41:14 +02:00
parent f2f7886105
commit 7de360cb7b
3 changed files with 29 additions and 28 deletions

View File

@@ -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;

View File

@@ -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 -> {