package org.openstack.atlas.api.validation;
import org.openstack.atlas.api.validation.expectation.ExpectationTarget;
import org.openstack.atlas.api.validation.results.ExpectationResult;
import org.openstack.atlas.api.validation.results.ExpectationResultBuilder;
import org.openstack.atlas.api.validation.results.ValidatorResult;
import java.util.LinkedList;
import java.util.List;
public class ValidatorImpl<ObjectTypeToValidate> implements Validator<ObjectTypeToValidate> {
private final List<ExpectationTarget<ObjectTypeToValidate>> validationTargetList;
public ValidatorImpl(List<ExpectationTarget<ObjectTypeToValidate>> validationTargetList) {
this.validationTargetList = validationTargetList;
}
@Override
public synchronized ValidatorResult validate(ObjectTypeToValidate object, Object context) {
if (object == null) {
return generateEmptyResult();
}
final List<ExpectationResult> gatheredResults = new LinkedList<ExpectationResult>();
for (ExpectationTarget<ObjectTypeToValidate> target : validationTargetList) {
gatheredResults.addAll(target.validate(object, context));
}
return new ValidatorResult(gatheredResults);
}
/**
* Used for silent failure in the result of a null root element
*/
private static ValidatorResult generateEmptyResult() {
final List<ExpectationResult> gatheredResults = new LinkedList<ExpectationResult>();
final ExpectationResultBuilder resultBuilder = new ExpectationResultBuilder("Root");
resultBuilder.setMessage("");
resultBuilder.setPassed(true);
gatheredResults.add(resultBuilder.toResult());
return new ValidatorResult(gatheredResults);
}
}