package tc.oc.pgm.filters.parser;
import com.google.common.cache.LoadingCache;
import tc.oc.commons.core.util.CacheUtils;
import tc.oc.pgm.filters.Filter;
import tc.oc.pgm.filters.FilterTypeException;
import tc.oc.pgm.filters.query.IQuery;
import tc.oc.pgm.xml.InvalidXMLException;
import tc.oc.pgm.xml.Node;
import tc.oc.pgm.xml.validate.Validation;
public class RespondsToQueryValidation implements Validation<Filter> {
private static final LoadingCache<Class<? extends IQuery>, RespondsToQueryValidation> CACHE = CacheUtils.newCache(RespondsToQueryValidation::new);
public static RespondsToQueryValidation get(Class<? extends IQuery> queryType) { return CACHE.getUnchecked(queryType); }
private final Class<? extends IQuery> queryType;
protected RespondsToQueryValidation(Class<? extends IQuery> queryType) {
this.queryType = queryType;
}
@Override
public void validate(Filter filter, Node node) throws InvalidXMLException {
try {
filter.assertRespondsTo(queryType);
} catch(FilterTypeException e) {
throw new InvalidXMLException(e.getMessage(), node);
}
}
}