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 @NonNull FieldResolverResolver used by subclasses to translate selectors into entity-backed paths and expose the terminal field for validation.protected final @NonNull FilterableFieldValidatorValidator used by subclasses to enforce@RSQLFilterableconstraints on resolved terminal fields. -
Constructor Summary
Constructors -
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.@Nullable Voidvisit(@NonNull cz.jirutka.rsql.parser.ast.AndNode node, @NonNull NodeMetadata metadata) Validates AND nodes and recursively visits child nodes.@Nullable Voidvisit(@NonNull cz.jirutka.rsql.parser.ast.ComparisonNode node, @NonNull NodeMetadata metadata) Validates comparison nodes and delegates field/operator validation.@Nullable Voidvisit(@NonNull cz.jirutka.rsql.parser.ast.OrNode node, @NonNull 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
public AbstractValidationRSQLVisitor()
-
-
Method Details
-
visit
public @Nullable Void visit(@NonNull @NonNull cz.jirutka.rsql.parser.ast.AndNode node, @NonNull @NonNull NodeMetadata metadata) 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
public @Nullable Void visit(@NonNull @NonNull cz.jirutka.rsql.parser.ast.OrNode node, @NonNull @NonNull NodeMetadata metadata) 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
public @Nullable Void visit(@NonNull @NonNull cz.jirutka.rsql.parser.ast.ComparisonNode node, @NonNull @NonNull NodeMetadata metadata) 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:
QueryForbiddenLogicalOperatorException- if a logical AND/OR operator is disallowedQueryMaxASTDepthExceededException- if the current node depth exceeds the configured maximum
-