You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2007/10/12 23:31:07 UTC
svn commit: r584278 - in /commons/proper/io/trunk: ./
src/java/org/apache/commons/io/filefilter/
src/test/org/apache/commons/io/filefilter/
Author: niallp
Date: Fri Oct 12 14:30:52 2007
New Revision: 584278
URL: http://svn.apache.org/viewvc?rev=584278&view=rev
Log:
IO-74 Refactor RegexFilter - add ability to construct instances with either pattern flags or case sensitivity. Also simplify by removing the array/list of String patterns constructors since adding all variants with flags/case sensitivity would be cumbersome and also the logic is limited to "OR" and some users may want "AND" - AND/OR logic can be achieved by combining RegexFilter instances using the AndFileFilter and OrFileFilter implementations.
Modified:
commons/proper/io/trunk/RELEASE-NOTES.txt
commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/FileFilterUtils.java
commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/RegexFilter.java
commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java
Modified: commons/proper/io/trunk/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/RELEASE-NOTES.txt?rev=584278&r1=584277&r2=584278&view=diff
==============================================================================
--- commons/proper/io/trunk/RELEASE-NOTES.txt (original)
+++ commons/proper/io/trunk/RELEASE-NOTES.txt Fri Oct 12 14:30:52 2007
@@ -38,6 +38,8 @@
- SuffixFileFilter [IO-126]
- Add faciltiy to specify case sensitivty on suffix matching
+- RegexFilter [IO-74]
+ - Add new regular expression file filter implementation
Feedback
--------
Modified: commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/FileFilterUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/FileFilterUtils.java?rev=584278&r1=584277&r2=584278&view=diff
==============================================================================
--- commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/FileFilterUtils.java (original)
+++ commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/FileFilterUtils.java Fri Oct 12 14:30:52 2007
@@ -20,6 +20,7 @@
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.util.Date;
+import org.apache.commons.io.IOCase;
/**
* Useful utilities for working with file filters. It provides access to all
@@ -278,6 +279,43 @@
IOFileFilter minimumFilter = new SizeFileFilter(minSizeInclusive, true);
IOFileFilter maximumFilter = new SizeFileFilter(maxSizeInclusive + 1L, false);
return new AndFileFilter(minimumFilter, maximumFilter);
+ }
+
+ /**
+ * Returns a filter that uses a regular expression to filter file names.
+ *
+ * @param pattern the regular expression pattern
+ * @return an appropriately configured IOFileFilter
+ * @since Commons IO 1.4
+ */
+ public static IOFileFilter regex(String pattern) {
+ return new RegexFilter(pattern);
+ }
+
+ /**
+ * Returns a filter that uses a regular expression to filter file names with
+ * the specified case sensitivity.
+ *
+ * @param pattern the regular expression pattern
+ * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
+ * @return an appropriately configured IOFileFilter
+ * @since Commons IO 1.4
+ */
+ public static IOFileFilter regex(String pattern, IOCase caseSensitivity) {
+ return new RegexFilter(pattern, caseSensitivity);
+ }
+
+ /**
+ * Returns a filter that uses a regular expression to filter file names with
+ * the specified flags.
+ *
+ * @param pattern the regular expression pattern
+ * @param flags pattern flags (e.g. {@link java.util.regex.Pattern#CASE_INSENSITIVE})
+ * @return an appropriately configured IOFileFilter
+ * @since Commons IO 1.4
+ */
+ public static IOFileFilter regex(String pattern, int flags) {
+ return new RegexFilter(pattern, flags);
}
//-----------------------------------------------------------------------
Modified: commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/RegexFilter.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/RegexFilter.java?rev=584278&r1=584277&r2=584278&view=diff
==============================================================================
--- commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/RegexFilter.java (original)
+++ commons/proper/io/trunk/src/java/org/apache/commons/io/filefilter/RegexFilter.java Fri Oct 12 14:30:52 2007
@@ -17,9 +17,8 @@
package org.apache.commons.io.filefilter;
import java.io.File;
-import java.util.Iterator;
-import java.util.List;
import java.util.regex.Pattern;
+import org.apache.commons.io.IOCase;
/**
* Filters files using supplied regular expression(s).
@@ -44,11 +43,11 @@
*/
public class RegexFilter extends AbstractFileFilter {
- /** The regular expression patterns that will be used to match filenames */
- private Pattern[] patterns = null;
+ /** The regular expression pattern that will be used to match filenames */
+ private Pattern pattern;
/**
- * Construct a new regular expression filter for a single regular expression
+ * Construct a new regular expression filter.
*
* @param pattern regular string expression to match
* @throws IllegalArgumentException if the pattern is null
@@ -58,80 +57,53 @@
throw new java.lang.IllegalArgumentException();
}
- patterns = new Pattern[] { Pattern.compile(pattern) };
+ this.pattern = Pattern.compile(pattern);
}
/**
- * Construct a new regular expression filter for a single regular expression
+ * Construct a new regular expression filter with the specified flags case sensitivity.
*
- * @param pattern regular expression to match
+ * @param pattern regular string expression to match
+ * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
* @throws IllegalArgumentException if the pattern is null
*/
- public RegexFilter(Pattern pattern) {
+ public RegexFilter(String pattern, IOCase caseSensitivity) {
if (pattern == null) {
throw new java.lang.IllegalArgumentException();
}
-
- patterns = new Pattern[] { pattern };
- }
-
- /**
- * Construct a new regular expression filter for an array of regular expressions
- *
- * @param patterns regular expression strings to match
- * @throws IllegalArgumentException if the pattern array is null
- */
- public RegexFilter(String[] patterns) {
- if (patterns == null) {
- throw new java.lang.IllegalArgumentException();
- }
-
- this.patterns = new Pattern[patterns.length];
- for (int i = 0; i < patterns.length; i++) {
- this.patterns[i] = Pattern.compile(patterns[i]);
+ int flags = 0;
+ if (caseSensitivity != null && !caseSensitivity.isCaseSensitive()) {
+ flags = Pattern.CASE_INSENSITIVE;
}
+ this.pattern = Pattern.compile(pattern, flags);
}
/**
- * Construct a new regular expression filter for an array of regular expressions
+ * Construct a new regular expression filter with the specified flags.
*
- * @param patterns regular expression to match
- * @throws IllegalArgumentException if the pattern array is null
+ * @param pattern regular string expression to match
+ * @param flags pattern flags - e.g. {@link Pattern#CASE_INSENSITIVE}
+ * @throws IllegalArgumentException if the pattern is null
*/
- public RegexFilter(Pattern[] patterns) {
- if (patterns == null) {
+ public RegexFilter(String pattern, int flags) {
+ if (pattern == null) {
throw new java.lang.IllegalArgumentException();
}
-
- this.patterns = patterns;
+ this.pattern = Pattern.compile(pattern, flags);
}
/**
- * Construct a new regular expression filter for a list of regular expressions
+ * Construct a new regular expression filter for a compiled regular expression
*
- * @param patterns list of regular expressions (either list of type
- * <code>java.lang.String</code> or of type
- * <code>java.util.regex.Pattern</code>) to match
- * @throws IllegalArgumentException if the pattern list is null
- * @throws ClassCastException if the list does not contain Strings
+ * @param pattern regular expression to match
+ * @throws IllegalArgumentException if the pattern is null
*/
- public RegexFilter(List patterns) {
- if (patterns == null) {
+ public RegexFilter(Pattern pattern) {
+ if (pattern == null) {
throw new java.lang.IllegalArgumentException();
}
- if (patterns.size() == 0)
- return;
-
- this.patterns = new Pattern[patterns.size()];
-
- int i = 0;
- for (Iterator it = patterns.iterator(); it.hasNext(); i++) {
- Object pattern = it.next();
- this.patterns[i] = (pattern instanceof Pattern)
- ? (Pattern)pattern
- : Pattern.compile(pattern.toString());
- }
+ this.pattern = pattern;
}
/**
@@ -142,37 +114,7 @@
* @return true if the filename matches one of the regular expressions
*/
public boolean accept(File dir, String name) {
- if (dir != null && new File(dir, name).isDirectory()) {
- return false;
- }
-
- for (int i = 0; i < patterns.length; i++) {
- if (patterns[i].matcher(name).matches()) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Checks to see if the filename matches one of the regular expressions.
- *
- * @param file the file to check
- * @return true if the filename matches one of the regular expressions
- */
- public boolean accept(File file) {
- if (file.isDirectory()) {
- return false;
- }
-
- for (int i = 0; i < patterns.length; i++) {
- if (patterns[i].matcher(file.getName()).matches()) {
- return true;
- }
- }
-
- return false;
+ return (pattern.matcher(name).matches());
}
}
Modified: commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java?rev=584278&r1=584277&r2=584278&view=diff
==============================================================================
--- commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java (original)
+++ commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java Fri Oct 12 14:30:52 2007
@@ -823,12 +823,12 @@
}
public void testRegex() throws Exception {
- IOFileFilter filter = new RegexFilter("^.*[tT]est(-\\d+)?\\.java$");
+ IOFileFilter filter = FileFilterUtils.regex("^.*[tT]est(-\\d+)?\\.java$");
assertFiltering(filter, new File("Test.java"), true);
assertFiltering(filter, new File("test-10.java"), true);
assertFiltering(filter, new File("test-.java"), false);
- filter = new RegexFilter("^[Tt]est.java$");
+ filter = FileFilterUtils.regex("^[Tt]est.java$");
assertFiltering(filter, new File("Test.java"), true);
assertFiltering(filter, new File("test.java"), true);
assertFiltering(filter, new File("tEST.java"), false);
@@ -838,57 +838,15 @@
assertFiltering(filter, new File("test.java"), true);
assertFiltering(filter, new File("tEST.java"), true);
- filter = new RegexFilter(new String[] { "^Test.java$", "^test.java$" });
- assertFiltering(filter, new File("Test.java"), true);
- assertFiltering(filter, new File("test.java"), true);
- assertFiltering(filter, new File("tEST.java"), false);
-
- filter = new RegexFilter(new Pattern[] {
- Pattern.compile("^test.java$", Pattern.CASE_INSENSITIVE), Pattern.compile("^test2.java$") }
- );
- assertFiltering(filter, new File("Test.java"), true);
- assertFiltering(filter, new File("test.java"), true);
- assertFiltering(filter, new File("tEST.java"), true);
- assertFiltering(filter, new File("test2.java"), true);
- assertFiltering(filter, new File("Test2.java"), false);
-
- List filterList = Arrays.asList(new String[] { "^Test.java$", "^test.java$" });
- filter = new RegexFilter(filterList);
- assertFiltering(filter, new File("Test.java"), true);
- assertFiltering(filter, new File("test.java"), true);
- assertFiltering(filter, new File("tEST.java"), false);
-
- filterList = Arrays.asList(new Pattern[] {
- Pattern.compile("^test.java$", Pattern.CASE_INSENSITIVE), Pattern.compile("^test2.java$") }
- );
- filter = new RegexFilter(filterList);
+ filter = FileFilterUtils.regex("^test.java$", Pattern.CASE_INSENSITIVE);
assertFiltering(filter, new File("Test.java"), true);
assertFiltering(filter, new File("test.java"), true);
assertFiltering(filter, new File("tEST.java"), true);
- assertFiltering(filter, new File("test2.java"), true);
- assertFiltering(filter, new File("Test2.java"), false);
- filterList = new ArrayList();
- filterList.add(Pattern.compile("^test.java$", Pattern.CASE_INSENSITIVE));
- filterList.add("^test2.java$");
- filter = new RegexFilter(filterList);
+ filter = FileFilterUtils.regex("^test.java$", IOCase.INSENSITIVE);
assertFiltering(filter, new File("Test.java"), true);
assertFiltering(filter, new File("test.java"), true);
assertFiltering(filter, new File("tEST.java"), true);
- assertFiltering(filter, new File("test2.java"), true);
- assertFiltering(filter, new File("Test2.java"), false);
-
- assertTrue(filter.accept(new File("Test.java")));
- assertTrue(filter.accept(new File("test.java")));
- assertTrue(filter.accept(new File("tEST.java")));
- assertTrue(filter.accept(new File("test2.java")));
- assertFalse(filter.accept(new File("Test2.java")));
-
- assertTrue(filter.accept(new File("Test.java").getParentFile(), new File("Test.java").getName()));
- assertTrue(filter.accept(new File("test.java").getParentFile(), new File("test.java").getName()));
- assertTrue(filter.accept(new File("tEST.java").getParentFile(), new File("tEST.java").getName()));
- assertTrue(filter.accept(new File("test2.java").getParentFile(), new File("test2.java").getName()));
- assertFalse(filter.accept(new File("Test2.java").getParentFile(), new File("Test2.java").getName()));
}
//-----------------------------------------------------------------------