@Transactional public String filterIsValid( String filter ) { String expr = getSubstitutedSQLFunc( getSubstitutedExpression( filter ) ); if ( ProgramIndicator.INVALID_IDENTIFIERS_IN_EXPRESSION.equals( expr ) || ProgramIndicator.UNKNOWN_VARIABLE.equals( expr ) ) { return expr; } if ( !ExpressionUtils.isBoolean( expr, null ) ) { return ProgramIndicator.FILTER_NOT_EVALUATING_TO_TRUE_OR_FALSE; } return ProgramIndicator.VALID; }