More DSL; upgrade to latest GAs, prepare release

This commit is contained in:
Artem Bilan
2019-10-01 16:58:45 -04:00
parent e3225baa43
commit b2ab9b325b
3 changed files with 52 additions and 5 deletions

View File

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

View File

@@ -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<MyType>()` variant.
@@ -35,8 +42,41 @@ inline fun <reified T> IntegrationFlowDefinition<*>.convert(
*
* @author Artem Bilan
*/
inline fun <reified P, T> IntegrationFlowDefinition<*>.reifiedTransform(
inline fun <reified P, T> IntegrationFlowDefinition<*>.transformReified(
crossinline function: (P) -> T,
crossinline configurer: (GenericEndpointSpec<MessageTransformingHandler>) -> Unit = {}):
IntegrationFlowDefinition<*> =
transform(P::class.java, { function(it) }) { configurer(it) }
/**
* Extension for [IntegrationFlowDefinition.split] providing a `split<MyTypeIn>()` variant.
*
* @author Artem Bilan
*/
inline fun <reified P> IntegrationFlowDefinition<*>.split(
crossinline function: (P) -> Any,
crossinline configurer: (SplitterEndpointSpec<MethodInvokingSplitter>) -> Unit = {}):
IntegrationFlowDefinition<*> =
split(P::class.java, { function(it) }) { configurer(it) }
/**
* Extension for [IntegrationFlowDefinition.filter] providing a `filter<MyTypeIn>()` variant.
*
* @author Artem Bilan
*/
inline fun <reified P> 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<MyTypeIn>()` variant.
*
* @author Artem Bilan
*/
inline fun <reified P, T> IntegrationFlowDefinition<*>.routeReified(
crossinline function: (P) -> T,
crossinline configurer: (RouterSpec<T, MethodInvokingRouter>) -> Unit = {}):
IntegrationFlowDefinition<*> =
route(P::class.java, { function(it) }) { configurer(it) }

View File

@@ -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<Message<Int>, Int>({ it.payload * 2 }) { it.id("foo") }
it.transformReified<Message<Int>, Int>({ it.payload * 2 }) { it.id("foo") }
.channel(fluxChannel)
}
@@ -191,12 +194,14 @@ class KotlinDslTests {
fun functionFlow() =
integrationFlow<Function<String, String>>({ it.beanName("functionGateway") }) {
it.transform<String, String> { it.toUpperCase() }
.split<String>({ p -> p })
}
@Bean
fun functionFlow2() =
integrationFlow<Function<*, *>> {
it.transform<String, String> { it.toLowerCase() }
.routeReified<Message<*>, 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<Message<Any>>({ m -> m.payload is String })
.channel { c -> c.queue("testSupplierResult2") }
}
}