1
2
3
4 package net.sourceforge.pmd.util.filter;
5
6 import java.io.File;
7 import java.io.FilenameFilter;
8 import java.util.ArrayList;
9 import java.util.Collection;
10 import java.util.List;
11
12
13
14
15
16 public class Filters {
17
18
19
20
21
22
23
24
25 public static <T> List<T> filter(Filter<T> filter, Collection<T> collection) {
26 List<T> list = new ArrayList<T>();
27 for (T obj : collection) {
28 if (filter.filter(obj)) {
29 list.add(obj);
30 }
31 }
32 return list;
33 }
34
35
36
37
38
39
40 public static Filter<File> getFileExtensionFilter(String... extensions) {
41 return new FileExtensionFilter(extensions);
42 }
43
44
45
46
47
48 public static Filter<File> getDirectoryFilter() {
49 return DirectoryFilter.INSTANCE;
50 }
51
52
53
54
55
56
57 public static Filter<File> getFileExtensionOrDirectoryFilter(String... extensions) {
58 return new OrFilter<File>(getFileExtensionFilter(extensions), getDirectoryFilter());
59 }
60
61
62
63
64
65
66
67
68
69
70 public static Filter<File> toNormalizedFileFilter(final Filter<String> filter) {
71 return new Filter<File>() {
72 public boolean filter(File file) {
73 String path = file.getPath();
74 path = path.replace('\\', '/');
75 return filter.filter(path);
76 }
77
78 public String toString() {
79 return filter.toString();
80 }
81 };
82 }
83
84
85
86
87
88
89
90
91
92 public static <T> Filter<T> fromStringFilter(final Filter<String> filter) {
93 return new Filter<T>() {
94 public boolean filter(T obj) {
95 return filter.filter(obj.toString());
96 }
97
98 public String toString() {
99 return filter.toString();
100 }
101 };
102 }
103
104
105
106
107
108
109 public static FilenameFilter toFilenameFilter(final Filter<File> filter) {
110 return new FilenameFilter() {
111 public boolean accept(File dir, String name) {
112 return filter.filter(new File(dir, name));
113 }
114
115 public String toString() {
116 return filter.toString();
117 }
118 };
119 }
120
121
122
123
124
125
126 public static Filter<File> toFileFilter(final FilenameFilter filter) {
127 return new Filter<File>() {
128 public boolean filter(File file) {
129 return filter.accept(file.getParentFile(), file.getName());
130 }
131
132 public String toString() {
133 return filter.toString();
134 }
135 };
136 }
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 public static Filter<String> buildRegexFilterExcludeOverInclude(List<String> includeRegexes,
152 List<String> excludeRegexes) {
153 OrFilter<String> includeFilter = new OrFilter<String>();
154 if (includeRegexes == null || includeRegexes.isEmpty()) {
155 includeFilter.addFilter(new RegexStringFilter(".*"));
156 } else {
157 for (String includeRegex : includeRegexes) {
158 includeFilter.addFilter(new RegexStringFilter(includeRegex));
159 }
160 }
161
162 OrFilter<String> excludeFilter = new OrFilter<String>();
163 if (excludeRegexes != null) {
164 for (String excludeRegex : excludeRegexes) {
165 excludeFilter.addFilter(new RegexStringFilter(excludeRegex));
166 }
167 }
168
169 return new AndFilter<String>(includeFilter, new NotFilter<String>(excludeFilter));
170 }
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185 public static Filter<String> buildRegexFilterIncludeOverExclude(List<String> includeRegexes,
186 List<String> excludeRegexes) {
187 OrFilter<String> includeFilter = new OrFilter<String>();
188 if (includeRegexes != null) {
189 for (String includeRegex : includeRegexes) {
190 includeFilter.addFilter(new RegexStringFilter(includeRegex));
191 }
192 }
193
194 OrFilter<String> excludeFilter = new OrFilter<String>();
195 if (excludeRegexes != null) {
196 for (String excludeRegex : excludeRegexes) {
197 excludeFilter.addFilter(new RegexStringFilter(excludeRegex));
198 }
199 }
200
201 return new OrFilter<String>(includeFilter, new NotFilter<String>(excludeFilter));
202 }
203 }