Author: davsclaus Date: Mon Apr 25 07:33:27 2011 New Revision: 1096423 URL: http://svn.apache.org/viewvc?rev=1096423&view=rev Log: CAMEL-463: Added additional languages to camel-scala DSL.
Added: camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/HeaderContentBasedRouterTest.scala Modified: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/Languages.scala 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=1096423&r1=1096422&r2=1096423&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 Mon Apr 25 07:33:27 2011 @@ -18,7 +18,6 @@ package org.apache.camel package scala package dsl.builder -import org.apache.camel.model.{ChoiceDefinition, ProcessorDefinition} import org.apache.camel.model.DataFormatDefinition import org.apache.camel.{Exchange, RoutesBuilder} import org.apache.camel.builder.{DeadLetterChannelBuilder, ErrorHandlerBuilder} @@ -40,7 +39,7 @@ import java.util.Comparator class RouteBuilder extends Preamble with DSL with RoutesBuilder with Languages with Functions { val builder = new org.apache.camel.builder.RouteBuilder { - override def configure() = { + override def configure() = { onJavaBuilder(this) } } Modified: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/Languages.scala URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/Languages.scala?rev=1096423&r1=1096422&r2=1096423&view=diff ============================================================================== --- camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/Languages.scala (original) +++ camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/Languages.scala Mon Apr 25 07:33:27 2011 @@ -17,8 +17,6 @@ package org.apache.camel package scala.dsl.languages -import org.apache.camel.builder.Builder - /** * Trait to support the different expression languages available in Camel */ @@ -28,32 +26,38 @@ trait Languages { * Implicitly make a method for every language available on the Camel Exchange */ implicit def addLanguageMethodsToExchange(exchange: Exchange) = new { - def bean(ref: String) = Builder.bean(ref).evaluate(exchange, classOf[Any]) - def el(expression: String) = Languages.this.el(expression)(exchange) - def groovy(expression: String) = Languages.this.groovy(expression)(exchange) - def jxpath(expression: String) = Languages.this.jxpath(expression)(exchange) - def mvel(expression: String) = Languages.this.mvel(expression)(exchange) - def ognl(expression: String) = Languages.this.ognl(expression)(exchange) - def php(expression: String) = Languages.this.php(expression)(exchange) - def python(expression: String) = Languages.this.python(expression)(exchange) - def ruby(expression: String) = Languages.this.ruby(expression)(exchange) - def simple(expression: String) = Languages.this.simple(expression)(exchange) - def sql(expression: String) = Languages.this.sql(expression)(exchange) - def xpath(expression: String) = Languages.this.xpath(expression)(exchange) - def xquery(expression: String) = Languages.this.xquery(expression)(exchange) + def el(expression: String) = Languages.this.el(expression)(exchange) + def groovy(expression: String) = Languages.this.groovy(expression)(exchange) + def header(headerName: String) = Languages.this.header(headerName)(exchange) + def javascript(expression: String) = Languages.this.javascript(expression)(exchange) + def jxpath(expression: String) = Languages.this.jxpath(expression)(exchange) + def mvel(expression: String) = Languages.this.mvel(expression)(exchange) + def ognl(expression: String) = Languages.this.ognl(expression)(exchange) + def php(expression: String) = Languages.this.php(expression)(exchange) + def property(propertyName: String) = Languages.this.property(propertyName)(exchange) + def python(expression: String) = Languages.this.python(expression)(exchange) + def ruby(expression: String) = Languages.this.ruby(expression)(exchange) + def simple(expression: String) = Languages.this.simple(expression)(exchange) + def spel(expression: String) = Languages.this.spel(expression)(exchange) + def sql(expression: String) = Languages.this.sql(expression)(exchange) + def xpath(expression: String) = Languages.this.xpath(expression)(exchange) + def xquery(expression: String) = Languages.this.xquery(expression)(exchange) } // a set of methods to allow direct use of the language as an expression def el(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("el") def groovy(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("groovy") + def header(headerName: String)(exchange: Exchange) = Languages.evaluate(headerName)(exchange)("header") def javascript(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("javascript") def jxpath(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("jxpath") def mvel(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("mvel") def ognl(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("ognl") def php(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("php") + def property(propertyName: String)(exchange: Exchange) = Languages.evaluate(propertyName)(exchange)("property") def python(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("python") def ruby(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("ruby") def simple(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("simple") + def spel(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("spel") def sql(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("sql") def xpath(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("xpath") def xquery(expression: String)(exchange: Exchange) = Languages.evaluate(expression)(exchange)("xquery") @@ -65,7 +69,7 @@ trait Languages { */ object Languages { - def evaluate(expression: String)(exchange: Exchange)(lang: String) : Any = { + def evaluate(expression: String)(exchange: Exchange)(lang: String) : Any = { val language = exchange.getContext().resolveLanguage(lang) language.createExpression(expression).evaluate(exchange, classOf[Object]) } Added: camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/HeaderContentBasedRouterTest.scala URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/HeaderContentBasedRouterTest.scala?rev=1096423&view=auto ============================================================================== --- camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/HeaderContentBasedRouterTest.scala (added) +++ camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/HeaderContentBasedRouterTest.scala Mon Apr 25 07:33:27 2011 @@ -0,0 +1,52 @@ +/** + * 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 builder.RouteBuilder + +/** + * Content Based Router test with XPath expressions + */ +class HeaderContentBasedRouterTest extends ScalaTestSupport { + + def testXPathContentBasedRouter = { + "mock:foo" expect {_.expectedBodiesReceived("Hello Foo")} + "mock:bar" expect {_.expectedBodiesReceived("Hello Bar")} + "mock:other" expect {_.expectedBodiesReceived("Hello World")} + + test { + template.sendBodyAndHeader("direct:a", "Hello Foo", "foo", 123) + template.sendBodyAndHeader("direct:a", "Hello Bar", "bar", 456) + template.sendBody("direct:a", "Hello World") + } + + assertMockEndpointsSatisfied() + } + + val builder = new RouteBuilder { + //START SNIPPET: cbr + "direct:a" ==> { + choice { + when (header("foo")) to ("mock:foo") + when (header("bar")) to ("mock:bar") + otherwise to ("mock:other") + } + } + //END SNIPPET: cbr + } + +} \ No newline at end of file