Author: gertv Date: Mon Oct 11 11:14:57 2010 New Revision: 1021306 URL: http://svn.apache.org/viewvc?rev=1021306&view=rev Log: CAMEL-463: Adding support for sort() DSL method (incl. sortBody())
Added: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/Functions.scala camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SSortTest.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=1021306&r1=1021305&r2=1021306&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 Mon Oct 11 11:14:57 2010 @@ -19,7 +19,8 @@ package scala package dsl import org.apache.camel.model.DataFormatDefinition -import reflect.Manifest; +import reflect.Manifest +import java.util.Comparator; import org.apache.camel.processor.aggregate.AggregationStrategy import org.apache.camel.spi.Policy @@ -75,6 +76,7 @@ trait DSL { def setfaultbody(expression: Exchange => Any) : DSL def setheader(header: String, expression: Exchange => Any) : DSL + def sort[T](expression: Exchange => Any, comparator: Comparator[T] = null) : DSL def split(expression: Exchange => Any) : SSplitDefinition def stop : DSL Added: camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/Functions.scala URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/Functions.scala?rev=1021306&view=auto ============================================================================== --- camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/Functions.scala (added) +++ camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/Functions.scala Mon Oct 11 11:14:57 2010 @@ -0,0 +1,33 @@ +/** + * 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.Exchange + +/** + * A set of convenience functions for use in RouteBuilders and other Scala code interacting with Camel + */ +trait Functions { + + /** + * Convenience function for extracting the 'in' message body from a Camel org.apache.camel.Exchange + * + * Can also be used as a partially applied function where the DSL requires Exchange => Any + */ + def body(exchange: Exchange) = exchange.getIn.getBody + +} \ No newline at end of file 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=1021306&r1=1021305&r2=1021306&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 Mon Oct 11 11:14:57 2010 @@ -31,6 +31,7 @@ import org.apache.camel.processor.aggreg import org.apache.camel.scala.dsl.builder.RouteBuilder import reflect.Manifest import java.lang.String +import java.util.Comparator abstract class SAbstractDefinition[P <: ProcessorDefinition[_]] extends DSL with Wrapper[P] with Block { @@ -135,7 +136,9 @@ abstract class SAbstractDefinition[P <: def routingSlip(header: String) = wrap(target.routingSlip(header)) def routingSlip(header: String, separator: String) = wrap(target.routingSlip(header, separator)) def routingSlip(expression: Exchange => Any) = wrap(target.routingSlip(expression)) - + + def sort[T](expression: (Exchange) => Any, comparator: Comparator[T] = null) = wrap(target.sort(expression, comparator)) + def dynamicRouter(expression: Exchange => Any) = wrap(target.dynamicRouter(expression)) def setbody(expression: Exchange => Any) = wrap(target.setBody(expression)) 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=1021306&r1=1021305&r2=1021306&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 Oct 11 11:14:57 2010 @@ -32,11 +32,12 @@ import org.apache.camel.scala.dsl._ import org.apache.camel.scala.dsl.languages.Languages import java.lang.String +import java.util.Comparator /** * Scala RouteBuilder implementation */ -class RouteBuilder extends Preamble with DSL with RoutesBuilder with Languages { +class RouteBuilder extends Preamble with DSL with RoutesBuilder with Languages with Functions { val builder = new org.apache.camel.builder.RouteBuilder { override def configure() = { @@ -130,6 +131,7 @@ class RouteBuilder extends Preamble with def setbody(expression : Exchange => Any) = stack.top.setbody(expression) def setfaultbody(expression: Exchange => Any) = stack.top.setfaultbody(expression) def setheader(name: String, expression: Exchange => Any) = stack.top.setheader(name, expression) + def sort[T](expression: (Exchange) => Any, comparator: Comparator[T] = null) = stack.top.sort(expression, comparator) def stop = stack.top.stop def threads = stack.top.threads def throwException(exception: Exception) = stack.top.throwException(exception) Added: camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SSortTest.scala URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SSortTest.scala?rev=1021306&view=auto ============================================================================== --- camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SSortTest.scala (added) +++ camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/SSortTest.scala Mon Oct 11 11:14:57 2010 @@ -0,0 +1,47 @@ +/** + * 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, RouteBuilderSupport} +import org.apache.camel.processor.SortExpressionTest.MyReverseComparator +import org.apache.camel.processor.{SortBodyTest, SortExpressionTest} + +/** + * Scala DSL equivalent for the SortExpressionTest, using simple one-line Scala DSL syntax + */ +class SSortExpressionTest extends SortExpressionTest with RouteBuilderSupport { + + override def createRouteBuilder = new RouteBuilder { + "direct:start" sort(_.in[String].split(",")) to("mock:result") + "direct:reverse" sort(_.in[String].split(","), new MyReverseComparator()) to("mock:result") + } + +} + +/** + * Scala DSL equivalent for the SortBodyTest, using the Scala DSL block syntax + */ +class SSortBodyTest extends SortBodyTest with RouteBuilderSupport { + + override def createRouteBuilder = new RouteBuilder { + "direct:start" ==> { + sort(body) + to("mock:result") + } + } + +} \ No newline at end of file