// The left expression cannot be an identification variable
if (validator.leftIdentificationVariable &&
validator.leftIdentificationVariableValid) {
IdentificationVariable variable = (IdentificationVariable) leftExpression;
// There is a specific EclipseLink case where it is valid to use an
// identification variable, which is when the identification variable
// maps to a direct collection mapping
if (!isIdentificationVariableValidInComparison(variable)) {
addProblem(
leftExpression,
ComparisonExpression_IdentificationVariable,
leftExpression.toActualText(),
expression.getComparisonOperator()
);
valid = false;
}
}
// The left expression is a path expression
else if (validator.leftStateFieldPathExpression &&
validator.leftStateFieldPathExpressionValid) {
Object mapping = helper.resolveMapping(leftExpression);
// The path expression cannot be a non-basic mapping
if ((mapping != null) && !helper.isPropertyMapping(mapping)) {
addProblem(
leftExpression,
ComparisonExpression_AssociationField,
leftExpression.toActualText(),
expression.getComparisonOperator()
);
valid = false;
}
}
// The right expression cannot be an identification variable
if (validator.rightIdentificationVariable &&
validator.rightIdentificationVariableValid) {
IdentificationVariable variable = (IdentificationVariable) rightExpression;
// There is a specific EclipseLink case where it is valid to use an
// identification variable, which is when the identification variable
// maps to a direct collection mapping
if (!isIdentificationVariableValidInComparison(variable)) {
addProblem(
rightExpression,
ComparisonExpression_IdentificationVariable,
rightExpression.toActualText(),
expression.getComparisonOperator()
);
valid = false;
}
}
// The right expression is a path expression
else if (validator.rightStateFieldPathExpression &&
validator.rightStateFieldPathExpressionValid) {
Object mapping = helper.resolveMapping(rightExpression);
// The path expression cannot be a non-basic mapping
if ((mapping != null) && !helper.isPropertyMapping(mapping)) {
addProblem(
rightExpression,
ComparisonExpression_AssociationField,
rightExpression.toActualText(),
expression.getComparisonOperator()
);
valid = false;
}
}
}
// '=', '<>'
else {
// The left expression is an identification variable
// The right expression is a path expression
if (validator.leftIdentificationVariable &&
validator.leftIdentificationVariableValid &&
validator.rightStateFieldPathExpression &&
validator.rightStateFieldPathExpressionValid) {
Object mapping = helper.resolveMapping(rightExpression);
IdentificationVariable variable = (IdentificationVariable) leftExpression;
// The path expression can only be a non-basic mapping.
// There is a specific EclipseLink case where it is valid to use an
// identification variable, which is when the identification variable
// maps to a direct collection mapping
if ((mapping != null) && helper.isPropertyMapping(mapping) &&
!isIdentificationVariableValidInComparison(variable)) {
addProblem(
rightExpression,
ComparisonExpression_BasicField,
rightExpression.toActualText(),
expression.getComparisonOperator()
);
valid = false;
}
}
// The left expression is a path expression
// The right expression is an identification variable
else if (validator.rightIdentificationVariable &&
validator.rightIdentificationVariableValid &&
validator.leftStateFieldPathExpression &&
validator.leftStateFieldPathExpressionValid) {
Object mapping = helper.resolveMapping(leftExpression);
IdentificationVariable variable = (IdentificationVariable) rightExpression;
// The path expression can only be a non-basic mapping.
// There is a specific EclipseLink case where it is valid to use an
// identification variable, which is when the identification variable
// maps to a direct collection mapping