private boolean validateNotNullOperator(final OperatorExpression expression, final Logger log) { final List<FilterExpression> inputs = expression.getInputs(); // A not null operator must have one input: if (inputs == null || inputs.size() < 1 || inputs.size() > 2) { log.report(MessageKey.DATASET_FILTER_OPERATOR_INPUT_COUNT); return false; } // First input must be an instance of AttributeExpression: if (inputs.get(0) == null || !(inputs.get(0) instanceof AttributeExpression) || ((AttributeExpression) inputs.get(0)).getAttributeName() == null || ((AttributeExpression) inputs.get(0)).getAttributeType() == null) { log.report(MessageKey.DATASET_FILTER_OPERATOR_NO_ATTRIBUTE); return false; } // The attribute must exist: final AttributeExpression attributeExpression = (AttributeExpression) inputs.get(0); final FeatureTypeAttribute attribute = findAttribute( attributeExpression.getAttributeName(), attributeExpression.getAttributeType()); if (attribute == null) { log.report( MessageKey.DATASET_FILTER_OPERATOR_MISSING_ATTRIBUTE, attributeExpression.getAttributeName()); return false; } return true; }
private void validateLogicalOperator(final OperatorExpression expression, final Logger log) { final List<FilterExpression> inputs = expression.getInputs(); // The "and" operator must have inputs, the "or" operator is allowed without inputs (to allow // empty filters): if (inputs == null || inputs.size() == 0) { if (expression.getOperatorType() != OperatorType.OR) { log.report(MessageKey.DATASET_FILTER_LOGICAL_OPERATOR_WITHOUT_INPUTS); } return; } // Validate inputs: for (final FilterExpression input : inputs) { // Input must exist: if (input == null) { log.report(MessageKey.DATASET_FILTER_LOGICAL_OPERATOR_MISSING_INPUT); continue; } // Input must be of type OperatorExpression: if (input == null || !(input instanceof OperatorExpression)) { log.report(MessageKey.DATASET_FILTER_LOGICAL_OPERATOR_WRONG_TYPE); continue; } validateOperatorExpression((OperatorExpression) input, log); } }
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 validateComparisonOperator(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()); // The attribute and value must have matching types: if (!compareAttributeType(attribute, ((ValueExpression) inputs.get(1)).getValueType())) { log.report(MessageKey.DATASET_FILTER_OPERATOR_INCOMPATIBLE_TYPES); } }
private boolean validateOperatorInputs(final OperatorExpression expression, final Logger log) { final List<FilterExpression> inputs = expression.getInputs(); // A comparison operator must have exactly two inputs: if (inputs == null || inputs.size() != 2) { log.report(MessageKey.DATASET_FILTER_OPERATOR_INPUT_COUNT); return false; } // First input must be an instance of AttributeExpression: boolean invalidInputs = false; if (inputs.get(0) == null || !(inputs.get(0) instanceof AttributeExpression) || ((AttributeExpression) inputs.get(0)).getAttributeName() == null || ((AttributeExpression) inputs.get(0)).getAttributeType() == null) { log.report(MessageKey.DATASET_FILTER_OPERATOR_NO_ATTRIBUTE); invalidInputs = true; } // Second input must be an instance of ValueExpression: if (inputs.get(1) == null || !(inputs.get(1) instanceof ValueExpression) || ((ValueExpression) inputs.get(1)).getStringValue() == null || ((ValueExpression) inputs.get(1)).getValueType() == null) { log.report(MessageKey.DATASET_FILTER_OPERATOR_NO_VALUE); invalidInputs = true; } if (invalidInputs) { return false; } // The attribute must exist: final AttributeExpression attributeExpression = (AttributeExpression) inputs.get(0); final FeatureTypeAttribute attribute = findAttribute( attributeExpression.getAttributeName(), attributeExpression.getAttributeType()); if (attribute == null) { log.report( MessageKey.DATASET_FILTER_OPERATOR_MISSING_ATTRIBUTE, attributeExpression.getAttributeName()); } return true; }