From b2ab9b325ba3fcffeae8099a94f734dcea5a63ef Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Tue, 1 Oct 2019 16:58:45 -0400 Subject: [PATCH] More DSL; upgrade to latest GAs, prepare release --- spring-integration-kotlin-dsl/build.gradle | 2 +- .../IntegrationFlowBuilderExtensions.kt | 42 ++++++++++++++++++- .../dsl/kotlin/test/KotlinDslTests.kt | 13 ++++-- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/spring-integration-kotlin-dsl/build.gradle b/spring-integration-kotlin-dsl/build.gradle index 5620dd3..f111f42 100644 --- a/spring-integration-kotlin-dsl/build.gradle +++ b/spring-integration-kotlin-dsl/build.gradle @@ -31,7 +31,7 @@ ext { junitVersion = '5.5.2' log4jVersion = '2.12.1' reactorVersion = 'Dysprosium-RELEASE' - springIntegrationVersion = '5.2.0.BUILD-SNAPSHOT' + springIntegrationVersion = '5.2.0.RELEASE' idPrefix = 'kotlin-dsl' diff --git a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/IntegrationFlowBuilderExtensions.kt b/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/IntegrationFlowBuilderExtensions.kt index a8c277b..4bd8bf0 100644 --- a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/IntegrationFlowBuilderExtensions.kt +++ b/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/IntegrationFlowBuilderExtensions.kt @@ -16,9 +16,16 @@ package org.springframework.integration.dsl.kotlin +import org.springframework.integration.dsl.FilterEndpointSpec import org.springframework.integration.dsl.GenericEndpointSpec import org.springframework.integration.dsl.IntegrationFlowDefinition +import org.springframework.integration.dsl.RouterSpec +import org.springframework.integration.dsl.SplitterEndpointSpec +import org.springframework.integration.handler.ServiceActivatingHandler +import org.springframework.integration.router.MethodInvokingRouter +import org.springframework.integration.splitter.MethodInvokingSplitter import org.springframework.integration.transformer.MessageTransformingHandler +import org.springframework.messaging.MessageHeaders /** * Extension for [IntegrationFlowDefinition.convert] providing a `convert()` variant. @@ -35,8 +42,41 @@ inline fun IntegrationFlowDefinition<*>.convert( * * @author Artem Bilan */ -inline fun IntegrationFlowDefinition<*>.reifiedTransform( +inline fun IntegrationFlowDefinition<*>.transformReified( crossinline function: (P) -> T, crossinline configurer: (GenericEndpointSpec) -> Unit = {}): IntegrationFlowDefinition<*> = transform(P::class.java, { function(it) }) { configurer(it) } + +/** + * Extension for [IntegrationFlowDefinition.split] providing a `split()` variant. + * + * @author Artem Bilan + */ +inline fun IntegrationFlowDefinition<*>.split( + crossinline function: (P) -> Any, + crossinline configurer: (SplitterEndpointSpec) -> Unit = {}): + IntegrationFlowDefinition<*> = + split(P::class.java, { function(it) }) { configurer(it) } + +/** + * Extension for [IntegrationFlowDefinition.filter] providing a `filter()` variant. + * + * @author Artem Bilan + */ +inline fun IntegrationFlowDefinition<*>.filterReified( + crossinline function: (P) -> Boolean, + crossinline configurer: (FilterEndpointSpec) -> Unit = {}): + IntegrationFlowDefinition<*> = + filter(P::class.java, { function(it) }) { configurer(it) } + +/** + * Extension for [IntegrationFlowDefinition.filter] providing a `filter()` variant. + * + * @author Artem Bilan + */ +inline fun IntegrationFlowDefinition<*>.routeReified( + crossinline function: (P) -> T, + crossinline configurer: (RouterSpec) -> Unit = {}): + IntegrationFlowDefinition<*> = + route(P::class.java, { function(it) }) { configurer(it) } diff --git a/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt b/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt index 9777676..880965d 100644 --- a/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt +++ b/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt @@ -33,8 +33,11 @@ import org.springframework.integration.core.MessagingTemplate import org.springframework.integration.dsl.Pollers import org.springframework.integration.dsl.context.IntegrationFlowContext import org.springframework.integration.dsl.kotlin.convert -import org.springframework.integration.dsl.kotlin.reifiedTransform +import org.springframework.integration.dsl.kotlin.filterReified import org.springframework.integration.dsl.kotlin.integrationFlow +import org.springframework.integration.dsl.kotlin.routeReified +import org.springframework.integration.dsl.kotlin.split +import org.springframework.integration.dsl.kotlin.transformReified import org.springframework.integration.endpoint.MessageProcessorMessageSource import org.springframework.integration.handler.LoggingHandler import org.springframework.integration.scheduling.PollerMetadata @@ -161,7 +164,7 @@ class KotlinDslTests { val integrationFlow = integrationFlow(publisher) { - it.reifiedTransform, Int>({ it.payload * 2 }) { it.id("foo") } + it.transformReified, Int>({ it.payload * 2 }) { it.id("foo") } .channel(fluxChannel) } @@ -191,12 +194,14 @@ class KotlinDslTests { fun functionFlow() = integrationFlow>({ it.beanName("functionGateway") }) { it.transform { it.toUpperCase() } + .split({ p -> p }) } @Bean fun functionFlow2() = integrationFlow> { it.transform { it.toLowerCase() } + .routeReified, Any?> ({ m -> m.headers.replyChannel }) { it.id("router") } } @Bean @@ -228,7 +233,9 @@ class KotlinDslTests { fun flowFromSupplier2() = integrationFlow({ "testSupplier2" }, { it.poller { it.trigger(OnlyOnceTrigger()) } }) { - it.channel { c -> c.queue("testSupplierResult2") } + it + .filterReified>({ m -> m.payload is String }) + .channel { c -> c.queue("testSupplierResult2") } } }