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
FieldsModifier and TypeFieldDescriptionprotected final FieldResolverResolver used by subclasses to translate selectors into entity-backed paths and expose the terminal field for validation.protected final Validator<FilterableFieldValidator.Field>Validator used by subclasses to enforce@RSQLFilterableconstraints on resolved terminal fields. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractValidationRSQLVisitor(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 TypeMethodDescriptionprotected abstract voidvalidateComparisonNode(cz.jirutka.rsql.parser.ast.ComparisonNode node) Validates a comparison node for field/operator correctness.protected voidvalidateNode(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.
-
Field Details
-
fieldResolver
Resolver used by subclasses to translate selectors into entity-backed paths and expose the terminal field for validation. -
filterableFieldValidator
Validator used by subclasses to enforce@RSQLFilterableconstraints 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 visitorscustomOperators- registered custom operators keyed by implementation classandNodeAllowed- whether logical AND nodes are allowedorNodeAllowed- whether logical OR nodes are allowedmaxDepth- maximum allowed AST depth
-
-
Method Details
-
visit
Validates AND nodes and recursively visits child nodes.- Specified by:
visitin interfacecz.jirutka.rsql.parser.ast.RSQLVisitor<Void,NodeMetadata> - Parameters:
node- AND node to validatemetadata- traversal metadata including current depth- Returns:
null(visitor contract)
-
visit
Validates OR nodes and recursively visits child nodes.- Specified by:
visitin interfacecz.jirutka.rsql.parser.ast.RSQLVisitor<Void,NodeMetadata> - Parameters:
node- OR node to validatemetadata- traversal metadata including current depth- Returns:
null(visitor contract)
-
visit
Validates comparison nodes and delegates field/operator validation.- Specified by:
visitin interfacecz.jirutka.rsql.parser.ast.RSQLVisitor<Void,NodeMetadata> - Parameters:
node- comparison node to validatemetadata- 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
filterableFieldValidatoron the resolved terminal field.- Parameters:
node- comparison node to validate
-
validateNode
Validates logical operator usage and depth constraints for the given node.- Parameters:
node- node to validatemetadata- node metadata including current depth- Throws:
QueryValidationException- if an operator is disallowed or the depth exceeds the limit
-