Author: gertv Date: Mon Mar 2 13:24:55 2009 New Revision: 749299 URL: http://svn.apache.org/viewvc?rev=749299&view=rev Log: CAMEL-463: Adding support for the other languages in a single trait
Added: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/Languages.scala Removed: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/El.scala camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/JXPath.scala camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/XPath.scala Modified: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/builder/RouteBuilder.scala camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/RecipientListRouteTest.scala camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetBodyTest.scala camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetHeaderTest.scala camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SplitterRouteBuilderTest.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=749299&r1=749298&r2=749299&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 Mar 2 13:24:55 2009 @@ -25,10 +25,12 @@ import org.apache.camel.scala.dsl._ +import org.apache.camel.scala.dsl.languages.Languages + /** * Scala RouteBuilder implementation */ -class RouteBuilder extends Preamble with DSL with Routes { +class RouteBuilder extends Preamble with DSL with Routes with Languages { val builder = new org.apache.camel.builder.RouteBuilder { override def configure() = {} Added: 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=749299&view=auto ============================================================================== --- camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/Languages.scala (added) +++ camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/languages/Languages.scala Mon Mar 2 13:24:55 2009 @@ -0,0 +1,68 @@ +/** + * 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.languages + +/** + * Trait to support the different expression languages available in Camel + */ +trait Languages { + + /** + * Implicitly make a method for every language available on the Camel Exchange + */ + implicit def addLanguageMethodsToExchange(exchange: Exchange) = new { + 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) + } + + // 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 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 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)("simply") + 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") + +} + +/** + * Companion object with the static template method for language support + */ +object Languages { + + def evaluate(expression: String)(exchange: Exchange)(lang: String) : Any = { + val language = exchange.getContext().resolveLanguage(lang) + language.createExpression(expression).evaluate(exchange) + } +} Modified: camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/RecipientListRouteTest.scala URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/RecipientListRouteTest.scala?rev=749299&r1=749298&r2=749299&view=diff ============================================================================== --- camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/RecipientListRouteTest.scala (original) +++ camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/RecipientListRouteTest.scala Mon Mar 2 13:24:55 2009 @@ -41,7 +41,7 @@ "mock:d" assert() } - val builder = new RouteBuilder with languages.JXPath { + val builder = new RouteBuilder { //START SNIPPET: simple "direct:a" recipients(_.in(classOf[String]).substring(21)) //END SNIPPET: simple Modified: camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetBodyTest.scala URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetBodyTest.scala?rev=749299&r1=749298&r2=749299&view=diff ============================================================================== --- camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetBodyTest.scala (original) +++ camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetBodyTest.scala Mon Mar 2 13:24:55 2009 @@ -45,7 +45,7 @@ } } - val builder = new RouteBuilder with languages.El { + val builder = new RouteBuilder { //START SNIPPET: simple "direct:a" setbody "pong" to "mock:a" "direct:c" setbody el("${in.body.name}") to "mock:c" Modified: camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetHeaderTest.scala URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetHeaderTest.scala?rev=749299&r1=749298&r2=749299&view=diff ============================================================================== --- camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetHeaderTest.scala (original) +++ camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SetHeaderTest.scala Mon Mar 2 13:24:55 2009 @@ -45,7 +45,7 @@ } } - val builder = new RouteBuilder with languages.El { + val builder = new RouteBuilder { //START SNIPPET: simple "direct:a" setheader("response", "pong?") to "mock:a" "direct:c" setheader("genus",el("${in.body.genus}")) to "mock:c" Modified: camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SplitterRouteBuilderTest.scala URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SplitterRouteBuilderTest.scala?rev=749299&r1=749298&r2=749299&view=diff ============================================================================== --- camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SplitterRouteBuilderTest.scala (original) +++ camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SplitterRouteBuilderTest.scala Mon Mar 2 13:24:55 2009 @@ -17,7 +17,6 @@ package org.apache.camel.scala.dsl; import org.w3c.dom.Document -import languages.XPath import scala.dsl.builder.RouteBuilder /** @@ -41,7 +40,7 @@ val builder = //START SNIPPET: xpath - new RouteBuilder with XPath { + new RouteBuilder { //END SNIPPET: xpath //START SNIPPET: simple "direct:a" as(classOf[Document]) splitter(xpath("/persons/person")) to "mock:a"