You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ge...@apache.org on 2008/05/29 08:37:40 UTC

svn commit: r661222 - in /activemq/camel/trunk/components/camel-scala/src: main/scala/org/apache/camel/scala/builder/ main/scala/org/apache/camel/scala/dsl/ test/scala/org/apache/camel/scala/ test/scala/org/apache/camel/scala/dsl/

Author: gertv
Date: Wed May 28 23:37:40 2008
New Revision: 661222

URL: http://svn.apache.org/viewvc?rev=661222&view=rev
Log:
CAMEL-463: Adding resequencer support

Added:
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SResequencerType.scala
    activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ResequencerTest.scala
Modified:
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/builder/RouteBuilder.scala
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottlerType.scala
    activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/ScalaDsl.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/ContentBasedRouterTest.scala

Modified: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/builder/RouteBuilder.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/builder/RouteBuilder.scala?rev=661222&r1=661221&r2=661222&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/builder/RouteBuilder.scala (original)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/builder/RouteBuilder.scala Wed May 28 23:37:40 2008
@@ -63,5 +63,6 @@
   def throttle(frequency: Frequency) = stack.top.throttle(frequency)
   def loadbalance = stack.top.loadbalance
   def delay(delay: Period) = stack.top.delay(delay)
+  def resequence(expression: Exchange => Any) = stack.top.resequence(expression)
 
 }

Added: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SResequencerType.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SResequencerType.scala?rev=661222&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SResequencerType.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SResequencerType.scala Wed May 28 23:37:40 2008
@@ -0,0 +1,28 @@
+/**
+ * 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.model.ResequencerType
+import org.apache.camel.scala.builder.RouteBuilder
+
+class SResequencerType(val target: ResequencerType)(implicit val builder: RouteBuilder) extends ScalaDsl with Wrapper[ResequencerType] {
+  
+  val unwrap = target
+  
+  def batch = this
+
+}

Modified: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottlerType.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottlerType.scala?rev=661222&r1=661221&r2=661222&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottlerType.scala (original)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottlerType.scala Wed May 28 23:37:40 2008
@@ -22,7 +22,7 @@
 /**
  * Scala enrichment for Camel's ThrottlerType
  */
-class STrottlerType(val target: ThrottlerType)(implicit val builder: RouteBuilder) extends ScalaDsl with Wrapper[ThrottlerType] {
+class SThrottlerType(val target: ThrottlerType)(implicit val builder: RouteBuilder) extends ScalaDsl with Wrapper[ThrottlerType] {
  
   val unwrap = target
   

Modified: activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/ScalaDsl.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/ScalaDsl.scala?rev=661222&r1=661221&r2=661222&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/ScalaDsl.scala (original)
+++ activemq/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/ScalaDsl.scala Wed May 28 23:37:40 2008
@@ -26,6 +26,7 @@
   
   val target : ProcessorType[T] forSome {type T}
   implicit val builder: RouteBuilder
+  implicit def expressionBuilder(expression: Exchange => Any) = new ScalaExpression(expression)
   
   def -->(uris: String*) = to(uris:_*)
   def to(uris: String*) = {
@@ -48,10 +49,10 @@
   }
   
   def splitter(expression: Exchange => Any) = 
-    new SSplitterType(target.splitter(new ScalaExpression(expression)))
+    new SSplitterType(target.splitter(expression))
     
   def recipients(expression: Exchange => Any) = 
-    target.recipientList(new ScalaExpression(expression))
+    target.recipientList(expression)
 
   def apply(block: => Unit) = {
     builder.build(this, block)
@@ -70,10 +71,12 @@
     this
   }
   
-  def throttle(frequency: Frequency) = new STrottlerType(target.throttler(frequency.count).timePeriodMillis(frequency.period.milliseconds))
+  def throttle(frequency: Frequency) = new SThrottlerType(target.throttler(frequency.count).timePeriodMillis(frequency.period.milliseconds))
   
   def loadbalance = new SLoadBalanceType(target.loadBalance)
   
   def delay(period: Period) = new SDelayerType(target.delayer(period.milliseconds))
+  
+  def resequence(expression: Exchange => Any) = new SResequencerType(target.resequencer(expression))
 
 }

Modified: 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=661222&r1=661221&r2=661222&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTestSupport.scala (original)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTestSupport.scala Wed May 28 23:37:40 2008
@@ -20,18 +20,23 @@
 import org.apache.camel.component.mock.MockEndpoint
 import builder.{RouteBuilder,RouteBuilderSupport}
 import org.apache.camel.scala.dsl._
-import _root_.scala.List
+import _root_.scala.collection.mutable.ArrayBuffer
 
 abstract class ScalaTestSupport extends ContextTestSupport with RouteBuilderSupport with Preamble {
   
   implicit def stringToUri(uri:String) = new RichTestUri(uri, this)
   implicit def mockWrapper(endpoint: MockEndpoint) = new RichMockEndpoint(endpoint)
+  val endpoints = new ArrayBuffer[MockEndpoint]()
 
   def assert(uri: String) = getMockEndpoint(uri).assertIsSatisfied
 
   protected[scala] def getTemplate() = template
 
-  protected[scala] def mock(uri: String) = getMockEndpoint(uri)
+  protected[scala] def mock(uri: String) = {
+    val mock = getMockEndpoint(uri)
+    endpoints += mock
+    mock
+  }
 
   def in(message: Any) : Exchange = {
     val exchange = createExchangeWithBody(message)
@@ -42,5 +47,14 @@
   val builder : RouteBuilder
   
   override protected def createRouteBuilder = builder.print
-
+  
+  override def setUp = {
+    super.setUp
+    endpoints.foreach(_.reset())
+  }
+  
+  def test(block : => Unit) = {
+    block
+    endpoints.foreach(_.assertIsSatisfied)
+  }
 }

Modified: 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=661222&r1=661221&r2=661222&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ContentBasedRouterTest.scala (original)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ContentBasedRouterTest.scala Wed May 28 23:37:40 2008
@@ -43,7 +43,7 @@
         when (_.in == "<hallo/>") {
           to ("mock:dutch")
           to ("mock:german")
-        }
+        } 
         otherwise to ("mock:french")
       }
     }

Added: activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ResequencerTest.scala
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ResequencerTest.scala?rev=661222&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ResequencerTest.scala (added)
+++ activemq/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ResequencerTest.scala Wed May 28 23:37:40 2008
@@ -0,0 +1,81 @@
+/**
+ * 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.w3c.dom.Document
+import scala.builder.RouteBuilder
+
+/**
+ * Test case for message resequencer
+ */
+class ResequencerTest extends ScalaTestSupport {
+  
+  def testSimpleResequencer = {
+    "mock:a" expect { _.received("message 1", "message 2", "message 3", "message 4", "message 5") } 
+    test {
+      "direct:a" ! ("message 5", "message 1", "message 3", "message 2", "message 4")
+    }
+  }
+  
+  def testBlockResequencer = {
+    "mock:b" expect (_.received("message 5", "message 1", "message 3", "message 2", "message 4"))
+    "mock:c" expect (_.received("message 1", "message 2", "message 3", "message 4", "message 5"))
+    test {
+      "direct:b" ! ("message 5", "message 1", "message 3", "message 2", "message 4")
+    }
+  }
+  
+  def testBatchResequencer = {
+    "mock:d" expect (_.received("message 5", "message 1", "message 3", "message 2"))
+    "mock:e" expect (_.count = 0)
+    test {
+      "direct:d" ! ("message 5", "message 1", "message 3", "message 2")
+    }
+    "mock:d" expect (_.count = 5)
+    "mock:e" expect (_.received("message 1", "message 2", "message 3", "message 4", "message 5"))
+    test {
+      "direct:d" ! "message 4"
+    }
+  }
+    
+  val builder =
+    new RouteBuilder {
+       //START SNIPPET: simple
+       "direct:a" resequence (_.in) to "mock:a"
+       //END SNIPPET: simple
+       
+       //START SNIPPET: block
+       "direct:b" ==> {
+         to ("mock:b")
+         resequence (_.in) {
+           to ("mock:c")
+         }
+       }
+       //END SNIPPET: block
+       
+       //START SNIPPET: batch
+       "direct:d" ==> {
+         to ("mock:d")
+         resequence (_.in) batch {
+           to ("mock:e")
+         }
+       }
+       //END SNIPPET: batch
+    }
+
+  
+}