/**
 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
 */

package net.sourceforge.pmd.util.filter;

/**
 * A logical AND of a list of Filters. This implementation is short circuiting.
 *
 * @param <T>
 *            The underlying type on which the filter applies.
 */
public class AndFilter<T> extends AbstractCompoundFilter<T> {

    public AndFilter() {
        super();
    }

    public AndFilter(Filter<T>... filters) {
        super(filters);
    }

    @Override
    public boolean filter(T obj) {
        boolean match = true;
        for (Filter<T> filter : filters) {
            if (!filter.filter(obj)) {
                match = false;
                break;
            }
        }
        return match;
    }

    @Override
    protected String getOperator() {
        return "and";
    }
}
