package org.activityinfo.model.expr.functions;
import com.google.common.base.Preconditions;
import org.activityinfo.model.type.FieldType;
import org.activityinfo.model.type.FieldValue;
import org.activityinfo.model.type.primitive.BooleanFieldValue;
import org.activityinfo.model.type.primitive.BooleanType;
import java.util.List;
public abstract class BinaryBooleanOperator extends ExprFunction {
private final String name;
protected BinaryBooleanOperator(String name) {
this.name = name;
}
@Override
public String getId() {
return name;
}
@Override
public String getLabel() {
return name;
}
@Override
public BooleanFieldValue apply(List<FieldValue> arguments) {
Preconditions.checkArgument(arguments.size() == 2);
boolean a = Casting.toBoolean(arguments.get(0));
boolean b = Casting.toBoolean(arguments.get(1));
return BooleanFieldValue.valueOf(apply(a, b));
}
@Override
public FieldType resolveResultType(List<FieldType> argumentTypes) {
return BooleanType.INSTANCE;
}
public abstract boolean apply(boolean a, boolean b);
}