private void validateInOperator(final OperatorExpression expression, final Logger log) {
    if (!validateOperatorInputs(expression, log)) {
      return;
    }

    final List<FilterExpression> inputs = expression.getInputs();
    final ValueExpression valueExpression = (ValueExpression) inputs.get(1);

    if (valueExpression.getValueType() != ValueType.STRING) {
      log.report(MessageKey.DATASET_FILTER_OPERATOR_INCOMPATIBLE_TYPES);
    }
  }
  private void validateLikeOperator(final OperatorExpression expression, final Logger log) {
    if (!validateOperatorInputs(expression, log)) {
      return;
    }

    final List<FilterExpression> inputs = expression.getInputs();
    final AttributeExpression attributeExpression = (AttributeExpression) inputs.get(0);
    final FeatureTypeAttribute attribute =
        findAttribute(
            attributeExpression.getAttributeName(), attributeExpression.getAttributeType());
    final ValueExpression valueExpression = (ValueExpression) inputs.get(1);

    // The attribute and value must have matching types:
    if (!compareAttributeType(attribute, ((ValueExpression) inputs.get(1)).getValueType())
        || valueExpression.getValueType() != ValueType.STRING) {
      log.report(MessageKey.DATASET_FILTER_OPERATOR_INCOMPATIBLE_TYPES);
    }
  }