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 2009/03/27 15:41:34 UTC

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

Author: gertv
Date: Fri Mar 27 14:41:34 2009
New Revision: 759156

URL: http://svn.apache.org/viewvc?rev=759156&view=rev
Log:
CAMEL-463: Add support for intercept() to the Scala DSL

Added:
    camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SInterceptDefinition.scala
    camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/InterceptorTest.scala
Modified:
    camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala
    camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala
    camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala

Modified: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala?rev=759156&r1=759155&r2=759156&view=diff
==============================================================================
--- camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala (original)
+++ camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/DSL.scala Fri Mar 27 14:41:34 2009
@@ -32,6 +32,7 @@
   def idempotentconsumer(expression: Exchange => Any): SIdempotentConsumerDefinition
   def inOnly(): SProcessorDefinition
   def inOut(): SProcessorDefinition
+  def intercept(expression: Exchange => Boolean) : SInterceptDefinition
   def loadbalance : SLoadBalanceDefinition
   def loop(expression: Exchange => Any) : SLoopDefinition
   def marshal(format : DataFormatDefinition) : DSL

Modified: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala?rev=759156&r1=759155&r2=759156&view=diff
==============================================================================
--- camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala (original)
+++ camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SAbstractDefinition.scala Fri Mar 27 14:41:34 2009
@@ -81,6 +81,12 @@
   
   def inOnly = new SProcessorDefinition(target.inOnly.asInstanceOf[RawProcessorDefinition])
   def inOut = new SProcessorDefinition(target.inOut.asInstanceOf[RawProcessorDefinition])
+  
+  def intercept(expression: Exchange => Boolean) = {
+      val intercept = target.intercept
+      intercept.when(new ScalaPredicate(expression))
+      new SInterceptDefinition(intercept)
+  }
  
   def loop(expression: Exchange => Any) = new SLoopDefinition(target.loop(expression))
   

Added: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SInterceptDefinition.scala
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SInterceptDefinition.scala?rev=759156&view=auto
==============================================================================
--- camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SInterceptDefinition.scala (added)
+++ camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SInterceptDefinition.scala Fri Mar 27 14:41:34 2009
@@ -0,0 +1,37 @@
+/**
+ * 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.InterceptDefinition
+import org.apache.camel.scala.dsl.builder.RouteBuilder
+
+/**
+ * Scala enrichment for Camel's IdempotentConsumerDefinition
+ */
+class SInterceptDefinition(val target: InterceptDefinition)(implicit val builder: RouteBuilder) extends SAbstractDefinition with Wrapper[InterceptDefinition] {
+  
+  val unwrap = target
+  
+  override def apply(block: => Unit) : SInterceptDefinition = {
+    builder.build(this, block)
+    this
+  }
+  
+  def stop =  {
+    target.setStopIntercept(true)
+  }   
+}

Modified: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala?rev=759156&r1=759155&r2=759156&view=diff
==============================================================================
--- camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala (original)
+++ camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala Fri Mar 27 14:41:34 2009
@@ -70,6 +70,11 @@
   def idempotentconsumer(expression: Exchange => Any) = stack.top.idempotentconsumer(expression)
   def inOnly = stack.top.inOnly
   def inOut = stack.top.inOut
+  def intercept(expression: Exchange => Boolean) = {
+  	val intercept = builder.intercept
+  	intercept.when(new ScalaPredicate(expression))
+  	new SInterceptDefinition(intercept)(this)
+  }
   def loop(expression: Exchange => Any) = stack.top.loop(expression)
   def split(expression: Exchange => Any) = stack.top.split(expression)
   def otherwise = stack.top.otherwise

Added: camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/InterceptorTest.scala
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/InterceptorTest.scala?rev=759156&view=auto
==============================================================================
--- camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/InterceptorTest.scala (added)
+++ camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/InterceptorTest.scala Fri Mar 27 14:41:34 2009
@@ -0,0 +1,44 @@
+/**
+ * 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 scala.dsl.builder.RouteBuilder
+
+/**
+ * Test for an interceptor
+ */
+class InterceptorTest extends ScalaTestSupport {
+
+  def testSimple() = {
+     "mock:a" expect { _.count = 1} 
+     "mock:intercepted" expect { _.count = 1}
+     test {
+        "seda:a" ! ("NightHawk", "SongBird")
+     }  
+  }
+
+  val builder = new RouteBuilder {
+     //START SNIPPET: simple
+     intercept(_.in(classOf[String]) == "Nighthawk") {
+		to ("mock:intercepted")     	
+     } stop
+     
+     "seda:a" --> "mock:a"
+     //END SNIPPET: simple
+   }
+
+}