1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.scripting.xmltags;
17
18 import java.lang.reflect.Array;
19 import java.math.BigDecimal;
20 import java.util.ArrayList;
21 import java.util.List;
22 import java.util.Map;
23
24 import org.apache.ibatis.builder.BuilderException;
25
26
27
28
29 public class ExpressionEvaluator {
30
31 public static final ExpressionEvaluator INSTANCE = new ExpressionEvaluator();
32
33 public boolean evaluateBoolean(String expression, Object parameterObject) {
34 Object value = OgnlCache.getValue(expression, parameterObject);
35 if (value instanceof Boolean) {
36 return (Boolean) value;
37 }
38 if (value instanceof Number) {
39 return new BigDecimal(String.valueOf(value)).compareTo(BigDecimal.ZERO) != 0;
40 }
41 return value != null;
42 }
43
44
45
46
47 @Deprecated
48 public Iterable<?> evaluateIterable(String expression, Object parameterObject) {
49 return evaluateIterable(expression, parameterObject, false);
50 }
51
52
53
54
55 public Iterable<?> evaluateIterable(String expression, Object parameterObject, boolean nullable) {
56 Object value = OgnlCache.getValue(expression, parameterObject);
57 if (value == null) {
58 if (nullable) {
59 return null;
60 }
61 throw new BuilderException("The expression '" + expression + "' evaluated to a null value.");
62 }
63 if (value instanceof Iterable) {
64 return (Iterable<?>) value;
65 }
66 if (value.getClass().isArray()) {
67
68
69
70 int size = Array.getLength(value);
71 List<Object> answer = new ArrayList<>();
72 for (int i = 0; i < size; i++) {
73 Object o = Array.get(value, i);
74 answer.add(o);
75 }
76 return answer;
77 }
78 if (value instanceof Map) {
79 return ((Map) value).entrySet();
80 }
81 throw new BuilderException(
82 "Error evaluating expression '" + expression + "'. Return value (" + value + ") was not iterable.");
83 }
84
85 }