protected Boolean walkIsTrashed(Operator op, Operand rvalue) {
if (op != Operator.EQ && op != Operator.NOTEQ) {
throw new QueryParseException(NXQL.ECM_ISTRASHED + " requires = or <> operator");
}
TrashService trashService = Framework.getService(TrashService.class);
if (trashService.hasFeature(TRASHED_STATE_IS_DEDUCED_FROM_LIFECYCLE)) {
return walkIsTrashed(new Reference(NXQL.ECM_LIFECYCLESTATE), op, rvalue,
new StringLiteral(LifeCycleConstants.DELETED_STATE));
} else if (trashService.hasFeature(TRASHED_STATE_IN_MIGRATION)) {
Boolean lifeCycleTrashed = walkIsTrashed(new Reference(NXQL.ECM_LIFECYCLESTATE), op, rvalue,
new StringLiteral(LifeCycleConstants.DELETED_STATE));
Boolean propertyTrashed = walkIsTrashed(new Reference(NXQL.ECM_ISTRASHED), op, rvalue,
new IntegerLiteral(1L));
return or(lifeCycleTrashed, propertyTrashed);
} else if (trashService.hasFeature(TRASHED_STATE_IS_DEDICATED_PROPERTY)) {
return walkIsTrashed(new Reference(NXQL.ECM_ISTRASHED), op, rvalue, new IntegerLiteral(1L));
} else {
throw new UnsupportedOperationException("TrashService is in an unknown state");
}
}