public Collection<ValidationResult> validationAnalysis( ValidationAnalysisParams parameters) { Clock clock = new Clock( log ).startClock().logTime( "Starting validation analysis" + ( parameters.getOrgUnit() == null ? "" : " for orgUnit " + parameters.getOrgUnit().getUid() + ( parameters.isIncludeOrgUnitDescendants() ? " with descendants" : "" ) ) + ", " + ( parameters.getPeriods().size() == 1 ? "period " + Iterables.getOnlyElement( parameters.getPeriods() ).getIsoDate() : parameters.getPeriods().size() + " periods" ) + ", " + parameters.getRules().size() + " rules" + ( parameters.isPersistResults() ? ", persisting results" : "" ) + ( parameters.isSendNotifications() ? ", sending notifications" : "" ) ); ValidationRunContext context = getValidationContext( parameters ); clock.logTime( "Initialized validation analysis" ); Collection<ValidationResult> results = Validator.validate( context, applicationContext, analyticsService ); if ( context.isPersistResults() ) { validationResultService.saveValidationResults( context.getValidationResults() ); } clock.logTime( "Finished validation analysis, " + context.getValidationResults().size() + " results").stop(); if ( context.isSendNotifications() ) { notificationService.sendNotifications( Sets.newHashSet( results ) ); } return results; }