Class AbstractValidationRSQLVisitor

java.lang.Object
in.co.akshitbansal.springwebquery.ast.AbstractValidationRSQLVisitor
All Implemented Interfaces:
cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,NodeMetadata>
Direct Known Subclasses:
DTOValidationRSQLVisitor, EntityValidationRSQLVisitor

public abstract class AbstractValidationRSQLVisitor extends Object implements cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,NodeMetadata>
Base RSQL AST visitor that enforces structural validation rules while delegating selector-specific checks to subclasses.

This base class is responsible for:

  • Disallowing logical AND/OR nodes based on configuration.
  • Ensuring the AST does not exceed the configured maximum depth.
  • Providing access to a resolver for selector-to-entity path translation.
  • Providing access to a reusable validator for filterable terminal fields.

Concrete subclasses validate individual ComparisonNode selectors against either entity fields or DTO fields and invoke the shared filterableFieldValidator as needed.

  • Field Details

    • fieldResolver

      protected final FieldResolver fieldResolver
      Resolver used by subclasses to translate selectors into entity-backed paths and expose the terminal field for validation.
    • filterableFieldValidator

      protected final Validator<FilterableFieldValidator.FilterableField> filterableFieldValidator
      Validator used by subclasses to enforce @RSQLFilterable constraints on resolved terminal fields.
  • Constructor Details

    • AbstractValidationRSQLVisitor

      protected AbstractValidationRSQLVisitor(FieldResolver fieldResolver, Map<Class<?>,RSQLCustomOperator<?>> customOperators, boolean andNodeAllowed, boolean orNodeAllowed, int maxDepth)
      Creates a validation visitor with the supplied structural limits and custom operator registry.
      Parameters:
      fieldResolver - resolver used for selector-path resolution in concrete visitors
      customOperators - registered custom operators keyed by implementation class
      andNodeAllowed - whether logical AND nodes are allowed
      orNodeAllowed - whether logical OR nodes are allowed
      maxDepth - maximum allowed AST depth
  • Method Details

    • visit

      @NullUnmarked public Void visit(cz.jirutka.rsql.parser.ast.AndNode node, NodeMetadata metadata)
      Validates AND nodes and recursively visits child nodes.
      Specified by:
      visit in interface cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,NodeMetadata>
      Parameters:
      node - AND node to validate
      metadata - traversal metadata including current depth
      Returns:
      null (visitor contract)
    • visit

      @NullUnmarked public Void visit(cz.jirutka.rsql.parser.ast.OrNode node, NodeMetadata metadata)
      Validates OR nodes and recursively visits child nodes.
      Specified by:
      visit in interface cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,NodeMetadata>
      Parameters:
      node - OR node to validate
      metadata - traversal metadata including current depth
      Returns:
      null (visitor contract)
    • visit

      @NullUnmarked public Void visit(cz.jirutka.rsql.parser.ast.ComparisonNode node, NodeMetadata metadata)
      Validates comparison nodes and delegates field/operator validation.
      Specified by:
      visit in interface cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,NodeMetadata>
      Parameters:
      node - comparison node to validate
      metadata - traversal metadata including current depth
      Returns:
      null (visitor contract)
    • validateComparisonNode

      protected abstract void validateComparisonNode(cz.jirutka.rsql.parser.ast.ComparisonNode node)
      Validates a comparison node for field/operator correctness.

      Concrete subclasses implement this hook to resolve selectors against their active contract type and then invoke filterableFieldValidator on the resolved terminal field.

      Parameters:
      node - comparison node to validate
    • validateNode

      protected void validateNode(cz.jirutka.rsql.parser.ast.Node node, NodeMetadata metadata)
      Validates logical operator usage and depth constraints for the given node.
      Parameters:
      node - node to validate
      metadata - node metadata including current depth
      Throws:
      QueryValidationException - if an operator is disallowed or the depth exceeds the limit