in qpid-jms-client/src/main/java/org/apache/qpid/jms/selector/filter/UnaryExpression.java [58:122]
public static BooleanExpression createInExpression(PropertyExpression right, List<Object> elements, final boolean not) {
// Use a HashSet if there are many elements.
Collection<Object> t;
if (elements.size() == 0) {
t = null;
} else if (elements.size() < 5) {
t = elements;
} else {
t = new HashSet<Object>(elements);
}
final Collection<Object> inList = t;
return new BooleanUnaryExpression(right) {
@Override
public Object evaluate(Filterable message) throws FilterException {
Object rvalue = right.evaluate(message);
if (rvalue == null) {
return null;
}
if (rvalue.getClass() != String.class) {
return null;
}
if ((inList != null && inList.contains(rvalue)) ^ not) {
return Boolean.TRUE;
} else {
return Boolean.FALSE;
}
}
@Override
public String toString() {
StringBuffer answer = new StringBuffer();
answer.append(right);
answer.append(" ");
answer.append(getExpressionSymbol());
answer.append(" ( ");
int count = 0;
for (Iterator<Object> i = inList.iterator(); i.hasNext();) {
Object o = i.next();
if (count != 0) {
answer.append(", ");
}
answer.append(o);
count++;
}
answer.append(" )");
return answer.toString();
}
@Override
public String getExpressionSymbol() {
if (not) {
return "NOT IN";
} else {
return "IN";
}
}
};
}