return null;
final Object right = condition.getRight();
final Object left = condition.getLeft();
final OQueryOperator operator = condition.getOperator();
if (!(operator instanceof OQueryOperatorAnd))
return null;
if (!(right instanceof OSQLFilterCondition))
return null;
if (!(left instanceof OSQLFilterCondition))
return null;
String rightField;
final OSQLFilterCondition rightCondition = (OSQLFilterCondition) right;
final OSQLFilterCondition leftCondition = (OSQLFilterCondition) left;
if (rightCondition.getLeft() instanceof OSQLFilterItemField && rightCondition.getRight() instanceof OSQLFilterItemField)
return null;
if (!(rightCondition.getLeft() instanceof OSQLFilterItemField) && !(rightCondition.getRight() instanceof OSQLFilterItemField))
return null;
if (leftCondition.getLeft() instanceof OSQLFilterItemField && leftCondition.getRight() instanceof OSQLFilterItemField)
return null;
if (!(leftCondition.getLeft() instanceof OSQLFilterItemField) && !(leftCondition.getRight() instanceof OSQLFilterItemField))
return null;
final List<Object> betweenBoundaries = new ArrayList<Object>();
if (rightCondition.getLeft() instanceof OSQLFilterItemField) {
OSQLFilterItemField itemField = (OSQLFilterItemField) rightCondition.getLeft();
if (!itemField.isFieldChain())
return null;
if (itemField.getFieldChain().getItemCount() > 1)
return null;
rightField = itemField.getRoot();
betweenBoundaries.add(rightCondition.getRight());
} else if (rightCondition.getRight() instanceof OSQLFilterItemField) {
OSQLFilterItemField itemField = (OSQLFilterItemField) rightCondition.getRight();
if (!itemField.isFieldChain())
return null;
if (itemField.getFieldChain().getItemCount() > 1)
return null;
rightField = itemField.getRoot();
betweenBoundaries.add(rightCondition.getLeft());
} else
return null;
betweenBoundaries.add("and");
String leftField;
if (leftCondition.getLeft() instanceof OSQLFilterItemField) {
OSQLFilterItemField itemField = (OSQLFilterItemField) leftCondition.getLeft();
if (!itemField.isFieldChain())
return null;
if (itemField.getFieldChain().getItemCount() > 1)
return null;
leftField = itemField.getRoot();
betweenBoundaries.add(leftCondition.getRight());
} else if (leftCondition.getRight() instanceof OSQLFilterItemField) {
OSQLFilterItemField itemField = (OSQLFilterItemField) leftCondition.getRight();
if (!itemField.isFieldChain())
return null;
if (itemField.getFieldChain().getItemCount() > 1)
return null;
leftField = itemField.getRoot();
betweenBoundaries.add(leftCondition.getLeft());
} else
return null;
if (!leftField.equalsIgnoreCase(rightField))
return null;
final OQueryOperator rightOperator = ((OSQLFilterCondition) right).getOperator();
final OQueryOperator leftOperator = ((OSQLFilterCondition) left).getOperator();
if ((rightOperator instanceof OQueryOperatorMajor || rightOperator instanceof OQueryOperatorMajorEquals)
&& (leftOperator instanceof OQueryOperatorMinor || leftOperator instanceof OQueryOperatorMinorEquals)) {
final OQueryOperatorBetween between = new OQueryOperatorBetween();