You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2008/04/04 18:17:13 UTC

svn commit: r644754 - in /activemq/camel/trunk/components: ./ camel-scala/ camel-scala/src/ camel-scala/src/main/ camel-scala/src/main/scala/ camel-scala/src/main/scala/org/ camel-scala/src/main/scala/org/apache/ camel-scala/src/main/scala/org/apache/c...

Author: jstrachan
Date: Fri Apr  4 09:17:00 2008
New Revision: 644754

URL: http://svn.apache.org/viewvc?rev=644754&view=rev
Log:
applied patch https://issues.apache.org/activemq/browse/CAMEL-419 with huge thanks - this is awesome! :)

Added:
    activemq/camel/trunk/components/camel-scala/
    activemq/camel/trunk/components/camel-scala/pom.xml   (with props)
    activemq/camel/trunk/components/camel-scala/src/
    activemq/camel/trunk/components/camel-scala/src/main/
    activemq/camel/trunk/components/camel-scala/src/main/scala/
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichChoice.scala
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichExchange.scala
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichProcessor.scala
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichUriString.scala
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilder.scala
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilderSupport.scala
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/WhenPredicate.scala
    activemq/camel/trunk/components/camel-scala/src/test/
    activemq/camel/trunk/components/camel-scala/src/test/scala/
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichMockEndpoint.scala
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichTestUri.scala
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTestSupport.scala
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/BasicRouteBuilderTest.scala
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ContentBasedRouterTest.scala
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/FilterRouteBuilderTest.scala
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineAndMulticastTest.scala
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineRouteBuilderTest.scala
Modified:
    activemq/camel/trunk/components/pom.xml

Added: activemq/camel/trunk/components/camel-scala/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/pom.xml?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/pom.xml (added)
+++ activemq/camel/trunk/components/camel-scala/pom.xml Fri Apr  4 09:17:00 2008
@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-parent</artifactId>
+    <version>1.3-SNAPSHOT</version>
+  </parent>
+  <artifactId>camel-scala</artifactId>
+  <packaging>bundle</packaging>
+  <name>Camel :: Scala</name>
+  <description>Camel Scala DSL</description>
+
+  <properties>
+    <camel.osgi.export.pkg>org.apache.camel.scala.*</camel.osgi.export.pkg>
+  </properties>
+
+  <repositories>
+    <repository>
+      <id>scala-tools.org</id>
+      <name>Scala-tools Maven2 Repository</name>
+      <url>http://scala-tools.org/repo-releases</url>
+    </repository>
+  </repositories>
+  <pluginRepositories>
+    <pluginRepository>
+      <id>scala-tools.org</id>
+      <name>Scala-tools Maven2 Repository</name>
+      <url>http://scala-tools.org/repo-releases</url>
+    </pluginRepository>
+  </pluginRepositories>
+
+  <build>
+    <sourceDirectory>src/main/scala</sourceDirectory>
+    <testSourceDirectory>src/test/scala</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>org.scala-tools</groupId>
+        <artifactId>maven-scala-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>compile</goal>
+              <goal>testCompile</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <scalaVersion>2.7.0</scalaVersion>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-eclipse-plugin</artifactId>
+        <configuration>
+          <projectnatures>
+            <projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature>
+            <projectnature>org.eclipse.jdt.core.javanature</projectnature>
+          </projectnatures>
+          <buildcommands>
+            <buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand>
+          </buildcommands>
+          <classpathContainers>
+            <classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer>
+            <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
+          </classpathContainers>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.scala-lang</groupId>
+      <artifactId>scala-library</artifactId>
+      <version>2.7.0</version>
+    </dependency>
+    <!-- test dependencies -->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <version>1.4.3</version>
+    </dependency>
+  </dependencies>
+</project>

Propchange: activemq/camel/trunk/components/camel-scala/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichChoice.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichChoice.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichChoice.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichChoice.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,29 @@
+package org.apache.camel.scala.dsl;
+
+import org.apache.camel.model.ChoiceType
+
+class RichChoiceType(val choice: ChoiceType, val builder:RouteBuilder) {
+  
+  def then(block: => Unit) : ChoiceType = {
+    builder.build(choice, block)
+    choice
+  }
+  
+  def when(test: Exchange => Boolean)(block: => Unit) : ChoiceType = {
+    choice
+  }
+  
+  def apply(block: => Unit) : RichChoiceType = {
+    builder.build(choice, block)
+    this
+  }
+  
+  def to(uri: String) = {
+    choice.to(uri)
+  }
+
+  def otherwise(block: => Unit) = {
+    choice.otherwise
+    builder.build(choice, block)
+  }
+}

Added: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichExchange.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichExchange.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichExchange.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichExchange.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,19 @@
+package org.apache.camel.scala.dsl
+
+import org.apache.camel.Exchange
+
+class RichExchange(val exchange : Exchange) {
+  
+  def in : Any = exchange.getIn().getBody()
+
+  def in(header:String) : Any = exchange.getIn().getHeader(header)
+  
+  def in(target:Class[Any]) : Any = exchange.getIn().getBody(target)  
+  
+  def out : Any = exchange.getOut().getBody()
+  
+  def out(header:String) : Any = exchange.getOut().getHeader(header) 
+  
+  def out_=(message:Any) = exchange.getOut().setBody(message)
+  
+}

Added: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichProcessor.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichProcessor.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichProcessor.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichProcessor.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,9 @@
+package org.apache.camel.scala.dsl;
+
+import org.apache.camel.model.ProcessorType
+
+class RichProcessor(processor : ProcessorType[T] forSome {type T}) {
+   
+  def -->(uri: String) = processor.to(uri)
+  
+}

Added: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichUriString.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichUriString.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichUriString.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RichUriString.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,30 @@
+package org.apache.camel.scala.dsl;
+
+import org.apache.camel.model.FilterType
+import org.apache.camel.model.ProcessorType
+
+class RichUriString(uri:String, builder:RouteBuilder) {
+  
+  def to(targets: String*) : ProcessorType[T] forSome {type T} = {
+    targets.length match {
+      case 1 => builder.from(uri).to(targets(0))
+      case _ => {
+        val from = builder.from(uri)
+        val multicast = from.multicast
+        for (target <- targets) multicast.to(target)
+        from
+      }
+    }
+  }
+  def -->(targets: String*) : ProcessorType[T] forSome {type T} = to(targets:_*)
+  
+  def ==>(block: => Unit) = {
+    builder.build(builder.from(uri), block)
+  }
+  
+  def when(filter: Exchange => Boolean) : FilterType = 
+    builder.from(uri).filter(new WhenPredicate(filter))
+  
+  
+
+}

Added: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilder.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilder.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilder.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilder.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,68 @@
+package org.apache.camel.scala.dsl;
+
+import org.apache.camel.model.ProcessorType
+import org.apache.camel.model.ChoiceType
+
+import collection.mutable.Stack
+
+/**
+  Scala RouteBuilder implementation
+  */
+class RouteBuilder {
+  
+  val builder = new org.apache.camel.builder.RouteBuilder {
+    override def configure() =  {}
+  }
+  
+  val stack = new Stack[ProcessorType[T] forSome {type T}]; 
+  
+  implicit def stringToUri(uri:String) : RichUriString = new RichUriString(uri, this)
+  implicit def choiceWrapper(choice: ChoiceType) = new RichChoiceType(choice, this); 
+  implicit def processorWrapper(processor: ProcessorType[T] forSome {type T}) = new RichProcessor(processor)
+  implicit def exchangeWrapper(exchange: Exchange) = new RichExchange(exchange)
+  
+  def print() = {
+    println(builder)
+    this
+  }
+  
+  def build(context: ProcessorType[T] forSome {type T}, block: => Unit) {
+    stack.push(context)
+    block
+    stack.pop()
+  }
+  
+  def from(uri: String) = builder.from(uri)
+  
+  def -->(uris: String*) = to(uris:_*)  
+  def to(uris: String*) = {
+    uris.length match {
+      case 1 => stack.top.to(uris(0))
+      case _ => {
+        val multicast = stack.top.multicast
+        for (uri <- uris) multicast.to(uri)
+        stack.top
+      }        
+    }
+  }
+
+  var when = (filter: Exchange => Boolean) => { 
+    val choice = stack.top match {
+      case c: ChoiceType => c
+      case _  => stack.top.choice()
+    }
+    new RichChoiceType(choice.when(new WhenPredicate(filter)),  this) : RichChoiceType
+  }
+  
+  def choice(block: => Unit) = {
+    build(stack.top.choice(), block)
+  }
+  
+  def otherwise : ChoiceType = {
+    stack.top match {
+      case choice: ChoiceType => choice.otherwise
+      case _ => throw new Exception("otherwise is only supported in a choice block or after a when statement")
+    }
+  }
+
+}

Added: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilderSupport.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilderSupport.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilderSupport.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/RouteBuilderSupport.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,7 @@
+package org.apache.camel.scala.dsl;
+
+trait RouteBuilderSupport {
+
+  implicit def scalaToJavaBuilder(scalaBuilder: org.apache.camel.scala.dsl.RouteBuilder) = scalaBuilder.builder
+  
+}

Added: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/WhenPredicate.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/WhenPredicate.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/WhenPredicate.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/WhenPredicate.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,15 @@
+package org.apache.camel.scala.dsl;
+
+import org.apache.camel.Predicate
+
+class WhenPredicate(function: Exchange => Boolean) extends Predicate[Exchange]{
+  
+  override def matches(exchange: Exchange) = {
+    function(exchange)
+  }
+  
+  override def assertMatches(text: String, exchange: Exchange) = {
+    if (!matches(exchange)) throw new AssertionError(text + " : " + exchange + " doesn't match Scala function")
+  }
+
+}

Added: activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichMockEndpoint.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichMockEndpoint.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichMockEndpoint.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichMockEndpoint.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,14 @@
+package org.apache.camel.scala;
+
+import org.apache.camel.component.mock.MockEndpoint
+
+class RichMockEndpoint(endpoint: MockEndpoint) {
+  
+  def received(messages: AnyRef*) {
+    val list = new java.util.ArrayList[AnyRef](messages.length)
+    messages.foreach(list.add(_))
+    endpoint.expectedBodiesReceived(list)
+  }
+
+}
+ 

Added: activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichTestUri.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichTestUri.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichTestUri.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/RichTestUri.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,20 @@
+package org.apache.camel.scala;
+
+import org.apache.camel.component.mock.MockEndpoint
+
+class RichTestUri(uri: String, support: ScalaTestSupport) {
+  
+  def !(messages: Any*) = {
+    for (message <- messages) {
+      support.getTemplate().sendBody(uri, message)
+    }
+  }
+  
+  def expect(block: MockEndpoint => Unit) = {
+    val mock = support.mock(uri)
+    block(mock) 
+  }
+  
+  def assert() = support.mock(uri).assertIsSatisfied()
+
+}

Added: activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTestSupport.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTestSupport.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTestSupport.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTestSupport.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,25 @@
+package org.apache.camel.scala;
+
+import org.apache.camel.ContextTestSupport
+import org.apache.camel.component.mock.MockEndpoint
+import org.apache.camel.scala.dsl._
+
+abstract class ScalaTestSupport extends ContextTestSupport with RouteBuilderSupport {
+
+  implicit def stringToUri(uri:String) = new RichTestUri(uri, this)
+  implicit def mockWrapper(endpoint: MockEndpoint) = new RichMockEndpoint(endpoint)
+  implicit def exchangeWrapper(exchange: Exchange[T] forSome {type T}) = new RichExchange(exchange)
+  
+  def assert(uri: String) = getMockEndpoint(uri).assertIsSatisfied
+  
+  protected[scala] def getTemplate() = template
+  
+  protected[scala] def mock(uri: String) = getMockEndpoint(uri)
+  
+  def in(message: Any) : Exchange = {
+    val exchange = createExchangeWithBody(message)
+    println(exchange)
+    exchange
+  }
+  
+}

Added: activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/BasicRouteBuilderTest.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/BasicRouteBuilderTest.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/BasicRouteBuilderTest.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/BasicRouteBuilderTest.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,24 @@
+package org.apache.camel.scala.dsl;
+
+import org.apache.camel.scala.ScalaTestSupport
+
+class BasicRouteBuilderTest extends ScalaTestSupport {
+  
+  def testBasicRouteArrowSyntax() = assertBasicRoute("direct:a", "mock:a")
+  def testBasicRouteTextSyntax() = assertBasicRoute("direct:b", "mock:b")
+    
+  def assertBasicRoute(from: String, to: String) = {
+    to expect {
+      _.expectedMessageCount(1)
+    }
+    from ! "<hello/>" 
+    to assert
+  }
+    
+  override protected def createRouteBuilder() = 
+    new RouteBuilder {
+       "direct:a" --> "mock:a"
+       "direct:b" to "mock:b"
+    }.print
+
+}

Added: activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ContentBasedRouterTest.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ContentBasedRouterTest.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ContentBasedRouterTest.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ContentBasedRouterTest.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,29 @@
+package org.apache.camel.scala.dsl;
+
+class ContentBasedRouterTest extends ScalaTestSupport {
+  
+  def testSimpleContentBasedRouter = {
+    "mock:a" expect {_.expectedMessageCount(3)}
+    "mock:b" expect {_.received("<hello/>")}
+    "mock:c" expect {_.received("<hallo/>")}
+    "mock:d" expect {_.received("<hellos/>")}
+    "direct:a" ! ("<hello/>", "<hallo/>", "<hellos/>")
+    "mock:a" assert()
+    "mock:b" assert()
+    "mock:c" assert()
+    "mock:d" assert()
+  }
+  
+  override protected def createRouteBuilder() = 
+    new RouteBuilder {
+      "direct:a" ==> {
+        to ("mock:a")
+        choice {
+          when (_.in == "<hello/>") to ("mock:b")
+          when (_.in == "<hallo/>") to ("mock:c")
+          otherwise to ("mock:d")
+        }
+      }
+    }.print
+
+}

Added: activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/FilterRouteBuilderTest.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/FilterRouteBuilderTest.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/FilterRouteBuilderTest.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/FilterRouteBuilderTest.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,43 @@
+package org.apache.camel.scala.dsl;
+
+class FilterRouteBuilderTest extends ScalaTestSupport {
+
+  def testSimpleFilter() = {
+    "mock:a" expect {_.expectedMessageCount(1)}
+    "direct:a" ! ("<hello/>", "<hellos/>")
+    "mock:a" assert
+  }
+  
+  def testFilterWithAlternatives() = {
+    "mock:b" expect {_.expectedMessageCount(1)}
+    "mock:b" expect {_.expectedMessageCount(1)}
+    "mock:d" expect {_.expectedMessageCount(2)}
+    "mock:e" expect {_.expectedMessageCount(0)}
+    "mock:f" expect {_.expectedMessageCount(2)}
+    "direct:b" ! ("<hello/>", "<hellos/>")
+    "mock:b" assert()
+    "mock:c" assert()
+    "mock:d" assert()
+    "mock:e" assert()
+    "mock:f" assert()
+  }
+  
+  override protected def createRouteBuilder() = 
+    new RouteBuilder {
+       "direct:a" when(_.in == "<hello/>") to "mock:a"
+         
+       "direct:b" ==> {
+         when(_.in == "<hello/>") then {
+           to ("mock:b")
+           --> ("mock:c")
+         }
+         when(_.in == "<hallo/>") {
+           to ("mock:e")
+         } otherwise {
+           to ("mock:f")
+         }
+         to ("mock:d")  
+       }
+    }.print
+
+}

Added: activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineAndMulticastTest.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineAndMulticastTest.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineAndMulticastTest.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineAndMulticastTest.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,37 @@
+package org.apache.camel.scala.dsl;
+
+class PipelineAndMulticastTest extends ScalaTestSupport {
+  
+  def testArrowRoute = testRoute("direct:a", "mock:c", "mock:a", "mock:b")
+  def testToRoute = testRoute("direct:d", "mock:f", "mock:d", "mock:e")
+  def testArrowBlockRoute = testRoute("direct:g", "mock:i", "mock:g", "mock:h")
+  def testToBlockRoute = testRoute("direct:j", "mock:l", "mock:j", "mock:k")
+  
+  def testRoute(from: String, end: String, multis: String*) = {
+    multis.foreach ( _.expect { _.received("<hello/>")})
+    end expect { _.received("<olleh/>")}
+    
+    val exchange = in("<hello/>")
+    exchange.out = "<olleh/>"
+    getTemplate().send(from, exchange)
+    
+    multis.foreach( _.assert())
+    end assert()
+  }
+  
+  
+  override protected def createRouteBuilder() = 
+    new RouteBuilder {
+      "direct:a" --> ("mock:a", "mock:b") --> "mock:c"
+      "direct:d" to ("mock:d", "mock:e") to "mock:f"
+      "direct:g" ==> {
+        --> ("mock:g", "mock:h")
+        --> ("mock:i")
+      }
+      "direct:j" ==> {
+        to ("mock:j", "mock:k")
+        to ("mock:l")
+      }  
+    }.print
+
+}

Added: activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineRouteBuilderTest.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineRouteBuilderTest.scala?rev=644754&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineRouteBuilderTest.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineRouteBuilderTest.scala Fri Apr  4 09:17:00 2008
@@ -0,0 +1,36 @@
+package org.apache.camel.scala.dsl;
+
+class PipelineRouteBuilderTest extends ScalaTestSupport {
+  
+  def testPipelineWithArrows() = testPipeline("direct:a", "mock:a", "mock:b")
+  def testPipelineWithTos() = testPipeline("direct:c", "mock:c", "mock:d")
+  def testPipelineBlockWithArrows() = testPipeline("direct:e", "mock:e", "mock:f")
+  def testPipelineBlockWithTos() = testPipeline("direct:g", "mock:g", "mock:h")
+  
+  def testPipeline(from: String, to: String*) = {
+    to.foreach {
+      _.expect { _.expectedMessageCount(1) }
+    }
+    from ! "<hello/>"
+    to.foreach {
+      _.assert()
+    }
+  }
+  
+  override protected def createRouteBuilder() = 
+    new RouteBuilder {
+       "direct:a" --> "mock:a" --> "mock:b"
+       "direct:c" to "mock:c" to "mock:d"
+       
+       "direct:e" ==> {
+         --> ("mock:e")
+         --> ("mock:f")
+       }
+       
+       "direct:g" ==> {
+         to ("mock:g")
+         to ("mock:h")
+       }
+    }.print
+
+}

Modified: activemq/camel/trunk/components/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/pom.xml?rev=644754&r1=644753&r2=644754&view=diff
==============================================================================
--- activemq/camel/trunk/components/pom.xml (original)
+++ activemq/camel/trunk/components/pom.xml Fri Apr  4 09:17:00 2008
@@ -65,6 +65,7 @@
     <module>camel-rmi</module>
     <!--<module>camel-ruby</module>-->
     <module>camel-saxon</module>
+    <module>camel-scala</module>
     <module>camel-script</module>
     <module>camel-spring</module>
     <module>camel-sql</module>