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());
         }
     }