/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.util.filter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* A base class for Filters which implements behavior using a List of other
* Filters.
*
* @param <T>
* The underlying type on which the filter applies.
*/
public abstract class AbstractCompoundFilter<T> implements Filter<T> {
protected List<Filter<T>> filters;
public AbstractCompoundFilter() {
filters = new ArrayList<>(2);
}
public AbstractCompoundFilter(Filter<T>... filters) {
this.filters = Arrays.asList(filters);
}
public List<Filter<T>> getFilters() {
return filters;
}
public void setFilters(List<Filter<T>> filters) {
this.filters = filters;
}
public void addFilter(Filter<T> filter) {
filters.add(filter);
}
protected abstract String getOperator();
@Override
public String toString() {
if (filters.isEmpty()) {
return "()";
}
StringBuilder builder = new StringBuilder();
builder.append('(').append(filters.get(0));
for (int i = 1; i < filters.size(); i++) {
builder.append(' ').append(getOperator()).append(' ');
builder.append(filters.get(i));
}
builder.append(')');
return builder.toString();
}
}