package org.openstack.atlas.api.validation.verifiers; import org.openstack.atlas.api.validation.Validator; import org.openstack.atlas.api.validation.expectation.ValidationResult; import org.openstack.atlas.api.validation.results.ExpectationResult; import org.openstack.atlas.api.validation.results.ValidatorResult; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class MustDelegateTo implements Verifier<Object> { private final Validator delegateValidator; private final Object delegateContext; public MustDelegateTo(Validator validator, Object delegateContext) { this.delegateValidator = validator; this.delegateContext = delegateContext; } @Override public VerifierResult verify(Object obj) { List<ValidationResult> validationResults = new ArrayList<ValidationResult>(); try { if (obj instanceof Collection) { for (Object o : (Collection) obj) { validationResults.addAll(fetchValidationResults(o)); } } else { validationResults.addAll(fetchValidationResults(obj)); } } catch (Exception ex) { //TODO: Catch actual exception ex.printStackTrace(); validationResults.add(new ValidationResult(false, "Delegate context doesn't match.")); } return new VerifierResult(validationResults.isEmpty(), validationResults); } private List<ValidationResult> fetchValidationResults(Object o) { List<ValidationResult> validationResults = new ArrayList<ValidationResult>(); ValidatorResult validatorResult; validatorResult = delegateValidator.validate(o, delegateContext); if (!validatorResult.passedValidation()) { for (ExpectationResult expectationResult : validatorResult.getValidationResults()) { if (!expectationResult.expectationPassedValidation()) validationResults.add(new ValidationResult(false, expectationResult.getMessage())); } } return validationResults; } }