package tc.oc.pgm.filters.operator;
import tc.oc.pgm.filters.Filter;
import tc.oc.pgm.filters.query.IQuery;
/**
* Abstain if the child filter abstains, otherwise return the opposite of the child.
*/
public class InverseFilter extends SingleFilterFunction {
public InverseFilter(Filter filter) {
super(filter);
}
@Override
public String toString() {
return "Not{" + filter + "}";
}
@Override
public QueryResponse query(IQuery query) {
switch(this.filter.query(query)) {
case ALLOW: return QueryResponse.DENY;
case DENY: return QueryResponse.ALLOW;
default: return QueryResponse.ABSTAIN;
}
}
@Override
public Filter not() {
return filter;
}
}