private String generateMultipleBooleanCondition(OperatorAndArgument operator, String booleanOperator, Class<? extends BooleanCondition> expectedParentClass) {
Object argument = operator.getArgument();
Collection values;
if (argument instanceof Collection) {
values = (Collection) argument;
} else if (argument instanceof Object[]) {
values = Arrays.asList((Object[]) argument);
} else {
throw log.expectingCollectionOrArray();
}
StringBuilder sb = new StringBuilder();
boolean wrap = parentIsNotOfClass(operator.getAttributeCondition(), expectedParentClass);
if (wrap) {
sb.append('(');
}
boolean isFirst = true;
for (Object value : values) {
if (isFirst) {
isFirst = false;
} else {
sb.append(' ').append(booleanOperator).append(' ');
}
appendSingleCondition(sb, operator.getAttributeCondition(), value, "=", "!=");
}
if (wrap) {
sb.append(')');
}
return sb.toString();
}