/* * Hibernate, Relational Persistence for Idiomatic Java * * License: Apache License, Version 2.0 * See the LICENSE file in the root directory or visit http://www.apache.org/licenses/LICENSE-2.0 */ package org.hibernate.test.sqm.parser.criteria.tree.predicate; import java.io.Serializable; import org.hibernate.query.sqm.produce.spi.criteria.CriteriaVisitor; import org.hibernate.query.sqm.produce.spi.criteria.JpaExpression; import org.hibernate.query.sqm.produce.spi.criteria.JpaPredicate; import org.hibernate.query.sqm.tree.predicate.RelationalPredicateOperator; import org.hibernate.query.sqm.tree.predicate.SqmPredicate; import org.hibernate.test.sqm.parser.criteria.tree.CriteriaBuilderImpl; import org.hibernate.test.sqm.parser.criteria.tree.expression.LiteralExpression; /** * Models a basic relational comparison predicate. * * @author Steve Ebersole */ public class ComparisonPredicate extends AbstractSimplePredicate implements JpaPredicate, Serializable { private final RelationalPredicateOperator comparisonOperator; private final JpaExpression<?> leftHandSide; private final JpaExpression<?> rightHandSide; public ComparisonPredicate( CriteriaBuilderImpl criteriaBuilder, RelationalPredicateOperator comparisonOperator, JpaExpression<?> leftHandSide, JpaExpression<?> rightHandSide) { super( criteriaBuilder ); this.comparisonOperator = comparisonOperator; this.leftHandSide = leftHandSide; this.rightHandSide = rightHandSide; } @SuppressWarnings({ "unchecked" }) public ComparisonPredicate( CriteriaBuilderImpl criteriaBuilder, RelationalPredicateOperator comparisonOperator, JpaExpression<?> leftHandSide, Object rightHandSide) { super( criteriaBuilder ); this.comparisonOperator = comparisonOperator; this.leftHandSide = leftHandSide; this.rightHandSide = new LiteralExpression( criteriaBuilder, rightHandSide ); } @SuppressWarnings( {"unchecked"}) public <N extends Number> ComparisonPredicate( CriteriaBuilderImpl criteriaBuilder, RelationalPredicateOperator comparisonOperator, JpaExpression<N> leftHandSide, Number rightHandSide) { super( criteriaBuilder ); this.comparisonOperator = comparisonOperator; this.leftHandSide = leftHandSide; this.rightHandSide = new LiteralExpression( criteriaBuilder, rightHandSide ); } public RelationalPredicateOperator getComparisonOperator() { return getComparisonOperator( isNegated() ); } public RelationalPredicateOperator getComparisonOperator(boolean isNegated) { return isNegated ? comparisonOperator.negate() : comparisonOperator; } public JpaExpression<?> getLeftHandOperand() { return leftHandSide; } public JpaExpression<?> getRightHandOperand() { return rightHandSide; } @Override public SqmPredicate visitPredicate(CriteriaVisitor visitor) { return visitor.visitRelationalPredicate( comparisonOperator, leftHandSide, rightHandSide ); } }