@Override public String evaluate( ProgramIndicator programIndicator, StatementBuilder statementBuilder, Date reportingStartDate, Date reportingEndDate, String... args ) { if ( args == null || args.length != 2 ) { throw new IllegalArgumentException( "Illegal arguments, expected 2 arguments: start-date, end-date" ); } for ( int i = 0; i < args.length; i++ ) { String arg = args[i].replaceAll( "^\"|^'|\"$|'$", "" ).trim(); Matcher matcher = AnalyticsPeriodBoundary.COHORT_HAVING_PROGRAM_STAGE_PATTERN.matcher( arg ); if ( matcher.find() ) { String programStageUid = matcher.group( AnalyticsPeriodBoundary.PROGRAM_STAGE_REGEX_GROUP ); args[i] = statementBuilder.getProgramIndicatorColumnSelectSql( programStageUid, "executiondate", reportingStartDate, reportingEndDate, programIndicator ); } } String startDate = args[0]; String endDate = args[1]; return compare( startDate, endDate ); }