Repository: camel Updated Branches: refs/heads/master 34e6970f1 -> 595976d1d
CAMEL-7961 Add autoStartup into Scala DSL with thanks to Edin Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/595976d1 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/595976d1 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/595976d1 Branch: refs/heads/master Commit: 595976d1dd302760ea1d3cfe0fb34c85be41597a Parents: 34e6970 Author: Willem Jiang <[email protected]> Authored: Sun Oct 26 16:51:33 2014 +0800 Committer: Willem Jiang <[email protected]> Committed: Sun Oct 26 16:51:33 2014 +0800 ---------------------------------------------------------------------- .../apache/camel/model/ProcessorDefinition.java | 19 +++++ .../scala/org/apache/camel/scala/dsl/DSL.scala | 5 ++ .../camel/scala/dsl/SAbstractDefinition.scala | 5 ++ .../camel/scala/dsl/builder/RouteBuilder.scala | 5 ++ .../camel/scala/dsl/AutoStartupTest.scala | 80 ++++++++++++++++++++ 5 files changed, 114 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/595976d1/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java index a6a8457..a3b05cd 100644 --- a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java @@ -893,6 +893,21 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type> return to(ExchangePattern.InOut, endpoints); } + public Type autoStartup(String autoStartup) { + return autoStartup(Boolean.valueOf(autoStartup)); + } + + public Type autoStartup(boolean autoStartup) { + ProcessorDefinition<?> def = this; + + RouteDefinition route = ProcessorDefinitionHelper.getRoute(def); + if (route != null) { + route.autoStartup(autoStartup); + } + + return (Type) this; + } + /** * Sets the id of this node. * <p/> @@ -1003,6 +1018,10 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type> return answer; } + public Type noAutoStartup() { + return autoStartup(false); + } + /** * <a href="http://camel.apache.org/pipes-nd-filters.html">Pipes and Filters EIP:</a> * Creates a {@link Pipeline} so that the message http://git-wip-us.apache.org/repos/asf/camel/blob/595976d1/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala b/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala index 9900246..e061f78 100644 --- a/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala +++ b/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala @@ -49,6 +49,9 @@ trait DSL { def handle[E <: Throwable : ClassTag](block: => Unit) : SOnExceptionDefinition[E] + def autoStartup(autoStartup :String) : DSL + def autoStartup(autoStartup :Boolean) : DSL + def id(id : String): DSL def idempotentConsumer(expression: Exchange => Any): SIdempotentConsumerDefinition def inOnly: DSL with Block @@ -64,6 +67,8 @@ trait DSL { def marshal(format : DataFormatDefinition) : DSL def multicast : SMulticastDefinition + def noAutoStartup() : DSL + def onCompletion : SOnCompletionDefinition def onCompletion(predicate: Exchange => Boolean) : SOnCompletionDefinition def onCompletion(config: Config[SOnCompletionDefinition]) : SOnCompletionDefinition http://git-wip-us.apache.org/repos/asf/camel/blob/595976d1/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala b/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala index 275b6d0..280cf99 100644 --- a/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala +++ b/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala @@ -77,6 +77,9 @@ abstract class SAbstractDefinition[P <: ProcessorDefinition[_]] extends DSL with def handle[E <: Throwable : ClassTag](block: => Unit) = SOnExceptionDefinition[E](target.onException(classTag[E].runtimeClass.asInstanceOf[Class[E]])).apply(block) + def autoStartup(autoStartup: String) = wrap(target.autoStartup(autoStartup)) + def autoStartup(autoStartup: Boolean) = wrap(target.autoStartup(autoStartup)) + def id(id : String) = wrap(target.id(id)) def idempotentConsumer(expression: Exchange => Any) = SIdempotentConsumerDefinition(target.idempotentConsumer(expression, null)) @Deprecated @@ -94,6 +97,8 @@ abstract class SAbstractDefinition[P <: ProcessorDefinition[_]] extends DSL with def marshal(format: DataFormatDefinition) = wrap(target.marshal(format)) def multicast = SMulticastDefinition(target.multicast) + def noAutoStartup() = wrap(target.autoStartup(false)) + def onCompletion: SOnCompletionDefinition = { val completion = SOnCompletionDefinition(target.onCompletion) // let's end the block in the Java DSL, we have a better way of handling blocks here http://git-wip-us.apache.org/repos/asf/camel/blob/595976d1/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala b/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala index 5d68b63..b1aaad4 100644 --- a/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala +++ b/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala @@ -125,6 +125,9 @@ class RouteBuilder extends Preamble with DSL with RoutesBuilder with Languages w def filter(predicate: Exchange => Any) = stack.top.filter(predicate) + def autoStartup(autoStartup :String) = stack.top.autoStartup(autoStartup) + def autoStartup(autoStartup :Boolean) = stack.top.autoStartup(autoStartup) + def id(id : String) = stack.top.id(id) def idempotentConsumer(expression: Exchange => Any) = stack.top.idempotentConsumer(expression) def inOnly = stack.top.inOnly @@ -152,6 +155,8 @@ class RouteBuilder extends Preamble with DSL with RoutesBuilder with Languages w def marshal(format: DataFormatDefinition) = stack.top.marshal(format) def multicast = stack.top.multicast + def noAutoStartup() = stack.top.autoStartup(false) + def onCompletion = { stack.size match { case 0 => SOnCompletionDefinition(builder.onCompletion)(this) http://git-wip-us.apache.org/repos/asf/camel/blob/595976d1/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/AutoStartupTest.scala ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/AutoStartupTest.scala b/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/AutoStartupTest.scala new file mode 100644 index 0000000..b70c29e --- /dev/null +++ b/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/AutoStartupTest.scala @@ -0,0 +1,80 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.scala.dsl + +import org.apache.camel.ServiceStatus +import org.apache.camel.ServiceStatus.{Started, Stopped} +import org.apache.camel.builder.RouteBuilder +import org.apache.camel.scala.dsl +import org.apache.camel.scala.dsl.AutoStartupTest._ +import org.apache.camel.test.junit4.CamelTestSupport +import org.scalatest.{BeforeAndAfterAll, FunSuiteLike} + +class AutoStartupTest extends CamelTestSupport with FunSuiteLike with BeforeAndAfterAll { + + override protected def createRouteBuilders(): Array[RouteBuilder] = { + Array( + createRoute(_ from s"direct:start1" id withoutDslRouteId to "mock:output"), + createRoute(_ from s"direct:start2" id booleanDslRouteId autoStartup false to "mock:output"), + createRoute(_ from s"direct:start3" id stringDslRouteId autoStartup "false" to "mock:output"), + createRoute(_ from s"direct:start4" id noAutoStartupDslRouteId noAutoStartup() to "mock:output") + ) + } + + override def beforeAll: Unit = { + setUp() + } + + test("route without auto startup dsl, is started by default") { + assertRouteStatus(withoutDslRouteId, Started) + } + + test("route with auto startup dsl using 'false' boolean, is stopped") { + assertRouteStatus(booleanDslRouteId, Stopped) + } + + test("route with auto startup dsl using 'false' string, is stopped") { + assertRouteStatus(stringDslRouteId, Stopped) + } + + test("route with no auto startup dsl, is stopped") { + assertRouteStatus(noAutoStartupDslRouteId, Stopped) + } + + private def assertRouteStatus(routeId: String, status: ServiceStatus) { + assert(context().getRouteStatus(routeId) === status) + } + + override protected def afterAll(): Unit = { + tearDown() + } +} + +object AutoStartupTest { + + private val withoutDslRouteId: String = "without-dsl-route" + private val booleanDslRouteId: String = "boolean-dsl-route" + private val stringDslRouteId: String = "string-dsl-route" + private val noAutoStartupDslRouteId: String = "no-auto-startup-dsl-route" + + private def createRoute(routeBuilderFunction: (dsl.builder.RouteBuilder) => Unit): RouteBuilder = + new dsl.builder.RouteBuilder { + routeBuilderFunction(this) + }.builder + +} +
