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 Summary

    Fields
    Modifier and Type
    Field
    Description
    protected final FieldResolver
    Resolver used by subclasses to translate selectors into entity-backed paths and expose the terminal field for validation.
    Validator used by subclasses to enforce @RSQLFilterable constraints on resolved terminal fields.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    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.
  • 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

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

      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.

      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