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