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 08:04:01 UTC
svn commit: r1244860 - in /camel/branches/camel-2.9.x: ./
camel-core/src/main/java/org/apache/camel/language/simple/
camel-core/src/main/java/org/apache/camel/util/
camel-core/src/test/java/org/apache/camel/language/simple/
Author: davsclaus
Date: Thu Feb 16 07:04:00 2012
New Revision: 1244860
URL: http://svn.apache.org/viewvc?rev=1244860&view=rev
Log:
CAMEL-5004: Improved simple langauge working with floating point numbers.
Modified:
camel/branches/camel-2.9.x/ (props changed)
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 16 07:04:00 2012
@@ -1 +1 @@
-/camel/trunk:1243046,1243057,1243234,1244518,1244644
+/camel/trunk:1243046,1243057,1243234,1244518,1244644,1244859
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java?rev=1244860&r1=1244859&r2=1244860&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java Thu Feb 16 07:04:00 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/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=1244860&r1=1244859&r2=1244860&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Thu Feb 16 07:04:00 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/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java?rev=1244860&r1=1244859&r2=1244860&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java Thu Feb 16 07:04:00 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());
}
}