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