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 2012/02/16 07:59:53 UTC
svn commit: r1244859 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/language/simple/SimpleTokenizer.java
main/java/org/apache/camel/util/ObjectHelper.java
test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
Author: davsclaus
Date: Thu Feb 16 06:59:52 2012
New Revision: 1244859
URL: http://svn.apache.org/viewvc?rev=1244859&view=rev
Log:
CAMEL-5004: Improved simple langauge working with floating point numbers.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java?rev=1244859&r1=1244858&r2=1244859&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java Thu Feb 16 06:59:52 2012
@@ -16,7 +16,9 @@
*/
package org.apache.camel.language.simple;
+import java.awt.font.NumericShaper;
import java.util.List;
+import java.util.Locale;
import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.camel.language.simple.types.SimpleToken;
@@ -146,6 +148,17 @@ public final class SimpleTokenizer {
char ch = expression.charAt(index);
sb.append(ch);
index++;
+ continue;
+ }
+ // is it a dot or comma as part of a floating point number
+ boolean decimalSeparator = '.' == expression.charAt(index) || ',' == expression.charAt(index);
+ if (decimalSeparator && sb.length() > 0) {
+ char ch = expression.charAt(index);
+ sb.append(ch);
+ index++;
+ // assume its still a digit
+ digit = true;
+ continue;
}
}
if (sb.length() > 0) {
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=1244859&r1=1244858&r2=1244859&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 Thu Feb 16 06:59:52 2012
@@ -131,6 +131,13 @@ public final class ObjectHelper {
return leftNum.compareTo(rightNum);
}
+ // also try with floating point numbers
+ Double leftDouble = converter.convertTo(Double.class, leftValue);
+ Double rightDouble = converter.convertTo(Double.class, rightValue);
+ if (leftDouble != null && rightDouble != null) {
+ return leftDouble.compareTo(rightDouble);
+ }
+
// 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/simple/SimpleOperatorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java?rev=1244859&r1=1244858&r2=1244859&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java Thu Feb 16 06:59:52 2012
@@ -148,6 +148,25 @@ public class SimpleOperatorTest extends
assertPredicate("${in.header.bar} != '1'", true);
}
+ public void testFloatingNumber() throws Exception {
+ // set a String value
+ exchange.getIn().setBody("0.02");
+
+ assertPredicate("${body} > 0", true);
+ assertPredicate("${body} < 0", false);
+
+ assertPredicate("${body} > 0.00", true);
+ assertPredicate("${body} < 0.00", false);
+
+ assertPredicate("${body} > 0.01", true);
+ assertPredicate("${body} < 0.01", false);
+
+ assertPredicate("${body} > 0.02", false);
+ assertPredicate("${body} < 0.02", false);
+
+ assertPredicate("${body} == 0.02", true);
+ }
+
public void testGreaterThanOperator() throws Exception {
// string to string comparison
assertPredicate("${in.header.foo} > 'aaa'", true);
@@ -380,7 +399,7 @@ public class SimpleOperatorTest extends
assertPredicate("${in.header.foo} range 100.200", false);
fail("Should have thrown an exception");
} catch (SimpleIllegalSyntaxException e) {
- assertEquals(26, e.getIndex());
+ assertEquals(30, e.getIndex());
}
assertPredicate("${in.header.bar} range '100..200' && ${in.header.foo} == 'abc'" , true);
@@ -417,7 +436,7 @@ public class SimpleOperatorTest extends
assertPredicate("${in.header.foo} not range 100.200", false);
fail("Should have thrown an exception");
} catch (SimpleIllegalSyntaxException e) {
- assertEquals(30, e.getIndex());
+ assertEquals(34, e.getIndex());
}
}