/** * Valida un objeto a partir de un validador concreto. <br> * El validador debe extender la clase Validator y soportar (verificado mediante el método * supports) el objeto a validar. Si no, lanza una IllegalArgumentException. <br> * El validador puede tener anotaciones de dependencias de Spring. * * @see com.lynxspa.sdm.web.services.validation.Validator * @see BindingResult#hasFieldErrors() * @param object El objeto a validar * @param validator El validador a utilizar. * @param BindingResult El resultado de la validación, es un objeto BindingResult de Spring. Para * verificar que no hay errores de validación hay que llamar al método hasFieldErrors. * @param result */ public void validate(Object object, Validator v, BindingResult result) { if (!v.supports(object.getClass())) { throw new IllegalArgumentException( "Validator " + v.getClass().toString() + " does not support " + object.getClass()); } v.validate(object, result); }
public void execute(ValidatorContext ctx) { logValidatorNames(); for (Validator validator : validators) { logger.debug("starting {}", validator.getClass().getSimpleName()); try { validator.validate(ctx); } catch (RuntimeException e) { logger.error( "validator " + validator.getClass().getSimpleName() + " ended with unexpected exception!", e); ctx.addError(null, ctx.getValidatedRepository(), e); } } }
private void logValidatorNames() { StringBuilder validatorNamesBuilder = new StringBuilder(); for (Validator validator : validators) { validatorNamesBuilder.append("\t"); validatorNamesBuilder.append(validator.getClass().getCanonicalName()); validatorNamesBuilder.append("\n"); } logger.debug("following validators will be executed:\n" + validatorNamesBuilder); }
public static void main(String[] args) throws IOException, ClassNotFoundException { Validator[] validators = {new ValidatorImpl()}; CorrectnessTest.check(validators); String[][] data = { readData("dataset1.dat"), readData("dataset2.dat"), readData("dataset3.dat") }; for (Validator val : validators) { System.out.println(val.getClass().getSimpleName()); System.out.println(val.getClass().getSimpleName().replaceAll(".", "=")); System.out.println( "Dataset1 Count\tDataset1 Time\tDataset2 Count" + "\tDataset2 Time\tDataset3 Count\tDataset3 Time"); for (int i = 0; i < DATA_POINTS; i++) { test(val, data); } } }
/** returns a list of Validation errors. */ public ValidationItems validate() { Boolean noValidation = (Boolean) UserSelections.getInstance().getProperty("NO_VALIDATION"); if (noValidation != null && noValidation.equals(true)) return ValidationItems.getInstance(); Map<String, Boolean> validatorChoices = (Map<String, Boolean>) UserSelections.getInstance().getProperty("VALIDATORS_CHOICES"); for (Validator val : validators) { String name = val.getClass().getName(); if (validatorChoices != null && validatorChoices.get(name) != null && validatorChoices.get(name).equals(true)) { continue; } val.validate(); } // !!TODO here we should add validators that we only want to run on subsequent calls return ValidationItems.getInstance(); }