package tc.oc.parse.xml;
import java.util.List;
import com.google.common.collect.ImmutableList;
import com.google.common.reflect.TypeToken;
import org.w3c.dom.Node;
import tc.oc.parse.ParseException;
import tc.oc.parse.validate.Validation;
public class ValidatingNodeParser<T> implements NodeParser<T> {
private final NodeParser<T> parser;
private final List<Validation<? super T>> validations;
public ValidatingNodeParser(NodeParser<T> parser, List<Validation<? super T>> validations) {
this.parser = parser;
this.validations = validations;
}
public ValidatingNodeParser(NodeParser<T> parser, Validation<? super T>... validations) {
this(parser, ImmutableList.copyOf(validations));
}
@Override
public TypeToken<T> paramToken() {
return parser.paramToken();
}
@Override
public T parse(Node node) throws ParseException {
final T value = parser.parse(node);
for(Validation<? super T> v : validations) {
v.validate(value);
}
return value;
}
}