Class ValidationRSQLVisitor

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

public abstract class ValidationRSQLVisitor 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 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 Summary

    Fields
    Modifier and Type
    Field
    Description
    Validator used by subclasses to enforce @RSQLFilterable constraints on resolved terminal fields.
  • Constructor Summary

    Constructors
    Constructor
    Description
    ValidationRSQLVisitor(Map<Class<?>,RSQLCustomOperator<?>> customOperators, boolean andNodeAllowed, boolean orNodeAllowed, int maxDepth)
    Creates a validation visitor with the supplied structural limits and custom operator registry.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected abstract void
    validateComparisonNode(cz.jirutka.rsql.parser.ast.ComparisonNode node)
    Validates a comparison node for field/operator correctness.
    protected void
    validateNode(cz.jirutka.rsql.parser.ast.Node node, NodeMetadata metadata)
    Validates logical operator usage and depth constraints for the given node.
    visit(cz.jirutka.rsql.parser.ast.AndNode node, NodeMetadata metadata)
    Validates AND nodes and recursively visits child nodes.
    visit(cz.jirutka.rsql.parser.ast.ComparisonNode node, NodeMetadata metadata)
    Validates comparison nodes and delegates field/operator validation.
    visit(cz.jirutka.rsql.parser.ast.OrNode node, NodeMetadata metadata)
    Validates OR nodes and recursively visits child nodes.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • filterableFieldValidator

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

    • ValidationRSQLVisitor

      public ValidationRSQLVisitor(Map<Class<?>,RSQLCustomOperator<?>> customOperators, boolean andNodeAllowed, boolean orNodeAllowed, int maxDepth)
      Creates a validation visitor with the supplied structural limits and custom operator registry.
      Parameters:
      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

      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

      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

      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.
      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