Author: cbegin
Date: Sat Apr 11 04:18:13 2009
New Revision: 764161

URL: http://svn.apache.org/viewvc?rev=764161&view=rev
Log:
added iterable evaluation to expression evaluator

Modified:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluator.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluatorTest.java

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluator.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluator.java?rev=764161&r1=764160&r2=764161&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluator.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluator.java
 Sat Apr 11 04:18:13 2009
@@ -4,10 +4,11 @@
 import org.apache.ibatis.parser.ParserException;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 
 public class ExpressionEvaluator {
 
-  public boolean evaluate(String expression, Object parameterObject) {
+  public boolean isTrue(String expression, Object parameterObject) {
     try {
       Object value = Ognl.getValue(expression, parameterObject);
       if (value instanceof Boolean) return (Boolean) value;
@@ -18,5 +19,16 @@
     }
   }
 
+  public Iterable getIterable(String expression, Object parameterObject) {
+    try {
+      Object value = Ognl.getValue(expression, parameterObject);
+      if (value instanceof Iterable) return (Iterable) value;
+      if (value.getClass().isArray()) return Arrays.asList((Object[])value);
+      throw new ParserException("Error evaluating expression '"+expression+"'. 
 Return value ("+value+") was not iterable.");
+    } catch (OgnlException e) {
+      throw new ParserException("Error evaluating expression '"+expression+"'. 
Cause: " + e, e);
+    }
+  }
+
 
 }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java?rev=764161&r1=764160&r2=764161&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java
 Sat Apr 11 04:18:13 2009
@@ -1,10 +1,5 @@
 package org.apache.ibatis.parser.xml.dynamic;
 
-import org.apache.ibatis.ognl.*;
-import org.apache.ibatis.parser.ParserException;
-
-import java.math.BigDecimal;
-
 public class IfSqlNode implements SqlNode {
   private ExpressionEvaluator evaluator;
   private String test;
@@ -17,7 +12,7 @@
   }
 
   public boolean apply(DynamicContext builder) {
-    if (evaluator.evaluate(test, builder.getParameterObject())) {
+    if (evaluator.isTrue(test, builder.getParameterObject())) {
       contents.apply(builder);
       return true;
     }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluatorTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluatorTest.java?rev=764161&r1=764160&r2=764161&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluatorTest.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/ExpressionEvaluatorTest.java
 Sat Apr 11 04:18:13 2009
@@ -4,44 +4,59 @@
 import org.junit.Test;
 import domain.blog.*;
 
+import java.util.HashMap;
+
 public class ExpressionEvaluatorTest {
 
   private ExpressionEvaluator evaluator = new ExpressionEvaluator();
 
   @Test
   public void shouldCompareStringsReturnTrue() {
-    boolean value = evaluator.evaluate("username == 'cbegin'", new 
Author(1,"cbegin","******","[email protected]","N/A", Section.NEWS));
+    boolean value = evaluator.isTrue("username == 'cbegin'", new 
Author(1,"cbegin","******","[email protected]","N/A", Section.NEWS));
     assertEquals(true, value);
   }
 
   @Test
   public void shouldCompareStringsReturnFalse() {
-    boolean value = evaluator.evaluate("username == 'norm'", new 
Author(1,"cbegin","******","[email protected]","N/A", Section.NEWS));
+    boolean value = evaluator.isTrue("username == 'norm'", new 
Author(1,"cbegin","******","[email protected]","N/A", Section.NEWS));
     assertEquals(false, value);
   }
 
   @Test
   public void shouldReturnTrueIfNotNull() {
-    boolean value = evaluator.evaluate("username", new 
Author(1,"cbegin","******","[email protected]","N/A", Section.NEWS));
+    boolean value = evaluator.isTrue("username", new 
Author(1,"cbegin","******","[email protected]","N/A", Section.NEWS));
     assertEquals(true, value);
   }
 
   @Test
   public void shouldReturnFalseIfNull() {
-    boolean value = evaluator.evaluate("password", new 
Author(1,"cbegin",null,"[email protected]","N/A", Section.NEWS));
+    boolean value = evaluator.isTrue("password", new 
Author(1,"cbegin",null,"[email protected]","N/A", Section.NEWS));
     assertEquals(false, value);
   }
 
   @Test
   public void shouldReturnTrueIfNotZero() {
-    boolean value = evaluator.evaluate("id", new 
Author(1,"cbegin",null,"[email protected]","N/A", Section.NEWS));
+    boolean value = evaluator.isTrue("id", new 
Author(1,"cbegin",null,"[email protected]","N/A", Section.NEWS));
     assertEquals(true, value);
   }
 
   @Test
   public void shouldReturnFalseIfZero() {
-    boolean value = evaluator.evaluate("id", new 
Author(0,"cbegin",null,"[email protected]","N/A", Section.NEWS));
+    boolean value = evaluator.isTrue("id", new 
Author(0,"cbegin",null,"[email protected]","N/A", Section.NEWS));
     assertEquals(false, value);
   }
 
+  @Test
+  public void shouldIterateOverIterable() {
+    final HashMap<String,String[]> parameterObject = new HashMap() {{
+        put("array", new String[]{"1", "2", "3"});
+      }};
+    final Iterable iterable = evaluator.getIterable("array", parameterObject);
+    int i = 0;
+    for(Object o: iterable) {
+      assertEquals(String.valueOf(++i),o);
+    }
+  }
+
+
 }


Reply via email to