1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.gridsystems.beanfilter;
18
19 import java.util.Collection;
20 import java.util.HashSet;
21 import java.util.Set;
22
23
24
25
26
27
28
29 public class CollectionValue extends EvalValue {
30
31
32
33 private Collection<EvalValue> col = new HashSet<EvalValue>();
34
35
36
37
38 private Class<?> itemsClass = null;
39
40
41
42
43 private int typeList = FilterParserConstants.ALLITEMS;
44
45
46
47
48
49
50 public CollectionValue(Token token) {
51 super(token.beginLine, token.beginColumn);
52 }
53
54
55
56
57 @SuppressWarnings("unchecked")
58 @Override public Object getValue(Object src) throws EvalException {
59 HashSet<Object> set;
60 if (typeList == FilterParserConstants.ANYITEMS) {
61 set = new AnyItemsHashSet();
62 } else {
63 set = new AllItemsHashSet();
64 }
65 for (EvalValue val : col) {
66 Object value = val.getValue(src);
67 if (value instanceof Set) {
68 set.addAll((Set<Object>)value);
69 } else {
70 set.add(value);
71 }
72 }
73 return set;
74 }
75
76
77
78
79
80
81
82
83 public void add(EvalValue value, Class<?> parentClass) throws EvalException {
84 if (value != null) {
85 if (itemsClass == null) {
86 itemsClass = value.getClassValue(parentClass);
87 } else {
88 Class<?> valueClass = value.getClassValue(parentClass);
89 if ((valueClass != null) && !itemsClass.equals(valueClass)) {
90
91
92 Object[] params = new Object[] { value.toString(), valueClass.getName(),
93 value.getLinePos(), value.getCharPos(), itemsClass.getName() };
94 throw new EvalException("FTR008", params);
95 }
96 }
97 this.col.add(value);
98 }
99 }
100
101
102
103
104 @Override public String toString() {
105 return col.toString();
106 }
107
108
109
110
111 public void setTypeList(int typeList) {
112 this.typeList = typeList;
113 }
114
115
116
117
118 @Override
119 public Class<?> getClassValue(Class<?> parentClass) {
120 return itemsClass;
121 }
122
123 }