You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/08/13 17:41:57 UTC
svn commit: r985251 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/util/ObjectHelper.java
test/java/org/apache/camel/language/SimpleOperatorTest.java
Author: davsclaus
Date: Fri Aug 13 15:41:56 2010
New Revision: 985251
URL: http://svn.apache.org/viewvc?rev=985251&view=rev
Log:
CAMEL-3052: Simple language better at comparing numeric types.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=985251&r1=985250&r2=985251&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Fri Aug 13 15:41:56 2010
@@ -113,6 +113,13 @@ public final class ObjectHelper {
@SuppressWarnings("unchecked")
public static int typeCoerceCompare(TypeConverter converter, Object leftValue, Object rightValue) {
+ // if both values is numeric then compare using numeric
+ Long leftNum = converter.convertTo(Long.class, leftValue);
+ Long rightNum = converter.convertTo(Long.class, rightValue);
+ if (leftNum != null && rightNum != null) {
+ return leftNum.compareTo(rightNum);
+ }
+
// prefer to NOT coerce to String so use the type which is not String
// for example if we are comparing String vs Integer then prefer to coerce to Integer
// as all types can be converted to String which does not work well for comparison
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java?rev=985251&r1=985250&r2=985251&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java Fri Aug 13 15:41:56 2010
@@ -89,7 +89,7 @@ public class SimpleOperatorTest extends
assertExpression("${in.header.foo} == def", false);
assertExpression("${in.header.foo} == '1'", false);
- // integer to string comparioson
+ // integer to string comparison
assertExpression("${in.header.bar} == '123'", true);
assertExpression("${in.header.bar} == 123", true);
assertExpression("${in.header.bar} == '444'", false);
@@ -105,7 +105,7 @@ public class SimpleOperatorTest extends
assertExpression("${in.header.foo} != def", true);
assertExpression("${in.header.foo} != '1'", true);
- // integer to string comparioson
+ // integer to string comparison
assertExpression("${in.header.bar} != '123'", false);
assertExpression("${in.header.bar} != 123", false);
assertExpression("${in.header.bar} != '444'", true);
@@ -113,14 +113,14 @@ public class SimpleOperatorTest extends
assertExpression("${in.header.bar} != '1'", true);
}
- public void testGreatherThanOperator() throws Exception {
+ public void testGreaterThanOperator() throws Exception {
// string to string comparison
assertExpression("${in.header.foo} > 'aaa'", true);
assertExpression("${in.header.foo} > aaa", true);
assertExpression("${in.header.foo} > 'def'", false);
assertExpression("${in.header.foo} > def", false);
- // integer to string comparioson
+ // integer to string comparison
assertExpression("${in.header.bar} > '100'", true);
assertExpression("${in.header.bar} > 100", true);
assertExpression("${in.header.bar} > '123'", false);
@@ -128,7 +128,43 @@ public class SimpleOperatorTest extends
assertExpression("${in.header.bar} > '200'", false);
}
- public void testGreatherThanOrEqualOperator() throws Exception {
+ public void testGreaterThanStringToInt() throws Exception {
+ // set a String value
+ exchange.getIn().setHeader("num", "70");
+
+ // string to int comparison
+ assertExpression("${in.header.num} > 100", false);
+ assertExpression("${in.header.num} > 100", false);
+ assertExpression("${in.header.num} > 80", false);
+ assertExpression("${in.header.num} > 800", false);
+ assertExpression("${in.header.num} > 1", true);
+ assertExpression("${in.header.num} > 8", true);
+ assertExpression("${in.header.num} > 48", true);
+ assertExpression("${in.header.num} > 69", true);
+ assertExpression("${in.header.num} > 71", false);
+ assertExpression("${in.header.num} > 88", false);
+ assertExpression("${in.header.num} > 777", false);
+ }
+
+ public void testLessThanStringToInt() throws Exception {
+ // set a String value
+ exchange.getIn().setHeader("num", "70");
+
+ // string to int comparison
+ assertExpression("${in.header.num} < 100", true);
+ assertExpression("${in.header.num} < 100", true);
+ assertExpression("${in.header.num} < 80", true);
+ assertExpression("${in.header.num} < 800", true);
+ assertExpression("${in.header.num} < 1", false);
+ assertExpression("${in.header.num} < 8", false);
+ assertExpression("${in.header.num} < 48", false);
+ assertExpression("${in.header.num} < 69", false);
+ assertExpression("${in.header.num} < 71", true);
+ assertExpression("${in.header.num} < 88", true);
+ assertExpression("${in.header.num} < 777", true);
+ }
+
+ public void testGreaterThanOrEqualOperator() throws Exception {
// string to string comparison
assertExpression("${in.header.foo} >= 'aaa'", true);
assertExpression("${in.header.foo} >= aaa", true);
@@ -136,7 +172,7 @@ public class SimpleOperatorTest extends
assertExpression("${in.header.foo} >= abc", true);
assertExpression("${in.header.foo} >= 'def'", false);
- // integer to string comparioson
+ // integer to string comparison
assertExpression("${in.header.bar} >= '100'", true);
assertExpression("${in.header.bar} >= 100", true);
assertExpression("${in.header.bar} >= '123'", true);
@@ -151,7 +187,7 @@ public class SimpleOperatorTest extends
assertExpression("${in.header.foo} < 'def'", true);
assertExpression("${in.header.foo} < def", true);
- // integer to string comparioson
+ // integer to string comparison
assertExpression("${in.header.bar} < '100'", false);
assertExpression("${in.header.bar} < 100", false);
assertExpression("${in.header.bar} < '123'", false);
@@ -167,7 +203,7 @@ public class SimpleOperatorTest extends
assertExpression("${in.header.foo} <= abc", true);
assertExpression("${in.header.foo} <= 'def'", true);
- // integer to string comparioson
+ // integer to string comparison
assertExpression("${in.header.bar} <= '100'", false);
assertExpression("${in.header.bar} <= 100", false);
assertExpression("${in.header.bar} <= '123'", true);