View Javadoc

    1   package net.sourceforge.pmd.util.filter;
    2
    3   import java.util.ArrayList;
    4   import java.util.List;
    5
    6   /**
    7    * A base class for Filters which implements behavior using a List of other
    8    * Filters.
    9    *
    10   * @param <T>
    11   *            The underlying type on which the filter applies.
    12   */
    13  public abstract class AbstractCompoundFilter<T> implements Filter<T> {
    14
    15  	protected List<Filter<T>> filters;
    16
    17  	public AbstractCompoundFilter() {
    18  		filters = new ArrayList<Filter<T>>(2);
    19  	}
    20
    21  	public AbstractCompoundFilter(Filter<T>... filters) {
    22  		this.filters = new ArrayList<Filter<T>>(filters.length);
    23  		for (Filter<T> filter : filters) {
    24  			this.filters.add(filter);
    25  		}
    26  	}
    27
    28  	public List<Filter<T>> getFilters() {
    29  		return filters;
    30  	}
    31
    32  	public void setFilters(List<Filter<T>> filters) {
    33  		this.filters = filters;
    34  	}
    35
    36  	public void addFilter(Filter<T> filter) {
    37  		filters.add(filter);
    38  	}
    39
    40  	protected abstract String getOperator();
    41
    42  	public String toString() {
    43
    44  		if (filters.isEmpty()) { return "()"; }
    45
    46  		StringBuilder builder = new StringBuilder();
    47  		builder.append('(').append(filters.get(0));
    48
    49  		for (int i = 1; i < filters.size(); i++) {
    50  			builder.append(' ').append(getOperator()).append(' ');
    51  			builder.append(filters.get(i));
    52  		}
    53  		builder.append(')');
    54  		return builder.toString();
    55  	}
    56  }