Fixed Stream config

This commit is contained in:
Marcin Grzejszczak
2016-04-28 09:01:03 +02:00
parent 632753efb2
commit e87456382f
5 changed files with 6 additions and 70 deletions

View File

@@ -11,6 +11,7 @@ repositories {
dependencies {
compile project(':stub-runner-root:stub-runner-spring')
compile project(':stub-runner-root:stub-runner-messaging-root:stub-runner-messaging-integration')
compile project(':accurest-messaging-root:accurest-messaging-stream')
compile 'org.springframework.integration:spring-integration-java-dsl:[1.1.2.RELEASE,)'

View File

@@ -1,67 +0,0 @@
package io.codearte.accurest.stubrunner.messaging.stream
import groovy.transform.CompileStatic
import io.codearte.accurest.dsl.GroovyDsl
import io.codearte.accurest.stubrunner.BatchStubRunner
import io.codearte.accurest.stubrunner.StubConfiguration
import io.codearte.accurest.stubrunner.spring.StubRunnerConfiguration
import org.springframework.beans.factory.config.AutowireCapableBeanFactory
import org.springframework.cloud.stream.annotation.EnableBinding
import org.springframework.cloud.stream.binding.ChannelBindingService
import org.springframework.context.Lifecycle
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Import
import org.springframework.integration.dsl.FilterEndpointSpec
import org.springframework.integration.dsl.GenericEndpointSpec
import org.springframework.integration.dsl.IntegrationFlowBuilder
import org.springframework.integration.dsl.IntegrationFlows
import org.springframework.messaging.Message
import org.springframework.messaging.MessageChannel
/**
* Spring Cloud Stream configuration that iterates over the downloaded Groovy DSLs
* and registers a flow for each DSL.
*
* @author Marcin Grzejszczak
*/
@Configuration
@Import(StubRunnerConfiguration)
@EnableBinding
@CompileStatic
class StubRunnerStreamConfiguration {
@Bean
FlowRegistrar flowRegistrar(AutowireCapableBeanFactory beanFactory, BatchStubRunner batchStubRunner, ChannelBindingService channelBindingService) {
Map<StubConfiguration, Collection<GroovyDsl>> accurestContracts = batchStubRunner.accurestContracts
accurestContracts.each { StubConfiguration key, Collection<GroovyDsl> value ->
String name = "${key.groupId}_${key.artifactId}"
value.findAll { it?.input?.messageFrom?.clientValue }.each { GroovyDsl dsl ->
String flowName = "${name}_${dsl.label}_${dsl.hashCode()}"
IntegrationFlowBuilder builder = IntegrationFlows.from(dsl.input.messageFrom.clientValue)
.filter(new StubRunnerStreamMessageSelector(dsl), { FilterEndpointSpec e -> e.id("${flowName}.filter") } )
.transform(new StubRunnerStreamTransformer(dsl), { GenericEndpointSpec e -> e.id("${flowName}.transformer") })
if (dsl.outputMessage?.sentTo) {
builder = builder.channel(dsl.outputMessage.sentTo.clientValue)
} else {
builder = builder.handle(new DummyMessageHandler(), "handle")
}
beanFactory.initializeBean(builder.get(), flowName)
beanFactory.getBean("${flowName}.filter", Lifecycle.class).start();
beanFactory.getBean("${flowName}.transformer", Lifecycle.class).start();
channelBindingService.bindConsumer(beanFactory.getBean(dsl.input.messageFrom.clientValue, MessageChannel.class), dsl.input.messageFrom.clientValue)
if (dsl.outputMessage?.sentTo) {
channelBindingService.bindProducer(beanFactory.getBean(dsl.outputMessage.sentTo.clientValue, MessageChannel.class), dsl.outputMessage.sentTo.clientValue)
}
}
}
return new FlowRegistrar()
}
@CompileStatic
private static class DummyMessageHandler {
void handle(Message message) {}
}
static class FlowRegistrar {}
}

View File

@@ -13,6 +13,7 @@ import org.springframework.integration.core.MessageSelector
import org.springframework.messaging.Message
import java.util.regex.Pattern
/**
* Passes through a message that matches the one defined in the DSL
*

View File

@@ -1,3 +0,0 @@
# Auto Configuration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
io.codearte.accurest.stubrunner.messaging.stream.StubRunnerStreamConfiguration

View File

@@ -9,6 +9,9 @@ import io.codearte.accurest.stubrunner.StubFinder
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.test.SpringApplicationContextLoader
import org.springframework.cloud.stream.annotation.EnableBinding
import org.springframework.cloud.stream.messaging.Sink
import org.springframework.cloud.stream.messaging.Source
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.test.context.ContextConfiguration
@@ -22,6 +25,7 @@ import java.util.concurrent.TimeUnit
@ComponentScan
@EnableAutoConfiguration
@ContextConfiguration(classes = StreamStubRunnerSpec, loader = SpringApplicationContextLoader)
@EnableBinding([Sink, Source])
class StreamStubRunnerSpec extends Specification {
@Autowired StubFinder stubFinder