Add PropertyMapper.from(value)

See gh-13837
This commit is contained in:
Dmytro Nosan 2018-07-20 18:14:56 +03:00 committed by Stephane Nicoll
parent dd9209c7d9
commit 1bd52bc432
10 changed files with 62 additions and 27 deletions

View File

@ -122,7 +122,7 @@ public class BasicBatchConfigurer implements BatchConfigurer {
protected JobRepository createJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
PropertyMapper map = PropertyMapper.get();
map.from(() -> this.dataSource).to(factory::setDataSource);
map.from(this.dataSource).to(factory::setDataSource);
map.from(this::determineIsolationLevel).whenNonNull()
.to(factory::setIsolationLevelForCreate);
map.from(this.properties::getTablePrefix).whenHasText()

View File

@ -85,9 +85,8 @@ public class ConcurrentKafkaListenerContainerFactoryConfigurer {
PropertyMapper map = PropertyMapper.get();
Listener properties = this.properties.getListener();
map.from(properties::getConcurrency).whenNonNull().to(factory::setConcurrency);
map.from(() -> this.messageConverter).whenNonNull()
.to(factory::setMessageConverter);
map.from(() -> this.replyTemplate).whenNonNull().to(factory::setReplyTemplate);
map.from(this.messageConverter).whenNonNull().to(factory::setMessageConverter);
map.from(this.replyTemplate).whenNonNull().to(factory::setReplyTemplate);
map.from(properties::getType).whenEqualTo(Listener.Type.BATCH)
.toCall(() -> factory.setBatchListener(true));
}

View File

@ -84,7 +84,7 @@ public class TomcatWebServerFactoryCustomizer implements
tomcatProperties.getMaxThreads()));
propertyMapper.from(tomcatProperties::getMinSpareThreads).when(this::isPositive)
.to((minSpareThreads) -> customizeMinThreads(factory, minSpareThreads));
propertyMapper.from(() -> determineMaxHttpHeaderSize()).when(this::isPositive)
propertyMapper.from(this::determineMaxHttpHeaderSize).when(this::isPositive)
.to((maxHttpHeaderSize) -> customizeMaxHttpHeaderSize(factory,
maxHttpHeaderSize));
propertyMapper.from(tomcatProperties::getMaxSwallowSize).whenNonNull()

View File

@ -81,7 +81,7 @@ public class UndertowWebServerFactoryCustomizer implements
.to(factory::setAccessLogSuffix);
propertyMapper.from(accesslogProperties::isRotate)
.to(factory::setAccessLogRotate);
propertyMapper.from(() -> getOrDeduceUseForwardHeaders())
propertyMapper.from(this::getOrDeduceUseForwardHeaders)
.to(factory::setUseForwardHeaders);
propertyMapper.from(properties::getMaxHttpHeaderSize).when(this::isPositive)
.to((maxHttpHeaderSize) -> customizeMaxHttpHeaderSize(factory,

View File

@ -138,10 +138,10 @@ public class MultipartProperties {
public MultipartConfigElement createMultipartConfig() {
MultipartConfigFactory factory = new MultipartConfigFactory();
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
map.from(() -> this.fileSizeThreshold).to(factory::setFileSizeThreshold);
map.from(() -> this.location).whenHasText().to(factory::setLocation);
map.from(() -> this.maxRequestSize).to(factory::setMaxRequestSize);
map.from(() -> this.maxFileSize).to(factory::setMaxFileSize);
map.from(this.fileSizeThreshold).to(factory::setFileSizeThreshold);
map.from(this.location).whenHasText().to(factory::setLocation);
map.from(this.maxRequestSize).to(factory::setMaxRequestSize);
map.from(this.maxFileSize).to(factory::setMaxFileSize);
return factory.createMultipartConfig();
}

View File

@ -91,6 +91,18 @@ public final class PropertyMapper {
return new PropertyMapper(this, operator);
}
/**
* Return a new {@link Source} from the specified value that can be used to perform
* the mapping.
* @param <T> the source type
* @param value the value
* @return a {@link Source} that can be used to complete the mapping
* @see #from(Supplier)
*/
public <T> Source<T> from(T value) {
return from(() -> value);
}
/**
* Return a new {@link Source} from the specified value supplier that can be used to
* perform the mapping.

View File

@ -279,16 +279,15 @@ public class TaskExecutorBuilder {
*/
public <T extends ThreadPoolTaskExecutor> T configure(T taskExecutor) {
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
map.from(() -> this.queueCapacity).to(taskExecutor::setQueueCapacity);
map.from(() -> this.corePoolSize).to(taskExecutor::setCorePoolSize);
map.from(() -> this.maxPoolSize).to(taskExecutor::setMaxPoolSize);
map.from(() -> this.keepAlive).asInt(Duration::getSeconds)
map.from(this.queueCapacity).to(taskExecutor::setQueueCapacity);
map.from(this.corePoolSize).to(taskExecutor::setCorePoolSize);
map.from(this.maxPoolSize).to(taskExecutor::setMaxPoolSize);
map.from(this.keepAlive).asInt(Duration::getSeconds)
.to(taskExecutor::setKeepAliveSeconds);
map.from(() -> this.allowCoreThreadTimeOut)
.to(taskExecutor::setAllowCoreThreadTimeOut);
map.from(() -> this.threadNamePrefix).whenHasText()
map.from(this.allowCoreThreadTimeOut).to(taskExecutor::setAllowCoreThreadTimeOut);
map.from(this.threadNamePrefix).whenHasText()
.to(taskExecutor::setThreadNamePrefix);
map.from(() -> this.taskDecorator).to(taskExecutor::setTaskDecorator);
map.from(this.taskDecorator).to(taskExecutor::setTaskDecorator);
if (!CollectionUtils.isEmpty(this.taskExecutorCustomizers)) {
for (TaskExecutorCustomizer customizer : this.taskExecutorCustomizers) {

View File

@ -167,8 +167,8 @@ public class TaskSchedulerBuilder {
*/
public <T extends ThreadPoolTaskScheduler> T configure(T taskScheduler) {
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
map.from(() -> this.poolSize).to(taskScheduler::setPoolSize);
map.from(() -> this.threadNamePrefix).to(taskScheduler::setThreadNamePrefix);
map.from(this.poolSize).to(taskScheduler::setPoolSize);
map.from(this.threadNamePrefix).to(taskScheduler::setThreadNamePrefix);
if (!CollectionUtils.isEmpty(this.taskSchedulerCustomizers)) {
for (TaskSchedulerCustomizer customizer : this.taskSchedulerCustomizers) {

View File

@ -502,13 +502,12 @@ public class WebServiceTemplateBuilder {
configureMessageSenders(webServiceTemplate);
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
applyCustomizers(webServiceTemplate, this.internalCustomizers);
map.from(() -> this.marshaller).to(webServiceTemplate::setMarshaller);
map.from(() -> this.unmarshaller).to(webServiceTemplate::setUnmarshaller);
map.from(() -> this.destinationProvider)
.to(webServiceTemplate::setDestinationProvider);
map.from(() -> this.transformerFactoryClass)
map.from(this.marshaller).to(webServiceTemplate::setMarshaller);
map.from(this.unmarshaller).to(webServiceTemplate::setUnmarshaller);
map.from(this.destinationProvider).to(webServiceTemplate::setDestinationProvider);
map.from(this.transformerFactoryClass)
.to(webServiceTemplate::setTransformerFactoryClass);
map.from(() -> this.messageFactory).to(webServiceTemplate::setMessageFactory);
map.from(this.messageFactory).to(webServiceTemplate::setMessageFactory);
if (!CollectionUtils.isEmpty(this.interceptors)) {
Set<ClientInterceptor> merged = new LinkedHashSet<>(this.interceptors);
if (webServiceTemplate.getInterceptors() != null) {

View File

@ -37,11 +37,37 @@ public class PropertyMapperTests {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void fromNullValue() {
ExampleDest dest = new ExampleDest();
this.map.from((String) null).to(dest::setName);
assertThat(dest.getName()).isNull();
}
@Test
public void fromValue() {
ExampleDest dest = new ExampleDest();
this.map.from("Hello World").to(dest::setName);
assertThat(dest.getName()).isEqualTo("Hello World");
}
@Test
public void fromValueAsIntShouldAdaptSupplier() {
Integer result = this.map.from("123").asInt(Long::valueOf)
.toInstance(Integer::new);
assertThat(result).isEqualTo(123);
}
@Test
public void fromValueAlwaysApplyingWhenNonNullShouldAlwaysApplyNonNullToSource() {
this.map.alwaysApplyingWhenNonNull().from((String) null).toCall(Assert::fail);
}
@Test
public void fromWhenSupplierIsNullShouldThrowException() {
this.thrown.expect(IllegalArgumentException.class);
this.thrown.expectMessage("Supplier must not be null");
this.map.from(null);
this.map.from((Supplier<?>) null);
}
@Test