package org.quaere.dsl;
import org.quaere.expressions.Expression;
import org.quaere.expressions.Identifier;
import org.quaere.expressions.Statement;
import org.quaere.expressions.MethodCall;
import java.util.ArrayList;
import java.util.Arrays;
public class QuantificationExpressionBuilderImpl implements
QuantificationExpressionBuilder,
QuantificationExpressionArgumentDefinitionBuilder,
QuantificationExpressionWhereClauseOrIndexerArgumentBuilder,
QuantificationExpressionWhereClauseBuilder {
private String operator;
private Expression referenceExpression;
private Identifier anonymousIdentifier;
private Identifier indexerIdentifier;
public QuantificationExpressionBuilderImpl(String operator) {
this.operator = operator;
}
public QuantificationExpressionArgumentDefinitionBuilder in(String expression) {
referenceExpression = LiteralExpression.parse(expression);
return this;
}
public QuantificationExpressionWhereClauseOrIndexerArgumentBuilder as(String anonymousIdentifier) {
this.anonymousIdentifier = new Identifier(anonymousIdentifier);
return this;
}
public QuantificationExpressionWhereClauseBuilder withIndexer(String indexerIdentifier) {
this.indexerIdentifier = new Identifier(indexerIdentifier);
return this;
}
public Expression where(String predicate) {
return where(LiteralExpression.parse(predicate));
}
public Expression where(Expression predicate) {
return new Statement(
Arrays.<Expression>asList(
referenceExpression,
new MethodCall(
new Identifier(operator),
new ArrayList<Expression>(0),
anonymousIdentifier,
indexerIdentifier,
predicate
)
)
);
}
}