This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git


The following commit(s) were added to refs/heads/master by this push:
     new 6803ac1  Only accumulate files and dirs accepted by the filter.
6803ac1 is described below

commit 6803ac145c274546d0f2e06374a9723a4d4d7ce6
Author: Gary Gregory <gardgreg...@gmail.com>
AuthorDate: Wed Oct 14 19:13:02 2020 -0400

    Only accumulate files and dirs accepted by the filter.
---
 pom.xml                                            |   8 +-
 .../commons/io/file/AccumulatorPathVisitor.java    |  37 ++++---
 .../commons/io/file/CountingPathVisitor.java       |  13 ++-
 .../commons/io/filefilter/NameFileFilterTest.java  | 114 +++++++++++++++++++++
 4 files changed, 148 insertions(+), 24 deletions(-)

diff --git a/pom.xml b/pom.xml
index 775a629..ddbff85 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,7 @@ file comparators, endian transformation classes, and much 
more.
     
<connection>scm:git:https://gitbox.apache.org/repos/asf/commons-io.git</connection>
     
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/commons-io.git</developerConnection>
     <url>https://gitbox.apache.org/repos/asf?p=commons-io.git</url>
-    <tag>commons-io-2.8.0</tag>
+    <tag>rel/commons-io-2.9.0</tag>
   </scm>
 
   <developers>
@@ -278,9 +278,9 @@ file comparators, endian transformation classes, and much 
more.
     <maven.compiler.target>1.8</maven.compiler.target>
     <commons.componentid>io</commons.componentid>
     <commons.module.name>org.apache.commons.io</commons.module.name>
-    <commons.rc.version>RC2</commons.rc.version>
-    <commons.bc.version>2.7</commons.bc.version>
-    <commons.release.version>2.8.0</commons.release.version>
+    <commons.rc.version>RC1</commons.rc.version>
+    <commons.bc.version>2.8.0</commons.bc.version>
+    <commons.release.version>2.9.0</commons.release.version>
     <commons.release.desc>(requires Java 8)</commons.release.desc>
     <commons.jira.id>IO</commons.jira.id>
     <commons.jira.pid>12310477</commons.jira.pid>
diff --git 
a/src/main/java/org/apache/commons/io/file/AccumulatorPathVisitor.java 
b/src/main/java/org/apache/commons/io/file/AccumulatorPathVisitor.java
index 7ff43f0..9673844 100644
--- a/src/main/java/org/apache/commons/io/file/AccumulatorPathVisitor.java
+++ b/src/main/java/org/apache/commons/io/file/AccumulatorPathVisitor.java
@@ -18,7 +18,6 @@
 package org.apache.commons.io.file;
 
 import java.io.IOException;
-import java.nio.file.FileVisitResult;
 import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.ArrayList;
@@ -70,34 +69,34 @@ public class AccumulatorPathVisitor extends 
CountingPathVisitor {
     }
 
     /**
-     * Creates a new instance configured with a long {@link PathCounters}.
+     * Creates a new instance configured with a BigInteger {@link 
PathCounters}.
      *
+     * @param pathFilter Filters files to accumulate and count.
      * @return a new instance configured with a long {@link PathCounters}.
+     * @since 2.9.0
      */
-    public static AccumulatorPathVisitor withLongCounters() {
-        return new AccumulatorPathVisitor(Counters.longPathCounters());
+    public static AccumulatorPathVisitor withBigIntegerCounters(final 
PathFilter pathFilter) {
+        return new AccumulatorPathVisitor(Counters.bigIntegerPathCounters(), 
pathFilter);
     }
 
     /**
      * Creates a new instance configured with a long {@link PathCounters}.
      *
-     * @param pathFilter Filters files to accumulate and count.
      * @return a new instance configured with a long {@link PathCounters}.
-     * @since 2.9.0
      */
-    public static AccumulatorPathVisitor withLongCounters(final PathFilter 
pathFilter) {
-        return new AccumulatorPathVisitor(Counters.longPathCounters(), 
pathFilter);
+    public static AccumulatorPathVisitor withLongCounters() {
+        return new AccumulatorPathVisitor(Counters.longPathCounters());
     }
 
     /**
-     * Creates a new instance configured with a BigInteger {@link 
PathCounters}.
+     * Creates a new instance configured with a long {@link PathCounters}.
      *
      * @param pathFilter Filters files to accumulate and count.
      * @return a new instance configured with a long {@link PathCounters}.
      * @since 2.9.0
      */
-    public static AccumulatorPathVisitor withBigIntegerCounters(final 
PathFilter pathFilter) {
-        return new AccumulatorPathVisitor(Counters.bigIntegerPathCounters(), 
pathFilter);
+    public static AccumulatorPathVisitor withLongCounters(final PathFilter 
pathFilter) {
+        return new AccumulatorPathVisitor(Counters.longPathCounters(), 
pathFilter);
     }
 
     private final List<Path> dirList = new ArrayList<>();
@@ -178,12 +177,6 @@ public class AccumulatorPathVisitor extends 
CountingPathVisitor {
         return result;
     }
 
-    @Override
-    public FileVisitResult postVisitDirectory(final Path dir, final 
IOException exc) throws IOException {
-        add(dirList, dir);
-        return super.postVisitDirectory(dir, exc);
-    }
-
     /**
      * Relativizes each directory path with {@link Path#relativize(Path)} 
against the given {@code parent}, optionally
      * sorting the result.
@@ -213,9 +206,15 @@ public class AccumulatorPathVisitor extends 
CountingPathVisitor {
     }
 
     @Override
-    public FileVisitResult visitFile(final Path file, final 
BasicFileAttributes attributes) throws IOException {
+    protected void updateDirCounter(final Path dir, final IOException exc) {
+        super.updateDirCounter(dir, exc);
+        add(dirList, dir);
+    }
+
+    @Override
+    protected void updateFileCounters(final Path file, final 
BasicFileAttributes attributes) {
+        super.updateFileCounters(file, attributes);
         add(fileList, file);
-        return super.visitFile(file, attributes);
     }
 
 }
diff --git a/src/main/java/org/apache/commons/io/file/CountingPathVisitor.java 
b/src/main/java/org/apache/commons/io/file/CountingPathVisitor.java
index a7125f5..c9c4185 100644
--- a/src/main/java/org/apache/commons/io/file/CountingPathVisitor.java
+++ b/src/main/java/org/apache/commons/io/file/CountingPathVisitor.java
@@ -108,7 +108,7 @@ public class CountingPathVisitor extends SimplePathVisitor {
 
     @Override
     public FileVisitResult postVisitDirectory(final Path dir, final 
IOException exc) throws IOException {
-        pathCounters.getDirectoryCounter().increment();
+        updateDirCounter(dir, exc);
         return FileVisitResult.CONTINUE;
     }
 
@@ -118,6 +118,17 @@ public class CountingPathVisitor extends SimplePathVisitor 
{
     }
 
     /**
+     * Updates the counter for visiting the given directory.
+     *
+     * @param dir the visited directory.
+     * @param exc Encountered exception.
+     * @since 2.9.0
+     */
+    protected void updateDirCounter(Path dir, IOException exc) {
+        pathCounters.getDirectoryCounter().increment();
+    }
+
+    /**
      * Updates the counters for visiting the given file.
      *
      * @param file the visited file.
diff --git 
a/src/test/java/org/apache/commons/io/filefilter/NameFileFilterTest.java 
b/src/test/java/org/apache/commons/io/filefilter/NameFileFilterTest.java
new file mode 100644
index 0000000..7424acd
--- /dev/null
+++ b/src/test/java/org/apache/commons/io/filefilter/NameFileFilterTest.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.io.filefilter;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
+
+import org.apache.commons.io.file.AccumulatorPathVisitor;
+import org.apache.commons.io.file.CounterAssertions;
+import org.apache.commons.io.file.Counters;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests {@link NameFileFilter}.
+ */
+public class NameFileFilterTest {
+
+    /**
+     * Javadoc example.
+     *
+     * System.out calls are commented out here but not in the Javadoc.
+     */
+    @Test
+    public void testJavadocExampleUsingIo() {
+        File dir = new File(".");
+        String[] files = dir.list(new NameFileFilter("NOTICE.txt"));
+        for (String file : files) {
+            // System.out.println(file);
+        }
+        // End of Javadoc example
+        assertEquals(1, files.length);
+    }
+
+    /**
+     * Javadoc example.
+     *
+     * System.out calls are commented out here but not in the Javadoc.
+     */
+    @Test
+    public void testJavadocExampleUsingNio() throws IOException {
+        final Path dir = Paths.get(".");
+        // We are interested in files older than one day
+        final AccumulatorPathVisitor visitor = AccumulatorPathVisitor
+            .withLongCounters(new NameFileFilter("NOTICE.txt"));
+        //
+        // Walk one dir
+        Files.walkFileTree(dir, Collections.emptySet(), 1, visitor);
+        // System.out.println(visitor.getPathCounters());
+        // System.out.println(visitor.getFileList());
+        // System.out.println(visitor.getDirList());
+        assertEquals(1, visitor.getPathCounters().getFileCounter().get());
+        assertEquals(1, visitor.getPathCounters().getDirectoryCounter().get());
+        assertTrue(visitor.getPathCounters().getByteCounter().get() > 0);
+        assertFalse(visitor.getDirList().isEmpty());
+        assertFalse(visitor.getFileList().isEmpty());
+        assertEquals(1, visitor.getFileList().size());
+        //
+        visitor.getPathCounters().reset();
+        //
+        // Walk dir tree
+        Files.walkFileTree(dir, visitor);
+        // System.out.println(visitor.getPathCounters());
+        // System.out.println(visitor.getDirList());
+        // System.out.println(visitor.getFileList());
+        //
+        // End of Javadoc example
+        assertTrue(visitor.getPathCounters().getFileCounter().get() > 0);
+        assertTrue(visitor.getPathCounters().getDirectoryCounter().get() > 0);
+        assertTrue(visitor.getPathCounters().getByteCounter().get() > 0);
+        // We counted and accumulated
+        assertFalse(visitor.getDirList().isEmpty());
+        assertFalse(visitor.getFileList().isEmpty());
+        //
+        assertNotEquals(Counters.noopPathCounters(), 
visitor.getPathCounters());
+        visitor.getPathCounters().reset();
+        CounterAssertions.assertZeroCounters(visitor.getPathCounters());
+    }
+
+    @Test
+    public void testNoCounting() throws IOException {
+        final Path dir = Paths.get(".");
+        final AccumulatorPathVisitor visitor = new 
AccumulatorPathVisitor(Counters.noopPathCounters(),
+            new NameFileFilter("NOTICE.txt"));
+        Files.walkFileTree(dir, Collections.emptySet(), 1, visitor);
+        //
+        CounterAssertions.assertZeroCounters(visitor.getPathCounters());
+        // We did not count, but we still accumulated
+        assertFalse(visitor.getDirList().isEmpty());
+        assertFalse(visitor.getFileList().isEmpty());
+    }
+}

Reply via email to