Skip to content

Commit 6e2f0e8

Browse files
author
Niall Pemberton
committed
IO-229 FileFilterUtils - add varargs methods for AndFileFilter and OrFileFilter - thanks to Michael Wooten
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/io/trunk@1002394 13f79535-47bb-0310-9956-ffa450edef68
1 parent 57686b6 commit 6e2f0e8

2 files changed

Lines changed: 73 additions & 0 deletions

File tree

src/java/org/apache/commons/io/filefilter/FileFilterUtils.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import java.io.File;
2020
import java.io.FileFilter;
2121
import java.io.FilenameFilter;
22+
import java.util.ArrayList;
2223
import java.util.Date;
24+
import java.util.List;
2325

2426
import org.apache.commons.io.IOCase;
2527

@@ -136,6 +138,7 @@ public static IOFileFilter fileFileFilter() {
136138
* @param filter1 the first filter
137139
* @param filter2 the second filter
138140
* @return a filter that ANDs the two specified filters
141+
* @deprecated use {@link #and(IOFileFilter...)}
139142
*/
140143
public static IOFileFilter andFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
141144
return new AndFileFilter(filter1, filter2);
@@ -147,11 +150,63 @@ public static IOFileFilter andFileFilter(IOFileFilter filter1, IOFileFilter filt
147150
* @param filter1 the first filter
148151
* @param filter2 the second filter
149152
* @return a filter that ORs the two specified filters
153+
* @deprecated use {@link #or(IOFileFilter...)}
150154
*/
151155
public static IOFileFilter orFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
152156
return new OrFileFilter(filter1, filter2);
153157
}
154158

159+
/**
160+
* Returns a filter that ANDs the specified filters.
161+
*
162+
* @param filters the IOFileFilters that will be ANDed together.
163+
* @return a filter that ANDs the specified filters
164+
*
165+
* @throws IllegalArgumentException if the filters are null or contain a
166+
* null value.
167+
* @since Commons IO 2.0
168+
*/
169+
public static IOFileFilter and(IOFileFilter... filters) {
170+
return new AndFileFilter(toList(filters));
171+
}
172+
173+
/**
174+
* Returns a filter that ORs the specified filters.
175+
*
176+
* @param filters the IOFileFilters that will be ORed together.
177+
* @return a filter that ORs the specified filters
178+
*
179+
* @throws IllegalArgumentException if the filters are null or contain a
180+
* null value.
181+
* @since Commons IO 2.0
182+
*/
183+
public static IOFileFilter or(IOFileFilter... filters) {
184+
return new OrFileFilter(toList(filters));
185+
}
186+
187+
/**
188+
* Create a List of file filters.
189+
*
190+
* @param filters The file filters
191+
* @return The list of file filters
192+
* @throws IllegalArgumentException if the filters are null or contain a
193+
* null value.
194+
* @since Commons IO 2.0
195+
*/
196+
public static List<IOFileFilter> toList(IOFileFilter... filters) {
197+
if (filters == null) {
198+
throw new IllegalArgumentException("The filters must not be null");
199+
}
200+
List<IOFileFilter> list = new ArrayList<IOFileFilter>(filters.length);
201+
for (int i = 0; i < filters.length; i++) {
202+
if (filters[i] == null) {
203+
throw new IllegalArgumentException("The filter[" + i + "] is null");
204+
}
205+
list.add(filters[i]);
206+
}
207+
return list;
208+
}
209+
155210
/**
156211
* Returns a filter that NOTs the specified filter.
157212
*

src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,24 @@ public void testOr() throws Exception {
482482
OrFileFilter f = new OrFileFilter((List<IOFileFilter>) null);
483483
assertEquals(true, f.getFileFilters().isEmpty());
484484
}
485+
public void testFileFilterUtils_and() throws Exception {
486+
IOFileFilter trueFilter = TrueFileFilter.INSTANCE;
487+
IOFileFilter falseFilter = FalseFileFilter.INSTANCE;
488+
assertFiltering(FileFilterUtils.and(trueFilter, trueFilter, trueFilter), new File("foo.test"), true);
489+
assertFiltering(FileFilterUtils.and(trueFilter, falseFilter, trueFilter), new File("foo.test"), false);
490+
assertFiltering(FileFilterUtils.and(falseFilter, trueFilter), new File("foo.test"), false);
491+
assertFiltering(FileFilterUtils.and(falseFilter, falseFilter), new File("foo.test"), false);
492+
}
493+
494+
public void testFileFilterUtils_or() throws Exception {
495+
IOFileFilter trueFilter = TrueFileFilter.INSTANCE;
496+
IOFileFilter falseFilter = FalseFileFilter.INSTANCE;
497+
File testFile = new File( "foo.test" );
498+
assertFiltering(FileFilterUtils.or(trueFilter, trueFilter), testFile, true);
499+
assertFiltering(FileFilterUtils.or(trueFilter, trueFilter, falseFilter), testFile, true);
500+
assertFiltering(FileFilterUtils.or(falseFilter, trueFilter), testFile, true);
501+
assertFiltering(FileFilterUtils.or(falseFilter, falseFilter, falseFilter), testFile, false);
502+
}
485503

486504
@SuppressWarnings("deprecation")
487505
public void testDeprecatedWildcard() throws Exception {

0 commit comments

Comments
 (0)