package tc.oc.pgm.xml.validate; import java.util.stream.Stream; import javax.annotation.Nullable; import tc.oc.pgm.xml.InvalidXMLException; import tc.oc.pgm.xml.Node; import static tc.oc.commons.core.exception.LambdaExceptionUtils.rethrowConsumer; /** * A context in which validations can be registered to run now or in the future */ public interface ValidationContext { <T extends Validatable> T validate(T validatable) throws InvalidXMLException; default <T> T validate(T value, @Nullable Node node, Validation<? super T>... validations) throws InvalidXMLException { return validate(value, node, Stream.of(validations)); } default <T> T validate(T value, @Nullable Node node, Stream<Validation<? super T>> validations) throws InvalidXMLException { validate(() -> validations.forEach(rethrowConsumer(validation -> validation.validate(value, node)))); return value; } }