Author: davsclaus
Date: Sun May 1 09:41:21 2011
New Revision: 1098233
URL: http://svn.apache.org/viewvc?rev=1098233&view=rev
Log:
CAMEL-3439: Improved period DSL in camel-scala. Thanks to Pavel for patch.
Modified:
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Frequency.scala
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Period.scala
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Preamble.scala
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichInt.scala
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SDelayDefinition.scala
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottleDefinition.scala
camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ThrottlerTest.scala
Modified:
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Frequency.scala
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Frequency.scala?rev=1098233&r1=1098232&r2=1098233&view=diff
==============================================================================
---
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Frequency.scala
(original)
+++
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Frequency.scala
Sun May 1 09:41:21 2011
@@ -23,10 +23,7 @@ package org.apache.camel.scala
* @param period the time period for this frequency
*/
class Frequency(val count: Int, val period: Period) {
-
- def seconds = {
- period.seconds
- this
- }
-
+
+
+
}
Modified:
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Period.scala
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Period.scala?rev=1098233&r1=1098232&r2=1098233&view=diff
==============================================================================
---
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Period.scala
(original)
+++
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Period.scala
Sun May 1 09:41:21 2011
@@ -14,19 +14,78 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.scala;
+package org.apache.camel.scala
/**
* Represents a period (expressed in milliseconds) in time
*/
-class Period(var milliseconds : Long) {
+abstract class Period {
+ protected def ref: SimplePeriod
+
+ def milliseconds: Long
+
+ def ms = this
- /**
- * Convert the current value from seconds -> milliseconds
- */
def seconds = {
- milliseconds *= 1000
+ ref.milliseconds *= 1000
+ this
+ }
+
+ def seconds(other: Long): CompositePeriod = {
+ seconds
+ new CompositePeriod(this, new SimplePeriod(other))
+ }
+
+ def second = seconds
+
+ def second(other: Long) = seconds(other)
+
+ def minutes = {
+ ref.milliseconds *= 60
+ seconds
+ this
+ }
+
+ def minutes(other: Long): CompositePeriod = {
+ minutes
+ new CompositePeriod(this, new SimplePeriod(other))
+ }
+
+ def minute = minutes
+
+ def minute(other: Long) = minutes(other)
+
+ def hours = {
+ ref.milliseconds *= 60
+ minutes
this
}
-
+
+ def hours(other: Long): CompositePeriod = {
+ hours
+ new CompositePeriod(this, new SimplePeriod(other))
+ }
+
+ def hour = hours
+
+ def hour(other: Long) = hours(other)
+
+ override def equals(other: Any) = other.asInstanceOf[Period].milliseconds ==
milliseconds
+}
+
+/**
+ * Single period is just a holder for milliseconds
+ */
+class SimplePeriod(var milliseconds: Long) extends Period {
+ def ref = this
+}
+
+/**
+ * Composite period is a combination of "left" and "right" period; it allows
composing DSL like
+ * "2 hours 15 minutes"
+ */
+class CompositePeriod(val left: Period, val right: SimplePeriod) extends
Period {
+ def ref = right;
+
+ def milliseconds = left.milliseconds + right.milliseconds
}
Modified:
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Preamble.scala
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Preamble.scala?rev=1098233&r1=1098232&r2=1098233&view=diff
==============================================================================
---
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Preamble.scala
(original)
+++
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/Preamble.scala
Sun May 1 09:41:21 2011
@@ -24,5 +24,6 @@ trait Preamble {
implicit def exchangeWrapper(exchange: Exchange) = new RichExchange(exchange)
implicit def enrichInt(int: Int) = new RichInt(int)
+ implicit def int2Period(value: Int) = new SimplePeriod(value)
}
Modified:
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichInt.scala
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichInt.scala?rev=1098233&r1=1098232&r2=1098233&view=diff
==============================================================================
---
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichInt.scala
(original)
+++
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/RichInt.scala
Sun May 1 09:41:21 2011
@@ -21,10 +21,6 @@ package org.apache.camel.scala
*/
class RichInt(val int: Int) {
- def ms = new Period(int)
-
- def seconds = new Period(int).seconds
-
- def per(period: Int) = new Frequency(int, new Period(period))
+ def per(period: Period) = new Frequency(int, period)
}
Modified:
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SDelayDefinition.scala
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SDelayDefinition.scala?rev=1098233&r1=1098232&r2=1098233&view=diff
==============================================================================
---
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SDelayDefinition.scala
(original)
+++
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SDelayDefinition.scala
Sun May 1 09:41:21 2011
@@ -16,9 +16,7 @@
*/
package org.apache.camel.scala.dsl;
-import org.apache.camel.builder.ExpressionBuilder
import org.apache.camel.model.DelayDefinition
-import org.apache.camel.model.language.ExpressionDefinition
import org.apache.camel.scala.dsl.builder.RouteBuilder
/**
@@ -26,22 +24,4 @@ import org.apache.camel.scala.dsl.builde
*/
case class SDelayDefinition(override val target: DelayDefinition)(implicit val
builder: RouteBuilder) extends SAbstractDefinition[DelayDefinition] {
- def ms = this
- def milliseconds = ms
-
- def sec = {
- valueInMs *= 1000
- this
- }
- def seconds = sec
-
- def min = {
- valueInMs *= (60 * 1000)
- this
- }
- def minutes = min
-
- // we need this to match the valueInMs_= for now, can be removed once Scala
2.8.0 is out
- def valueInMs : Long = 0
- def valueInMs_=(period: Long) = target.delay(period)
}
Modified:
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottleDefinition.scala
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottleDefinition.scala?rev=1098233&r1=1098232&r2=1098233&view=diff
==============================================================================
---
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottleDefinition.scala
(original)
+++
camel/trunk/components/camel-scala/src/main/scala/org/apache/camel/scala/dsl/SThrottleDefinition.scala
Sun May 1 09:41:21 2011
@@ -24,29 +24,4 @@ import org.apache.camel.scala.dsl.builde
*/
case class SThrottleDefinition(override val target:
ThrottleDefinition)(implicit val builder: RouteBuilder) extends
SAbstractDefinition[ThrottleDefinition] {
- /**
- * Time period in milliseconds
- */
- def per(period: Long) = {
- target.setTimePeriodMillis(period)
- this
- }
-
- def ms = this
- def milliseconds = ms
-
- def sec = {
- valueInMs = valueInMs.longValue * 1000
- this
- }
- def seconds = sec
-
- def min = {
- valueInMs = valueInMs.longValue * (60 * 1000)
- this
- }
- def minutes = min
-
- def valueInMs = target.getTimePeriodMillis()
- def valueInMs_=(period: Long) = target.setTimePeriodMillis(period)
}
Modified:
camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ThrottlerTest.scala
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ThrottlerTest.scala?rev=1098233&r1=1098232&r2=1098233&view=diff
==============================================================================
---
camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ThrottlerTest.scala
(original)
+++
camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/ThrottlerTest.scala
Sun May 1 09:41:21 2011
@@ -17,7 +17,6 @@
package org.apache.camel
package scala.dsl
-import org.w3c.dom.Document
import builder.RouteBuilder
/**
@@ -25,17 +24,17 @@ import builder.RouteBuilder
*/
class ThrottlerTest extends ScalaTestSupport {
- def testSimpleTrottler = {
+ def testSimpleThrottler = {
"mock:a" expect { _.count = 3 }
- "mock:a" expect { _.setResultWaitTime(1000) }
+ "mock:a" expect { _.setResultWaitTime(1000) }
for (id <- 1 to 6) "seda:a" ! id
"mock:a" assert()
}
- def testBlockTrottler = {
+ def testBlockThrottler = {
"mock:b" expect { _.count = 6 }
"mock:c" expect { _.count = 3 }
- "mock:c" expect { _.setResultWaitTime(1000) }
+ "mock:c" expect { _.setResultWaitTime(1000) }
for (id <- 1 to 6) "seda:b" ! id
"mock:b" assert()
}
@@ -43,13 +42,13 @@ class ThrottlerTest extends ScalaTestSup
val builder =
new RouteBuilder {
//START SNIPPET: simple
- "seda:a" throttle (3 per 2 seconds) to ("mock:a")
+ "seda:a" throttle (3 per (2 seconds)) to ("mock:a")
//END SNIPPET: simple
//START SNIPPET: block
"seda:b" ==> {
to ("mock:b")
- throttle (3 per 2 seconds) {
+ throttle (3 per (2 seconds)) {
to ("mock:c")
}
}