From 5e238665d008f99db4766ffba882d306b20d0fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Boutemy?= Date: Sun, 25 Aug 2019 19:49:55 +0200 Subject: [PATCH] #70 added filename comparator to Scanner and DirectoryScanner --- pom.xml | 2 +- .../org/codehaus/plexus/util/AbstractScanner.java | 12 ++++++++++++ .../org/codehaus/plexus/util/DirectoryScanner.java | 6 ++++++ src/main/java/org/codehaus/plexus/util/Scanner.java | 9 +++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3b71de75..da66eeb5 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ limitations under the License. plexus-utils - 3.2.2-SNAPSHOT + 3.3.0-SNAPSHOT Plexus Common Utilities A collection of various utility classes to ease working with strings, files, command lines, XML and diff --git a/src/main/java/org/codehaus/plexus/util/AbstractScanner.java b/src/main/java/org/codehaus/plexus/util/AbstractScanner.java index 02486288..e3b2ba6e 100644 --- a/src/main/java/org/codehaus/plexus/util/AbstractScanner.java +++ b/src/main/java/org/codehaus/plexus/util/AbstractScanner.java @@ -18,6 +18,7 @@ import java.io.File; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; /** @@ -119,6 +120,11 @@ public abstract class AbstractScanner */ protected boolean isCaseSensitive = true; + /** + * @since 3.3.0 + */ + protected Comparator filenameComparator; + /** * Sets whether or not the file system should be regarded as case sensitive. * @@ -390,4 +396,10 @@ protected void setupMatchPatterns() includesPatterns = MatchPatterns.from( includes ); excludesPatterns = MatchPatterns.from( excludes ); } + + @Override + public void setFilenameComparator( Comparator filenameComparator ) + { + this.filenameComparator = filenameComparator; + } } diff --git a/src/main/java/org/codehaus/plexus/util/DirectoryScanner.java b/src/main/java/org/codehaus/plexus/util/DirectoryScanner.java index ea3e4b65..af118472 100644 --- a/src/main/java/org/codehaus/plexus/util/DirectoryScanner.java +++ b/src/main/java/org/codehaus/plexus/util/DirectoryScanner.java @@ -57,6 +57,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Vector; /** @@ -436,6 +437,11 @@ protected void scandir( File dir, String vpath, boolean fast ) newfiles = noLinks.toArray( new String[noLinks.size()] ); } + if ( filenameComparator != null ) + { + Arrays.sort( newfiles, filenameComparator ); + } + for ( String newfile : newfiles ) { String name = vpath + newfile; diff --git a/src/main/java/org/codehaus/plexus/util/Scanner.java b/src/main/java/org/codehaus/plexus/util/Scanner.java index 4c693e0f..14af3a9d 100644 --- a/src/main/java/org/codehaus/plexus/util/Scanner.java +++ b/src/main/java/org/codehaus/plexus/util/Scanner.java @@ -17,6 +17,7 @@ */ import java.io.File; +import java.util.Comparator; /** * Scan a directory tree for files, with specified inclusions and exclusions. @@ -83,4 +84,12 @@ public interface Scanner * @return the base directory to be scanned */ File getBasedir(); + + /** + * Use a filename comparator in each directory when scanning. + * + * @param filenameComparator + * @since 3.3.0 + */ + void setFilenameComparator( Comparator filenameComparator ); }