1 package net.sourceforge.pmd.util.filter;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6
7
8
9
10
11
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 }