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
+
+}
+

Reply via email to