/**
*
*/
package squill.functions;
import static java.util.Arrays.asList;
import static squill.util.StringUtil.join;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import squill.query.BaseExpression;
import squill.query.Expression;
import squill.query.QueryContext;
import squill.query.where.WhereExpression;
public class MultiOperatorBooleanExpression<T> extends BaseExpression<Boolean> implements WhereExpression {
private final List<Expression<T>> expressions;
private final String operator;
public MultiOperatorBooleanExpression(final String operator, final Expression<T>... expressions) {
this.operator = operator;
this.expressions = asList(expressions);
}
public MultiOperatorBooleanExpression(final String operator, final Collection<Expression<T>> expressions) {
this.operator = operator;
this.expressions = new ArrayList<Expression<T>>(expressions);
}
public List<? extends Expression<?>> getParts() {
return expressions;
}
public String getOperator() {
return operator;
}
@Override
public String getDefaultSql() {
return "(" + join(expressions, Expression.GET_SQL_STRING, operator) + ")";
}
@Override
public List<Object> getSqlArguments() {
List<Object> result = new ArrayList<Object>();
for (Expression<T> expression : expressions) {
result.addAll(expression.getSqlArguments());
}
return result;
}
@Override
public void setQueryContext(QueryContext ctx) {
super.setQueryContext(ctx);
for (Expression<T> expression : expressions) {
expression.setQueryContext(ctx);
}
}
@Override
public WhereExpression and(WhereExpression... exps) {
WhereExpression[] newExps = new WhereExpression[exps.length + 1];
newExps[0] = this;
System.arraycopy(exps, 0, newExps, 1, exps.length);
return Operations.and(newExps);
}
@Override
public WhereExpression or(WhereExpression... exps) {
WhereExpression[] newExps = new WhereExpression[exps.length + 1];
newExps[0] = this;
System.arraycopy(exps, 0, newExps, 1, exps.length);
return Operations.or(newExps);
}
}