You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2021/11/26 17:10:03 UTC

[commons-vfs] branch master updated (2911ed0 -> 41669f2)

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

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


    from 2911ed0  [VFS-793] GenericFileName.getURI() returns invalid URI.
     new b4d682f  Misc clean ups.
     new 3655a83  Sort.
     new c7d0f30  Drop old in-line comment.
     new ebb0d40  Javadoc.
     new 4d5d5ab  Sort members.
     new 1489c55  Fix typos in error messages.
     new 1a92b8c  LocalFile: Fix exception message "Unknown message with code" and use an actual message code.
     new 86b6583  Add DefaultFileMonitor.setDelay(Duration), getDelayDuration() and deprecate setDelay(long), getDelay().
     new d72a9d4  Better internal name.
     new 63c6912  Make starting and stopping a DefaultFileMonitor safer to use from multiple threads.
     new e35ecd9  DefaultFileMonitor implements AutoCloseable.
     new 421665f  Don't use deprecated API.
     new 99bfd2b  Reimplement test using an atomic reference instead of a volatile.
     new 851c0fa  Flip tests.
     new 4d37b32  Write test fixture in one JRE API call.
     new 41669f2  Attempt to fix random failures in DefaultFileMonitorTest, specifically in testFileCreated().

The 16 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 commons-vfs2-distribution/pom.xml                  |   2 +-
 commons-vfs2-examples/pom.xml                      |   2 +-
 .../org/apache/commons/vfs2/example/Shell.java     |   2 +-
 commons-vfs2-jackrabbit1/pom.xml                   |   2 +-
 .../vfs2/provider/webdav/WebdavFileObject.java     |   4 +-
 .../vfs2/provider/webdav/WebdavFileProvider.java   |   2 +-
 .../webdav/test/WebdavProviderTestCase.java        |   8 +-
 commons-vfs2-jackrabbit2/pom.xml                   |   2 +-
 .../vfs2/provider/webdav4/Webdav4FileObject.java   |   4 +-
 .../vfs2/provider/webdav4/Webdav4FileProvider.java |   2 +-
 .../webdav4/test/Webdav4ProviderTestCase.java      |   6 +-
 commons-vfs2-sandbox/pom.xml                       |   2 +-
 commons-vfs2/pom.xml                               |   2 +-
 .../java/org/apache/commons/vfs2/FileName.java     |   2 +-
 .../java/org/apache/commons/vfs2/FileObject.java   |   2 +-
 .../commons/vfs2/FileSystemConfigBuilder.java      |   4 +-
 .../commons/vfs2/impl/DefaultFileMonitor.java      | 595 +++++++++++----------
 .../commons/vfs2/impl/DefaultFileReplicator.java   |   2 +-
 .../vfs2/operations/FileOperationProvider.java     |   2 +-
 .../commons/vfs2/provider/AbstractFileName.java    |   8 +-
 .../vfs2/provider/AbstractFileProvider.java        |   2 +-
 .../commons/vfs2/provider/AbstractFileSystem.java  |   2 +-
 .../commons/vfs2/provider/DefaultFileContent.java  |   2 +-
 .../org/apache/commons/vfs2/provider/RFC2396.java  |   2 +-
 .../commons/vfs2/provider/ftp/FtpFileProvider.java |   2 +-
 .../vfs2/provider/http/HttpFileProvider.java       |   4 +-
 .../vfs2/provider/http4/Http4FileProvider.java     |  10 +-
 .../vfs2/provider/http5/Http5FileProvider.java     |  10 +-
 .../commons/vfs2/provider/local/LocalFile.java     |   6 +-
 .../vfs2/provider/sftp/SftpFileProvider.java       |   2 +-
 .../provider/sftp/SftpFileSystemConfigBuilder.java |   4 +-
 .../vfs2/provider/tar/Tbz2FileProvider.java        |   2 +-
 .../commons/vfs2/provider/tar/TgzFileProvider.java |   2 +-
 .../org/apache/commons/vfs2/tasks/DeleteTask.java  |   2 +-
 .../commons/vfs2/util/CombinedResources.java       |   2 +-
 .../main/java/org/apache/commons/vfs2/util/Os.java |   2 +-
 .../org/apache/commons/vfs2/util/OsFamily.java     |   2 +-
 .../commons/vfs2/util/WeakRefFileListener.java     |  15 +-
 .../org/apache/commons/vfs2/Resources.properties   |  14 +-
 .../org/apache/commons/vfs2/AbstractTestSuite.java |   4 +-
 .../vfs2/FileObjectEscapeCharacterInPathTest.java  |  14 +-
 .../apache/commons/vfs2/ProviderDeleteTests.java   |   2 +-
 .../test/java/org/apache/commons/vfs2/RunTest.java |   2 +-
 .../commons/vfs2/impl/DefaultFileMonitorTest.java  | 202 ++++---
 .../vfs2/impl/DefaultFileSystemManagerTest.java    |   4 +-
 .../commons/vfs2/impl/VfsClassLoaderTests.java     |   4 +-
 .../vfs2/provider/local/WindowsFileNameTests.java  |   4 +-
 .../vfs2/provider/ram/CustomRamProviderTest.java   |   2 +-
 .../DelegatingFileSystemOptionsBuilderTest.java    |   4 +-
 pom.xml                                            |   2 +-
 src/changes/changes.xml                            |  12 +
 51 files changed, 512 insertions(+), 486 deletions(-)

[commons-vfs] 13/16: Reimplement test using an atomic reference instead of a volatile.

Posted by gg...@apache.org.
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-vfs.git

commit 99bfd2b6da9271259a477e1e38fc7690915944c0
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 11:26:44 2021 -0500

    Reimplement test using an atomic reference instead of a volatile.
---
 .../commons/vfs2/impl/DefaultFileMonitorTest.java  | 33 ++++++++++++----------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
index e0a745e..6418703 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
@@ -17,6 +17,8 @@
 package org.apache.commons.vfs2.impl;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.BufferedWriter;
@@ -24,6 +26,7 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.commons.vfs2.AbstractVfsTestCase;
 import org.apache.commons.vfs2.FileChangeEvent;
@@ -70,17 +73,17 @@ public class DefaultFileMonitorTest {
 
         @Override
         public void fileChanged(final FileChangeEvent event) throws Exception {
-            status = Status.CHANGED;
+            status.set(Status.CHANGED);
         }
 
         @Override
         public void fileCreated(final FileChangeEvent event) throws Exception {
-            status = Status.CREATED;
+            status.set(Status.CREATED);
         }
 
         @Override
         public void fileDeleted(final FileChangeEvent event) throws Exception {
-            status = Status.DELETED;
+            status.set(Status.DELETED);
         }
     }
 
@@ -88,7 +91,7 @@ public class DefaultFileMonitorTest {
 
     private FileSystemManager fileSystemManager;
 
-    private volatile Status status;
+    private final AtomicReference<Status> status = new AtomicReference<>();
 
     private File testDir;
 
@@ -171,7 +174,7 @@ public class DefaultFileMonitorTest {
     public void setUp() throws Exception {
         fileSystemManager = VFS.getManager();
         testDir = AbstractVfsTestCase.getTestDirectoryFile();
-        status = null;
+        status.set(null);
         testFile = new File(testDir, "testReload.properties");
         deleteTestFileIfPresent();
     }
@@ -190,11 +193,11 @@ public class DefaultFileMonitorTest {
                 monitor.setRecursive(false);
                 monitor.addFile(fileObject);
                 monitor.start();
-                status = null;
+                status.set(null);
                 Thread.sleep(DELAY_MILLIS * 5);
                 testFile.delete();
                 Thread.sleep(DELAY_MILLIS * 30);
-                assertEquals("Event should not have occurred", null, status);
+                assertNull("Event should not have occurred", status.get());
             }
         }
     }
@@ -208,11 +211,11 @@ public class DefaultFileMonitorTest {
                 monitor.setRecursive(true);
                 monitor.addFile(fileObj);
                 monitor.start();
-                status = null;
+                status.set(null);
                 Thread.sleep(DELAY_MILLIS * 5);
                 testFile.delete();
                 waitFor(Status.DELETED, DELAY_MILLIS * 30);
-                status = null;
+                status.set(null);
                 Thread.sleep(DELAY_MILLIS * 5);
                 writeToFile(testFile);
                 waitFor(Status.CREATED, DELAY_MILLIS * 30);
@@ -306,10 +309,10 @@ public class DefaultFileMonitorTest {
                 monitor.start();
                 writeToFile(testFile);
                 waitFor(Status.CREATED, DELAY_MILLIS * 10);
-                status = null;
+                status.set(null);
                 testFile.delete();
                 waitFor(Status.DELETED, DELAY_MILLIS * 10);
-                status = null;
+                status.set(null);
                 Thread.sleep(DELAY_MILLIS * 5);
                 monitor.addFile(fileObject);
                 writeToFile(testFile);
@@ -319,7 +322,7 @@ public class DefaultFileMonitorTest {
     }
 
     private void waitFor(final Status expected, final long timeoutMillis) throws InterruptedException {
-        if (expected == status) {
+        if (expected == status.get()) {
             return;
         }
         long remaining = timeoutMillis;
@@ -327,12 +330,12 @@ public class DefaultFileMonitorTest {
         while (remaining > 0) {
             Thread.sleep(interval);
             remaining -= interval;
-            if (expected == status) {
+            if (expected == status.get()) {
                 return;
             }
         }
-        assertTrue("No event occurred", status != null);
-        assertEquals("Incorrect event " + status, expected, status);
+        assertNotNull("No event occurred", status.get());
+        assertEquals("Incorrect event " + status, expected, status.get());
     }
 
     private void writeToFile(final File file) throws IOException {

[commons-vfs] 11/16: DefaultFileMonitor implements AutoCloseable.

Posted by gg...@apache.org.
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-vfs.git

commit e35ecd955280ddf1451d9df9032959900f65fa1b
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 10:51:06 2021 -0500

    DefaultFileMonitor implements AutoCloseable.
---
 .../commons/vfs2/impl/DefaultFileMonitor.java      |  35 ++++---
 .../commons/vfs2/impl/DefaultFileMonitorTest.java  | 113 ++++++++-------------
 src/changes/changes.xml                            |   5 +-
 3 files changed, 67 insertions(+), 86 deletions(-)

diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
index 4efb139..fa4583a 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
@@ -73,7 +73,8 @@ import org.apache.commons.vfs2.provider.AbstractFileSystem;
  *
  * <i>(where CustomFileListener is a class that implements the FileListener interface.)</i>
  */
-public class DefaultFileMonitor implements Runnable, FileMonitor {
+// TODO Add a Builder so we can construct and start.
+public class DefaultFileMonitor implements Runnable, FileMonitor, AutoCloseable {
 
     /**
      * File monitor agent.
@@ -186,8 +187,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
                         if (!missingChildren.empty()) {
 
                             while (!missingChildren.empty()) {
-                                final FileObject child = missingChildren.pop();
-                                this.fireAllCreate(child);
+                                this.fireAllCreate(missingChildren.pop());
                             }
                         }
 
@@ -206,8 +206,8 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
         }
 
         /**
-         * Recursively fires create events for all children if recursive descent is enabled. Otherwise the create event
-         * is only fired for the initial FileObject.
+         * Recursively fires create events for all children if recursive descent is enabled. Otherwise the create event is only
+         * fired for the initial FileObject.
          *
          * @param child The child to add.
          */
@@ -357,6 +357,20 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
         }
     }
 
+    @Override
+    public void close() {
+        this.runFlag = false;
+        if (this.monitorThread != null) {
+            this.monitorThread.interrupt();
+            try {
+                this.monitorThread.join();
+            } catch (final InterruptedException e) {
+                // ignore
+            }
+            this.monitorThread = null;
+        }
+    }
+
     /**
      * Gets the number of files to check per run.
      *
@@ -558,15 +572,6 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
      * Stops monitoring the files that have been added.
      */
     public synchronized void stop() {
-        this.runFlag = false;
-        if (this.monitorThread != null) {
-            this.monitorThread.interrupt();
-            try {
-                this.monitorThread.join();
-            } catch (final InterruptedException e) {
-                // ignore
-            }
-            this.monitorThread = null;
-        }
+        close();
     }
 }
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
index 9352bc7..e0a745e 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
@@ -111,9 +111,8 @@ public class DefaultFileMonitorTest {
     public void ignore_testAddRemove() throws Exception {
         try (final FileObject fileObject = fileSystemManager.resolveFile(testFile.toURI().toString())) {
             final CountingListener listener = new CountingListener();
-            final DefaultFileMonitor monitor = new DefaultFileMonitor(listener);
-            monitor.setDelay(DELAY_MILLIS);
-            try {
+            try (final DefaultFileMonitor monitor = new DefaultFileMonitor(listener)) {
+                monitor.setDelay(DELAY_MILLIS);
                 monitor.addFile(fileObject);
                 monitor.removeFile(fileObject);
                 monitor.addFile(fileObject);
@@ -121,8 +120,6 @@ public class DefaultFileMonitorTest {
                 writeToFile(testFile);
                 Thread.sleep(DELAY_MILLIS * 3);
                 assertEquals("Created event is only fired once", 1, listener.created.get());
-            } finally {
-                monitor.stop();
             }
         }
     }
@@ -137,12 +134,9 @@ public class DefaultFileMonitorTest {
     public void ignore_testStartStop() throws Exception {
         try (final FileObject fileObject = fileSystemManager.resolveFile(testFile.toURI().toString())) {
             final CountingListener stoppedListener = new CountingListener();
-            final DefaultFileMonitor stoppedMonitor = new DefaultFileMonitor(stoppedListener);
-            stoppedMonitor.start();
-            try {
+            try (final DefaultFileMonitor stoppedMonitor = new DefaultFileMonitor(stoppedListener)) {
+                stoppedMonitor.start();
                 stoppedMonitor.addFile(fileObject);
-            } finally {
-                stoppedMonitor.stop();
             }
 
             // Variant 1: it becomes documented behavior to manually remove all files after stop() such that all
@@ -160,18 +154,15 @@ public class DefaultFileMonitorTest {
             // DefaultFileMonitor.
 
             final CountingListener activeListener = new CountingListener();
-            final DefaultFileMonitor activeMonitor = new DefaultFileMonitor(activeListener);
-            activeMonitor.setDelay(DELAY_MILLIS);
-            activeMonitor.addFile(fileObject);
-            activeMonitor.start();
-            try {
+            try (final DefaultFileMonitor activeMonitor = new DefaultFileMonitor(activeListener)) {
+                activeMonitor.setDelay(DELAY_MILLIS);
+                activeMonitor.addFile(fileObject);
+                activeMonitor.start();
                 writeToFile(testFile);
                 Thread.sleep(DELAY_MILLIS * 10);
 
                 assertEquals("The listener of the active monitor received one created event", 1, activeListener.created.get());
                 assertEquals("The listener of the stopped monitor received no events", 0, stoppedListener.created.get());
-            } finally {
-                activeMonitor.stop();
             }
         }
     }
@@ -194,19 +185,16 @@ public class DefaultFileMonitorTest {
     public void testChildFileDeletedWithoutRecursiveChecking() throws Exception {
         writeToFile(testFile);
         try (final FileObject fileObject = fileSystemManager.resolveFile(testDir.toURI().toURL().toString())) {
-            final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-            monitor.setDelay(2000);
-            monitor.setRecursive(false);
-            monitor.addFile(fileObject);
-            monitor.start();
-            try {
+            try (final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener())) {
+                monitor.setDelay(2000);
+                monitor.setRecursive(false);
+                monitor.addFile(fileObject);
+                monitor.start();
                 status = null;
                 Thread.sleep(DELAY_MILLIS * 5);
                 testFile.delete();
                 Thread.sleep(DELAY_MILLIS * 30);
                 assertEquals("Event should not have occurred", null, status);
-            } finally {
-                monitor.stop();
             }
         }
     }
@@ -215,12 +203,11 @@ public class DefaultFileMonitorTest {
     public void testChildFileRecreated() throws Exception {
         writeToFile(testFile);
         try (final FileObject fileObj = fileSystemManager.resolveFile(testDir.toURI().toURL().toString())) {
-            final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-            monitor.setDelay(2000);
-            monitor.setRecursive(true);
-            monitor.addFile(fileObj);
-            monitor.start();
-            try {
+            try (final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener())) {
+                monitor.setDelay(2000);
+                monitor.setRecursive(true);
+                monitor.addFile(fileObj);
+                monitor.start();
                 status = null;
                 Thread.sleep(DELAY_MILLIS * 5);
                 testFile.delete();
@@ -229,8 +216,6 @@ public class DefaultFileMonitorTest {
                 Thread.sleep(DELAY_MILLIS * 5);
                 writeToFile(testFile);
                 waitFor(Status.CREATED, DELAY_MILLIS * 30);
-            } finally {
-                monitor.stop();
             }
         }
     }
@@ -238,17 +223,14 @@ public class DefaultFileMonitorTest {
     @Test
     public void testFileCreated() throws Exception {
         try (final FileObject fileObject = fileSystemManager.resolveFile(testFile.toURI().toURL().toString())) {
-            final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-            // TestFileListener manipulates status
-            monitor.setDelay(DELAY_MILLIS);
-            monitor.addFile(fileObject);
-            monitor.start();
-            try {
+            try (final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener())) {
+                // TestFileListener manipulates status
+                monitor.setDelay(DELAY_MILLIS);
+                monitor.addFile(fileObject);
+                monitor.start();
                 writeToFile(testFile);
                 Thread.sleep(DELAY_MILLIS * 5);
                 waitFor(Status.CREATED, DELAY_MILLIS * 5);
-            } finally {
-                monitor.stop();
             }
         }
     }
@@ -257,16 +239,13 @@ public class DefaultFileMonitorTest {
     public void testFileDeleted() throws Exception {
         writeToFile(testFile);
         try (final FileObject fileObject = fileSystemManager.resolveFile(testFile.toURI().toString())) {
-            final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-            // TestFileListener manipulates status
-            monitor.setDelay(DELAY_MILLIS);
-            monitor.addFile(fileObject);
-            monitor.start();
-            try {
+            try (final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener())) {
+                // TestFileListener manipulates status
+                monitor.setDelay(DELAY_MILLIS);
+                monitor.addFile(fileObject);
+                monitor.start();
                 testFile.delete();
                 waitFor(Status.DELETED, DELAY_MILLIS * 5);
-            } finally {
-                monitor.stop();
             }
         }
     }
@@ -275,12 +254,11 @@ public class DefaultFileMonitorTest {
     public void testFileModified() throws Exception {
         writeToFile(testFile);
         try (final FileObject fileObject = fileSystemManager.resolveFile(testFile.toURI().toURL().toString())) {
-            final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-            // TestFileListener manipulates status
-            monitor.setDelay(DELAY_MILLIS);
-            monitor.addFile(fileObject);
-            monitor.start();
-            try {
+            try (final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener())) {
+                // TestFileListener manipulates status
+                monitor.setDelay(DELAY_MILLIS);
+                monitor.addFile(fileObject);
+                monitor.start();
                 // Need a long delay to insure the new timestamp doesn't truncate to be the same as
                 // the current timestammp. Java only guarantees the timestamp will be to 1 second.
                 Thread.sleep(DELAY_MILLIS * 10);
@@ -288,8 +266,6 @@ public class DefaultFileMonitorTest {
                 final boolean rcMillis = testFile.setLastModified(valueMillis);
                 assertTrue("setLastModified succeeded", rcMillis);
                 waitFor(Status.CHANGED, DELAY_MILLIS * 5);
-            } finally {
-                monitor.stop();
             }
         }
     }
@@ -298,12 +274,12 @@ public class DefaultFileMonitorTest {
     public void testFileMonitorRestarted() throws Exception {
         try (final FileObject fileObject = fileSystemManager.resolveFile(testFile.toURI().toString())) {
             final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-            // TestFileListener manipulates status
-            monitor.setDelay(DELAY_MILLIS);
-            monitor.addFile(fileObject);
-
-            monitor.start();
             try {
+                // TestFileListener manipulates status
+                monitor.setDelay(DELAY_MILLIS);
+                monitor.addFile(fileObject);
+
+                monitor.start();
                 writeToFile(testFile);
                 Thread.sleep(DELAY_MILLIS * 5);
             } finally {
@@ -323,12 +299,11 @@ public class DefaultFileMonitorTest {
     @Test
     public void testFileRecreated() throws Exception {
         try (final FileObject fileObject = fileSystemManager.resolveFile(testFile.toURI())) {
-            final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-            // TestFileListener manipulates status
-            monitor.setDelay(DELAY_MILLIS);
-            monitor.addFile(fileObject);
-            monitor.start();
-            try {
+            try (final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener())) {
+                // TestFileListener manipulates status
+                monitor.setDelay(DELAY_MILLIS);
+                monitor.addFile(fileObject);
+                monitor.start();
                 writeToFile(testFile);
                 waitFor(Status.CREATED, DELAY_MILLIS * 10);
                 status = null;
@@ -339,8 +314,6 @@ public class DefaultFileMonitorTest {
                 monitor.addFile(fileObject);
                 writeToFile(testFile);
                 waitFor(Status.CREATED, DELAY_MILLIS * 10);
-            } finally {
-                monitor.stop();
             }
         }
     }
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 48dd245..5f09891 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -72,9 +72,12 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="add" dev="ggregory" due-to="Seth Falco">
         Add vscode files to gitignore #205.
       </action>
-      <action type="add" dev="ggregory" due-to="Seth Falco">
+      <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add DefaultFileMonitor.setDelay(Duration), getDelayDuration() and deprecate setDelay(long), getDelay().
       </action>
+      <action type="add" dev="ggregory" due-to="Gary Gregory">
+        DefaultFileMonitor implements AutoCloseable.
+      </action>
       <!-- UDPATE -->
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump jakarta.mail from 1.6.7 to 2.0.1 #200.

[commons-vfs] 12/16: Don't use deprecated API.

Posted by gg...@apache.org.
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-vfs.git

commit 421665fda6c847810160b4fa146c91aeb39c213c
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 10:59:20 2021 -0500

    Don't use deprecated API.
---
 .../src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
index fa4583a..a7b04f6 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
@@ -508,7 +508,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor, AutoCloseable
             }
 
             try {
-                Thread.sleep(getDelay());
+                Thread.sleep(getDelayDuration().toMillis());
             } catch (final InterruptedException e) {
                 continue;
             }

[commons-vfs] 05/16: Sort members.

Posted by gg...@apache.org.
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-vfs.git

commit 4d5d5ab451e0e1979d5b39a473963669d7ce13df
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 09:47:02 2021 -0500

    Sort members.
---
 .../commons/vfs2/impl/DefaultFileMonitor.java      | 546 ++++++++++-----------
 1 file changed, 273 insertions(+), 273 deletions(-)

diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
index b26dc5e..0af057b 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
@@ -74,6 +74,196 @@ import org.apache.commons.vfs2.provider.AbstractFileSystem;
  */
 public class DefaultFileMonitor implements Runnable, FileMonitor {
 
+    /**
+     * File monitor agent.
+     */
+    private static final class FileMonitorAgent {
+        private final FileObject fileObject;
+        private final DefaultFileMonitor defaultFileMonitor;
+
+        private boolean exists;
+        private long timestamp;
+        private Map<FileName, Object> children;
+
+        private FileMonitorAgent(final DefaultFileMonitor fm, final FileObject file) {
+            this.defaultFileMonitor = fm;
+            this.fileObject = file;
+
+            this.refresh();
+            this.resetChildrenList();
+
+            try {
+                this.exists = this.fileObject.exists();
+            } catch (final FileSystemException fse) {
+                this.exists = false;
+                this.timestamp = -1;
+            }
+
+            if (this.exists) {
+                try {
+                    this.timestamp = this.fileObject.getContent().getLastModifiedTime();
+                } catch (final FileSystemException fse) {
+                    this.timestamp = -1;
+                }
+            }
+        }
+
+        private void check() {
+            this.refresh();
+
+            try {
+                // If the file existed and now doesn't
+                if (this.exists && !this.fileObject.exists()) {
+                    this.exists = this.fileObject.exists();
+                    this.timestamp = -1;
+
+                    // Fire delete event
+
+                    ((AbstractFileSystem) this.fileObject.getFileSystem()).fireFileDeleted(this.fileObject);
+
+                    // Remove listener in case file is re-created. Don't want to fire twice.
+                    if (this.defaultFileMonitor.getFileListener() != null) {
+                        this.fileObject.getFileSystem().removeListener(this.fileObject, this.defaultFileMonitor.getFileListener());
+                    }
+
+                    // Remove from map
+                    this.defaultFileMonitor.queueRemoveFile(this.fileObject);
+                } else if (this.exists && this.fileObject.exists()) {
+
+                    // Check the timestamp to see if it has been modified
+                    if (this.timestamp != this.fileObject.getContent().getLastModifiedTime()) {
+                        this.timestamp = this.fileObject.getContent().getLastModifiedTime();
+                        // Fire change event
+
+                        // Don't fire if it's a folder because new file children
+                        // and deleted files in a folder have their own event triggered.
+                        if (!this.fileObject.getType().hasChildren()) {
+                            ((AbstractFileSystem) this.fileObject.getFileSystem()).fireFileChanged(this.fileObject);
+                        }
+                    }
+
+                } else if (!this.exists && this.fileObject.exists()) {
+                    this.exists = this.fileObject.exists();
+                    this.timestamp = this.fileObject.getContent().getLastModifiedTime();
+                    // Don't fire if it's a folder because new file children
+                    // and deleted files in a folder have their own event triggered.
+                    if (!this.fileObject.getType().hasChildren()) {
+                        ((AbstractFileSystem) this.fileObject.getFileSystem()).fireFileCreated(this.fileObject);
+                    }
+                }
+
+                this.checkForNewChildren();
+
+            } catch (final FileSystemException fse) {
+                LOG.error(fse.getLocalizedMessage(), fse);
+            }
+        }
+
+        /**
+         * Only checks for new children. If children are removed, they'll eventually be checked.
+         */
+        private void checkForNewChildren() {
+            try {
+                if (this.fileObject.getType().hasChildren()) {
+                    final FileObject[] newChildren = this.fileObject.getChildren();
+                    if (this.children != null) {
+                        // See which new children are not listed in the current children map.
+                        final Map<FileName, Object> newChildrenMap = new HashMap<>();
+                        final Stack<FileObject> missingChildren = new Stack<>();
+
+                        for (final FileObject element : newChildren) {
+                            newChildrenMap.put(element.getName(), new Object()); // null ?
+                            // If the child's not there
+                            if (!this.children.containsKey(element.getName())) {
+                                missingChildren.push(element);
+                            }
+                        }
+
+                        this.children = newChildrenMap;
+
+                        // If there were missing children
+                        if (!missingChildren.empty()) {
+
+                            while (!missingChildren.empty()) {
+                                final FileObject child = missingChildren.pop();
+                                this.fireAllCreate(child);
+                            }
+                        }
+
+                    } else if (newChildren.length > 0) {
+                        // First set of children - Break out the cigars
+                        this.children = new HashMap<>();
+                        for (final FileObject element : newChildren) {
+                            this.children.put(element.getName(), new Object()); // null?
+                            this.fireAllCreate(element);
+                        }
+                    }
+                }
+            } catch (final FileSystemException fse) {
+                LOG.error(fse.getLocalizedMessage(), fse);
+            }
+        }
+
+        /**
+         * Recursively fires create events for all children if recursive descent is enabled. Otherwise the create event
+         * is only fired for the initial FileObject.
+         *
+         * @param child The child to add.
+         */
+        private void fireAllCreate(final FileObject child) {
+            // Add listener so that it can be triggered
+            if (this.defaultFileMonitor.getFileListener() != null) {
+                child.getFileSystem().addListener(child, this.defaultFileMonitor.getFileListener());
+            }
+
+            ((AbstractFileSystem) child.getFileSystem()).fireFileCreated(child);
+
+            // Remove it because a listener is added in the queueAddFile
+            if (this.defaultFileMonitor.getFileListener() != null) {
+                child.getFileSystem().removeListener(child, this.defaultFileMonitor.getFileListener());
+            }
+
+            this.defaultFileMonitor.queueAddFile(child); // Add
+
+            try {
+                if (this.defaultFileMonitor.isRecursive() && child.getType().hasChildren()) {
+                    final FileObject[] newChildren = child.getChildren();
+                    for (final FileObject element : newChildren) {
+                        fireAllCreate(element);
+                    }
+                }
+            } catch (final FileSystemException fse) {
+                LOG.error(fse.getLocalizedMessage(), fse);
+            }
+        }
+
+        /**
+         * Clear the cache and re-request the file object.
+         */
+        private void refresh() {
+            try {
+                this.fileObject.refresh();
+            } catch (final FileSystemException fse) {
+                LOG.error(fse.getLocalizedMessage(), fse);
+            }
+        }
+
+        private void resetChildrenList() {
+            try {
+                if (this.fileObject.getType().hasChildren()) {
+                    this.children = new HashMap<>();
+                    final FileObject[] childrenList = this.fileObject.getChildren();
+                    for (final FileObject element : childrenList) {
+                        this.children.put(element.getName(), new Object()); // null?
+                    }
+                }
+            } catch (final FileSystemException fse) {
+                this.children = null;
+            }
+        }
+
+    }
+
     private static final Log LOG = LogFactory.getLog(DefaultFileMonitor.class);
 
     private static final long DEFAULT_DELAY = 1000;
@@ -135,33 +325,6 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * Tests the recursive setting when adding files for monitoring.
-     *
-     * @return true if monitoring is enabled for children.
-     */
-    public boolean isRecursive() {
-        return this.recursive;
-    }
-
-    /**
-     * Sets the recursive setting when adding files for monitoring.
-     *
-     * @param newRecursive true if monitoring should be enabled for children.
-     */
-    public void setRecursive(final boolean newRecursive) {
-        this.recursive = newRecursive;
-    }
-
-    /**
-     * Gets the current FileListener object notified when there are changes with the files added.
-     *
-     * @return The FileListener.
-     */
-    FileListener getFileListener() {
-        return this.listener;
-    }
-
-    /**
      * Adds a file to be monitored.
      *
      * @param file The FileObject to monitor.
@@ -194,41 +357,12 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * Removes a file from being monitored.
-     *
-     * @param file The FileObject to remove from monitoring.
-     */
-    @Override
-    public void removeFile(final FileObject file) {
-        synchronized (this.monitorMap) {
-            final FileName fn = file.getName();
-            if (this.monitorMap.get(fn) != null) {
-                FileObject parent;
-                try {
-                    parent = file.getParent();
-                } catch (final FileSystemException fse) {
-                    parent = null;
-                }
-
-                this.monitorMap.remove(fn);
-
-                if (parent != null) { // Not the root
-                    final FileMonitorAgent parentAgent = this.monitorMap.get(parent.getName());
-                    if (parentAgent != null) {
-                        parentAgent.resetChildrenList();
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Queues a file for removal from being monitored.
+     * Gets the number of files to check per run.
      *
-     * @param file The FileObject to be removed from being monitored.
+     * @return The number of files to check per iteration.
      */
-    protected void queueRemoveFile(final FileObject file) {
-        this.deleteStack.push(file);
+    public int getChecksPerRun() {
+        return checksPerRun;
     }
 
     /**
@@ -241,30 +375,21 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * Sets the delay between runs.
+     * Gets the current FileListener object notified when there are changes with the files added.
      *
-     * @param delay The delay period.
-     */
-    public void setDelay(final long delay) {
-        this.delay = delay > 0 ? delay : DEFAULT_DELAY;
-    }
-
-    /**
-     * Gets the number of files to check per run.
-     *
-     * @return The number of files to check per iteration.
+     * @return The FileListener.
      */
-    public int getChecksPerRun() {
-        return checksPerRun;
+    FileListener getFileListener() {
+        return this.listener;
     }
 
     /**
-     * Sets the number of files to check per run. a additional delay will be added if there are more files to check
+     * Tests the recursive setting when adding files for monitoring.
      *
-     * @param checksPerRun a value less than 1 will disable this feature
+     * @return true if monitoring is enabled for children.
      */
-    public void setChecksPerRun(final int checksPerRun) {
-        this.checksPerRun = checksPerRun;
+    public boolean isRecursive() {
+        return this.recursive;
     }
 
     /**
@@ -277,30 +402,40 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * Starts monitoring the files that have been added.
+     * Queues a file for removal from being monitored.
+     *
+     * @param file The FileObject to be removed from being monitored.
      */
-    public void start() {
-        if (this.monitorThread == null) {
-            this.monitorThread = new Thread(this);
-            this.monitorThread.setDaemon(true);
-            this.monitorThread.setPriority(Thread.MIN_PRIORITY);
-        }
-        this.monitorThread.start();
+    protected void queueRemoveFile(final FileObject file) {
+        this.deleteStack.push(file);
     }
 
     /**
-     * Stops monitoring the files that have been added.
+     * Removes a file from being monitored.
+     *
+     * @param file The FileObject to remove from monitoring.
      */
-    public void stop() {
-        this.shouldRun = false;
-        if (this.monitorThread != null) {
-            this.monitorThread.interrupt();
-            try {
-                this.monitorThread.join();
-            } catch (final InterruptedException e) {
-                // ignore
+    @Override
+    public void removeFile(final FileObject file) {
+        synchronized (this.monitorMap) {
+            final FileName fn = file.getName();
+            if (this.monitorMap.get(fn) != null) {
+                FileObject parent;
+                try {
+                    parent = file.getParent();
+                } catch (final FileSystemException fse) {
+                    parent = null;
+                }
+
+                this.monitorMap.remove(fn);
+
+                if (parent != null) { // Not the root
+                    final FileMonitorAgent parentAgent = this.monitorMap.get(parent.getName());
+                    if (parentAgent != null) {
+                        parentAgent.resetChildrenList();
+                    }
+                }
             }
-            this.monitorThread = null;
         }
     }
 
@@ -357,192 +492,57 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * File monitor agent.
+     * Sets the number of files to check per run. a additional delay will be added if there are more files to check
+     *
+     * @param checksPerRun a value less than 1 will disable this feature
      */
-    private static final class FileMonitorAgent {
-        private final FileObject fileObject;
-        private final DefaultFileMonitor defaultFileMonitor;
-
-        private boolean exists;
-        private long timestamp;
-        private Map<FileName, Object> children;
-
-        private FileMonitorAgent(final DefaultFileMonitor fm, final FileObject file) {
-            this.defaultFileMonitor = fm;
-            this.fileObject = file;
-
-            this.refresh();
-            this.resetChildrenList();
-
-            try {
-                this.exists = this.fileObject.exists();
-            } catch (final FileSystemException fse) {
-                this.exists = false;
-                this.timestamp = -1;
-            }
-
-            if (this.exists) {
-                try {
-                    this.timestamp = this.fileObject.getContent().getLastModifiedTime();
-                } catch (final FileSystemException fse) {
-                    this.timestamp = -1;
-                }
-            }
-        }
-
-        private void resetChildrenList() {
-            try {
-                if (this.fileObject.getType().hasChildren()) {
-                    this.children = new HashMap<>();
-                    final FileObject[] childrenList = this.fileObject.getChildren();
-                    for (final FileObject element : childrenList) {
-                        this.children.put(element.getName(), new Object()); // null?
-                    }
-                }
-            } catch (final FileSystemException fse) {
-                this.children = null;
-            }
-        }
-
-        /**
-         * Clear the cache and re-request the file object.
-         */
-        private void refresh() {
-            try {
-                this.fileObject.refresh();
-            } catch (final FileSystemException fse) {
-                LOG.error(fse.getLocalizedMessage(), fse);
-            }
-        }
-
-        /**
-         * Recursively fires create events for all children if recursive descent is enabled. Otherwise the create event
-         * is only fired for the initial FileObject.
-         *
-         * @param child The child to add.
-         */
-        private void fireAllCreate(final FileObject child) {
-            // Add listener so that it can be triggered
-            if (this.defaultFileMonitor.getFileListener() != null) {
-                child.getFileSystem().addListener(child, this.defaultFileMonitor.getFileListener());
-            }
-
-            ((AbstractFileSystem) child.getFileSystem()).fireFileCreated(child);
-
-            // Remove it because a listener is added in the queueAddFile
-            if (this.defaultFileMonitor.getFileListener() != null) {
-                child.getFileSystem().removeListener(child, this.defaultFileMonitor.getFileListener());
-            }
-
-            this.defaultFileMonitor.queueAddFile(child); // Add
-
-            try {
-                if (this.defaultFileMonitor.isRecursive() && child.getType().hasChildren()) {
-                    final FileObject[] newChildren = child.getChildren();
-                    for (final FileObject element : newChildren) {
-                        fireAllCreate(element);
-                    }
-                }
-            } catch (final FileSystemException fse) {
-                LOG.error(fse.getLocalizedMessage(), fse);
-            }
-        }
-
-        /**
-         * Only checks for new children. If children are removed, they'll eventually be checked.
-         */
-        private void checkForNewChildren() {
-            try {
-                if (this.fileObject.getType().hasChildren()) {
-                    final FileObject[] newChildren = this.fileObject.getChildren();
-                    if (this.children != null) {
-                        // See which new children are not listed in the current children map.
-                        final Map<FileName, Object> newChildrenMap = new HashMap<>();
-                        final Stack<FileObject> missingChildren = new Stack<>();
-
-                        for (final FileObject element : newChildren) {
-                            newChildrenMap.put(element.getName(), new Object()); // null ?
-                            // If the child's not there
-                            if (!this.children.containsKey(element.getName())) {
-                                missingChildren.push(element);
-                            }
-                        }
-
-                        this.children = newChildrenMap;
+    public void setChecksPerRun(final int checksPerRun) {
+        this.checksPerRun = checksPerRun;
+    }
 
-                        // If there were missing children
-                        if (!missingChildren.empty()) {
+    /**
+     * Sets the delay between runs.
+     *
+     * @param delay The delay period.
+     */
+    public void setDelay(final long delay) {
+        this.delay = delay > 0 ? delay : DEFAULT_DELAY;
+    }
 
-                            while (!missingChildren.empty()) {
-                                final FileObject child = missingChildren.pop();
-                                this.fireAllCreate(child);
-                            }
-                        }
+    /**
+     * Sets the recursive setting when adding files for monitoring.
+     *
+     * @param newRecursive true if monitoring should be enabled for children.
+     */
+    public void setRecursive(final boolean newRecursive) {
+        this.recursive = newRecursive;
+    }
 
-                    } else if (newChildren.length > 0) {
-                        // First set of children - Break out the cigars
-                        this.children = new HashMap<>();
-                        for (final FileObject element : newChildren) {
-                            this.children.put(element.getName(), new Object()); // null?
-                            this.fireAllCreate(element);
-                        }
-                    }
-                }
-            } catch (final FileSystemException fse) {
-                LOG.error(fse.getLocalizedMessage(), fse);
-            }
+    /**
+     * Starts monitoring the files that have been added.
+     */
+    public void start() {
+        if (this.monitorThread == null) {
+            this.monitorThread = new Thread(this);
+            this.monitorThread.setDaemon(true);
+            this.monitorThread.setPriority(Thread.MIN_PRIORITY);
         }
+        this.monitorThread.start();
+    }
 
-        private void check() {
-            this.refresh();
-
+    /**
+     * Stops monitoring the files that have been added.
+     */
+    public void stop() {
+        this.shouldRun = false;
+        if (this.monitorThread != null) {
+            this.monitorThread.interrupt();
             try {
-                // If the file existed and now doesn't
-                if (this.exists && !this.fileObject.exists()) {
-                    this.exists = this.fileObject.exists();
-                    this.timestamp = -1;
-
-                    // Fire delete event
-
-                    ((AbstractFileSystem) this.fileObject.getFileSystem()).fireFileDeleted(this.fileObject);
-
-                    // Remove listener in case file is re-created. Don't want to fire twice.
-                    if (this.defaultFileMonitor.getFileListener() != null) {
-                        this.fileObject.getFileSystem().removeListener(this.fileObject, this.defaultFileMonitor.getFileListener());
-                    }
-
-                    // Remove from map
-                    this.defaultFileMonitor.queueRemoveFile(this.fileObject);
-                } else if (this.exists && this.fileObject.exists()) {
-
-                    // Check the timestamp to see if it has been modified
-                    if (this.timestamp != this.fileObject.getContent().getLastModifiedTime()) {
-                        this.timestamp = this.fileObject.getContent().getLastModifiedTime();
-                        // Fire change event
-
-                        // Don't fire if it's a folder because new file children
-                        // and deleted files in a folder have their own event triggered.
-                        if (!this.fileObject.getType().hasChildren()) {
-                            ((AbstractFileSystem) this.fileObject.getFileSystem()).fireFileChanged(this.fileObject);
-                        }
-                    }
-
-                } else if (!this.exists && this.fileObject.exists()) {
-                    this.exists = this.fileObject.exists();
-                    this.timestamp = this.fileObject.getContent().getLastModifiedTime();
-                    // Don't fire if it's a folder because new file children
-                    // and deleted files in a folder have their own event triggered.
-                    if (!this.fileObject.getType().hasChildren()) {
-                        ((AbstractFileSystem) this.fileObject.getFileSystem()).fireFileCreated(this.fileObject);
-                    }
-                }
-
-                this.checkForNewChildren();
-
-            } catch (final FileSystemException fse) {
-                LOG.error(fse.getLocalizedMessage(), fse);
+                this.monitorThread.join();
+            } catch (final InterruptedException e) {
+                // ignore
             }
+            this.monitorThread = null;
         }
-
     }
 }

[commons-vfs] 14/16: Flip tests.

Posted by gg...@apache.org.
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-vfs.git

commit 851c0faf5d4bd7746fa4ee383a7ae2f2d70a3c2f
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 11:27:48 2021 -0500

    Flip tests.
---
 .../org/apache/commons/vfs2/util/WeakRefFileListener.java | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/WeakRefFileListener.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/WeakRefFileListener.java
index 0d9ac8c..40cf55a 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/WeakRefFileListener.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/WeakRefFileListener.java
@@ -79,10 +79,9 @@ public class WeakRefFileListener implements FileListener {
     @Override
     public void fileCreated(final FileChangeEvent event) throws Exception {
         final FileListener listener = getListener();
-        if (listener == null) {
-            return;
+        if (listener != null) {
+            listener.fileCreated(event);
         }
-        listener.fileCreated(event);
     }
 
     /**
@@ -94,10 +93,9 @@ public class WeakRefFileListener implements FileListener {
     @Override
     public void fileDeleted(final FileChangeEvent event) throws Exception {
         final FileListener listener = getListener();
-        if (listener == null) {
-            return;
+        if (listener != null) {
+            listener.fileDeleted(event);
         }
-        listener.fileDeleted(event);
     }
 
     /**
@@ -112,9 +110,8 @@ public class WeakRefFileListener implements FileListener {
     @Override
     public void fileChanged(final FileChangeEvent event) throws Exception {
         final FileListener listener = getListener();
-        if (listener == null) {
-            return;
+        if (listener != null) {
+            listener.fileChanged(event);
         }
-        listener.fileChanged(event);
     }
 }

[commons-vfs] 16/16: Attempt to fix random failures in DefaultFileMonitorTest, specifically in testFileCreated().

Posted by gg...@apache.org.
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-vfs.git

commit 41669f286a634f5a077762e8a49d3b96484e941d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 12:09:59 2021 -0500

    Attempt to fix random failures in DefaultFileMonitorTest, specifically
    in testFileCreated().
    
    java.lang.AssertionError: Incorrect event CHANGED expected:<CREATED> but
    was:<CHANGED>
            at org.junit.Assert.fail(Assert.java:89)
            at org.junit.Assert.failNotEquals(Assert.java:835)
            at org.junit.Assert.assertEquals(Assert.java:120)
            at org.apache.commons.vfs2.impl.DefaultFileMonitorTest.waitFor(DefaultFileMonitorTest.java:335)
            at org.apache.commons.vfs2.impl.DefaultFileMonitorTest.testFileCreated(DefaultFileMonitorTest.java:233)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
    Method)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.base/java.lang.reflect.Method.invoke(Method.java:566)
            at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
            at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
            at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
            at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
            at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
            at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
            at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
            at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
            at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
            at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
            at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
            at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
            at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
            at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
            at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
            at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
            at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
            at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
            at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:364)
            at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:272)
            at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:237)
            at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:158)
            at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:428)
            at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
            at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:562)
            at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:548)
---
 .../commons/vfs2/impl/DefaultFileMonitorTest.java  | 58 +++++++++++++---------
 1 file changed, 35 insertions(+), 23 deletions(-)

diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
index bd0ee88..89d461f 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
@@ -25,8 +25,10 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.Objects;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.commons.vfs2.AbstractVfsTestCase;
 import org.apache.commons.vfs2.FileChangeEvent;
@@ -65,6 +67,10 @@ public class DefaultFileMonitorTest {
         }
     }
 
+    private enum PeekLocation {
+        FIRST, LAST
+    }
+
     private enum Status {
         CHANGED, CREATED, DELETED
     }
@@ -73,17 +79,17 @@ public class DefaultFileMonitorTest {
 
         @Override
         public void fileChanged(final FileChangeEvent event) throws Exception {
-            status.set(Status.CHANGED);
+            status.add(Status.CHANGED);
         }
 
         @Override
         public void fileCreated(final FileChangeEvent event) throws Exception {
-            status.set(Status.CREATED);
+            status.add(Status.CREATED);
         }
 
         @Override
         public void fileDeleted(final FileChangeEvent event) throws Exception {
-            status.set(Status.DELETED);
+            status.add(Status.DELETED);
         }
     }
 
@@ -91,7 +97,7 @@ public class DefaultFileMonitorTest {
 
     private FileSystemManager fileSystemManager;
 
-    private final AtomicReference<Status> status = new AtomicReference<>();
+    private final Deque<Status> status = new ArrayDeque<>();
 
     private File testDir;
 
@@ -104,8 +110,14 @@ public class DefaultFileMonitorTest {
         }
     }
 
-    private Status getStatus() {
-        return status.get();
+    private Status getStatus(final PeekLocation peekLocation) {
+        switch (Objects.requireNonNull(peekLocation, "peekLocation")) {
+        case FIRST:
+            return status.peekFirst();
+        case LAST:
+            return status.peekLast();
+        }
+        throw new IllegalStateException();
     }
 
     /**
@@ -175,7 +187,7 @@ public class DefaultFileMonitorTest {
     }
 
     private void resetStatus() {
-        status.set(null);
+        status.clear();
     }
 
     @Before
@@ -205,7 +217,7 @@ public class DefaultFileMonitorTest {
                 Thread.sleep(DELAY_MILLIS * 5);
                 testFile.delete();
                 Thread.sleep(DELAY_MILLIS * 30);
-                assertNull("Event should not have occurred", getStatus());
+                assertNull("Event should not have occurred", getStatus(PeekLocation.LAST));
             }
         }
     }
@@ -222,11 +234,11 @@ public class DefaultFileMonitorTest {
                 resetStatus();
                 Thread.sleep(DELAY_MILLIS * 5);
                 testFile.delete();
-                waitFor(Status.DELETED, DELAY_MILLIS * 30);
+                waitFor(Status.DELETED, DELAY_MILLIS * 30, PeekLocation.LAST);
                 resetStatus();
                 Thread.sleep(DELAY_MILLIS * 5);
                 writeToFile(testFile);
-                waitFor(Status.CREATED, DELAY_MILLIS * 30);
+                waitFor(Status.CREATED, DELAY_MILLIS * 30, PeekLocation.LAST);
             }
         }
     }
@@ -241,7 +253,7 @@ public class DefaultFileMonitorTest {
                 monitor.start();
                 writeToFile(testFile);
                 Thread.sleep(DELAY_MILLIS * 5);
-                waitFor(Status.CREATED, DELAY_MILLIS * 5);
+                waitFor(Status.CREATED, DELAY_MILLIS * 5, PeekLocation.FIRST);
             }
         }
     }
@@ -256,7 +268,7 @@ public class DefaultFileMonitorTest {
                 monitor.addFile(fileObject);
                 monitor.start();
                 testFile.delete();
-                waitFor(Status.DELETED, DELAY_MILLIS * 5);
+                waitFor(Status.DELETED, DELAY_MILLIS * 5, PeekLocation.LAST);
             }
         }
     }
@@ -276,7 +288,7 @@ public class DefaultFileMonitorTest {
                 final long valueMillis = System.currentTimeMillis();
                 final boolean rcMillis = testFile.setLastModified(valueMillis);
                 assertTrue("setLastModified succeeded", rcMillis);
-                waitFor(Status.CHANGED, DELAY_MILLIS * 5);
+                waitFor(Status.CHANGED, DELAY_MILLIS * 5, PeekLocation.LAST);
             }
         }
     }
@@ -300,7 +312,7 @@ public class DefaultFileMonitorTest {
             monitor.start();
             try {
                 testFile.delete();
-                waitFor(Status.DELETED, DELAY_MILLIS * 5);
+                waitFor(Status.DELETED, DELAY_MILLIS * 5, PeekLocation.LAST);
             } finally {
                 monitor.stop();
             }
@@ -316,21 +328,21 @@ public class DefaultFileMonitorTest {
                 monitor.addFile(fileObject);
                 monitor.start();
                 writeToFile(testFile);
-                waitFor(Status.CREATED, DELAY_MILLIS * 10);
+                waitFor(Status.CREATED, DELAY_MILLIS * 10, PeekLocation.LAST);
                 resetStatus();
                 testFile.delete();
-                waitFor(Status.DELETED, DELAY_MILLIS * 10);
+                waitFor(Status.DELETED, DELAY_MILLIS * 10, PeekLocation.LAST);
                 resetStatus();
                 Thread.sleep(DELAY_MILLIS * 5);
                 monitor.addFile(fileObject);
                 writeToFile(testFile);
-                waitFor(Status.CREATED, DELAY_MILLIS * 10);
+                waitFor(Status.CREATED, DELAY_MILLIS * 10, PeekLocation.LAST);
             }
         }
     }
 
-    private void waitFor(final Status expected, final long timeoutMillis) throws InterruptedException {
-        if (expected == getStatus()) {
+    private void waitFor(final Status expected, final long timeoutMillis, final PeekLocation peekLocation) throws InterruptedException {
+        if (expected == getStatus(peekLocation)) {
             return;
         }
         long remaining = timeoutMillis;
@@ -338,12 +350,12 @@ public class DefaultFileMonitorTest {
         while (remaining > 0) {
             Thread.sleep(interval);
             remaining -= interval;
-            if (expected == getStatus()) {
+            if (expected == getStatus(peekLocation)) {
                 return;
             }
         }
-        assertNotNull("No event occurred", getStatus());
-        assertEquals("Incorrect event " + getStatus(), expected, getStatus());
+        assertNotNull("No event occurred", getStatus(peekLocation));
+        assertEquals("Incorrect event " + getStatus(peekLocation), expected, getStatus(peekLocation));
     }
 
     private void writeToFile(final File file) throws IOException {

[commons-vfs] 08/16: Add DefaultFileMonitor.setDelay(Duration), getDelayDuration() and deprecate setDelay(long), getDelay().

Posted by gg...@apache.org.
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-vfs.git

commit 86b6583cc29a09f14e16f92c048beb59da1720d0
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 10:34:49 2021 -0500

    Add DefaultFileMonitor.setDelay(Duration), getDelayDuration() and
    deprecate setDelay(long), getDelay().
    
    Update version from 2.9.1-SNAPSHOT to 2.10.0-SNAPSHOT.
---
 commons-vfs2-distribution/pom.xml                  |  2 +-
 commons-vfs2-examples/pom.xml                      |  2 +-
 commons-vfs2-jackrabbit1/pom.xml                   |  2 +-
 commons-vfs2-jackrabbit2/pom.xml                   |  2 +-
 commons-vfs2-sandbox/pom.xml                       |  2 +-
 commons-vfs2/pom.xml                               |  2 +-
 .../commons/vfs2/impl/DefaultFileMonitor.java      | 34 ++++++++++++++++++----
 pom.xml                                            |  2 +-
 src/changes/changes.xml                            |  3 ++
 9 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/commons-vfs2-distribution/pom.xml b/commons-vfs2-distribution/pom.xml
index 70954e8..68e5c8d 100644
--- a/commons-vfs2-distribution/pom.xml
+++ b/commons-vfs2-distribution/pom.xml
@@ -28,7 +28,7 @@ limitations under the License.
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-vfs2-project</artifactId>
-    <version>2.9.1-SNAPSHOT</version>
+    <version>2.10.0-SNAPSHOT</version>
     <relativePath>../</relativePath>
   </parent>
 
diff --git a/commons-vfs2-examples/pom.xml b/commons-vfs2-examples/pom.xml
index af2de1d..69c83b5 100644
--- a/commons-vfs2-examples/pom.xml
+++ b/commons-vfs2-examples/pom.xml
@@ -28,7 +28,7 @@
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-vfs2-project</artifactId>
-    <version>2.9.1-SNAPSHOT</version>
+    <version>2.10.0-SNAPSHOT</version>
     <relativePath>../</relativePath>
   </parent>
 
diff --git a/commons-vfs2-jackrabbit1/pom.xml b/commons-vfs2-jackrabbit1/pom.xml
index 30b30d8..4939987 100644
--- a/commons-vfs2-jackrabbit1/pom.xml
+++ b/commons-vfs2-jackrabbit1/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-vfs2-project</artifactId>
-    <version>2.9.1-SNAPSHOT</version>
+    <version>2.10.0-SNAPSHOT</version>
     <relativePath>../</relativePath>
   </parent>
 
diff --git a/commons-vfs2-jackrabbit2/pom.xml b/commons-vfs2-jackrabbit2/pom.xml
index 607c089..7ee27b1 100644
--- a/commons-vfs2-jackrabbit2/pom.xml
+++ b/commons-vfs2-jackrabbit2/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-vfs2-project</artifactId>
-    <version>2.9.1-SNAPSHOT</version>
+    <version>2.10.0-SNAPSHOT</version>
     <relativePath>../</relativePath>
   </parent>
 
diff --git a/commons-vfs2-sandbox/pom.xml b/commons-vfs2-sandbox/pom.xml
index b9f63f9..028a03b 100644
--- a/commons-vfs2-sandbox/pom.xml
+++ b/commons-vfs2-sandbox/pom.xml
@@ -28,7 +28,7 @@
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-vfs2-project</artifactId>
-    <version>2.9.1-SNAPSHOT</version>
+    <version>2.10.0-SNAPSHOT</version>
     <relativePath>../</relativePath>
   </parent>
 
diff --git a/commons-vfs2/pom.xml b/commons-vfs2/pom.xml
index 73815c3..9920f52 100644
--- a/commons-vfs2/pom.xml
+++ b/commons-vfs2/pom.xml
@@ -29,7 +29,7 @@
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-vfs2-project</artifactId>
-    <version>2.9.1-SNAPSHOT</version>
+    <version>2.10.0-SNAPSHOT</version>
     <relativePath>../</relativePath>
   </parent>
 
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
index 0af057b..db04237 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.vfs2.impl;
 
+import java.time.Duration;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Stack;
@@ -266,7 +267,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
 
     private static final Log LOG = LogFactory.getLog(DefaultFileMonitor.class);
 
-    private static final long DEFAULT_DELAY = 1000;
+    private static final Duration DEFAULT_DELAY = Duration.ofSeconds(1);
 
     private static final int DEFAULT_MAX_FILES = 1000;
 
@@ -303,7 +304,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     /**
      * Set the delay between checks
      */
-    private long delay = DEFAULT_DELAY;
+    private Duration delay = DEFAULT_DELAY;
 
     /**
      * Set the number of files to check until a delay will be inserted
@@ -368,9 +369,20 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     /**
      * Gets the delay between runs.
      *
-     * @return The delay period.
+     * @return The delay period in milliseconds.
+     * @deprecated Use {@link #getDelayDuration()}.
      */
+    @Deprecated
     public long getDelay() {
+        return delay.toMillis();
+    }
+
+    /**
+     * Gets the delay between runs.
+     *
+     * @return The delay period.
+     */
+    public Duration getDelayDuration() {
         return delay;
     }
 
@@ -462,7 +474,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
 
                 if (getChecksPerRun() > 0 && (iterFileNames + 1) % getChecksPerRun() == 0) {
                     try {
-                        Thread.sleep(getDelay());
+                        Thread.sleep(getDelayDuration().toMillis());
                     } catch (final InterruptedException e) {
                         // Woke up.
                     }
@@ -504,9 +516,21 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
      * Sets the delay between runs.
      *
      * @param delay The delay period.
+     * @since 2.10.0
+     */
+    public void setDelay(final Duration delay) {
+        this.delay = delay == null || delay.isNegative() ? DEFAULT_DELAY : delay;
+    }
+
+    /**
+     * Sets the delay between runs.
+     *
+     * @param delay The delay period in milliseconds.
+     * @deprecated Use {@link #setDelay(Duration)}.
      */
+    @Deprecated
     public void setDelay(final long delay) {
-        this.delay = delay > 0 ? delay : DEFAULT_DELAY;
+        setDelay(delay > 0 ? Duration.ofMillis(delay) : DEFAULT_DELAY);
     }
 
     /**
diff --git a/pom.xml b/pom.xml
index 1898001..ca8e4dd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
   <name>Apache Commons VFS Project</name>
   <description>Apache Commons VFS is a Virtual File System library.</description>
   <packaging>pom</packaging>
-  <version>2.9.1-SNAPSHOT</version>
+  <version>2.10.0-SNAPSHOT</version>
 
   <url>http://commons.apache.org/proper/commons-vfs/</url>
   <inceptionYear>2002</inceptionYear>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 2e499ec..48dd245 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -72,6 +72,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="add" dev="ggregory" due-to="Seth Falco">
         Add vscode files to gitignore #205.
       </action>
+      <action type="add" dev="ggregory" due-to="Seth Falco">
+        Add DefaultFileMonitor.setDelay(Duration), getDelayDuration() and deprecate setDelay(long), getDelay().
+      </action>
       <!-- UDPATE -->
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump jakarta.mail from 1.6.7 to 2.0.1 #200.

[commons-vfs] 01/16: Misc clean ups.

Posted by gg...@apache.org.
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-vfs.git

commit b4d682fa1e993d2914aa37a1b428a45443b575ec
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 09:40:21 2021 -0500

    Misc clean ups.
---
 .../main/java/org/apache/commons/vfs2/example/Shell.java   |  2 +-
 .../commons/vfs2/provider/webdav/WebdavFileObject.java     |  4 ++--
 .../commons/vfs2/provider/webdav/WebdavFileProvider.java   |  2 +-
 .../vfs2/provider/webdav/test/WebdavProviderTestCase.java  |  8 ++------
 .../commons/vfs2/provider/webdav4/Webdav4FileObject.java   |  4 ++--
 .../commons/vfs2/provider/webdav4/Webdav4FileProvider.java |  2 +-
 .../provider/webdav4/test/Webdav4ProviderTestCase.java     |  6 +-----
 .../src/main/java/org/apache/commons/vfs2/FileName.java    |  2 +-
 .../src/main/java/org/apache/commons/vfs2/FileObject.java  |  2 +-
 .../org/apache/commons/vfs2/FileSystemConfigBuilder.java   |  4 ++--
 .../apache/commons/vfs2/impl/DefaultFileReplicator.java    |  2 +-
 .../commons/vfs2/operations/FileOperationProvider.java     |  2 +-
 .../org/apache/commons/vfs2/provider/AbstractFileName.java |  8 +++-----
 .../apache/commons/vfs2/provider/AbstractFileProvider.java |  2 +-
 .../apache/commons/vfs2/provider/AbstractFileSystem.java   |  2 +-
 .../apache/commons/vfs2/provider/DefaultFileContent.java   |  2 +-
 .../java/org/apache/commons/vfs2/provider/RFC2396.java     |  2 +-
 .../apache/commons/vfs2/provider/ftp/FtpFileProvider.java  |  2 +-
 .../commons/vfs2/provider/http/HttpFileProvider.java       |  4 ++--
 .../commons/vfs2/provider/http4/Http4FileProvider.java     | 10 +++++-----
 .../commons/vfs2/provider/http5/Http5FileProvider.java     | 10 +++++-----
 .../org/apache/commons/vfs2/provider/local/LocalFile.java  |  4 ++--
 .../commons/vfs2/provider/sftp/SftpFileProvider.java       |  2 +-
 .../vfs2/provider/sftp/SftpFileSystemConfigBuilder.java    |  4 ++--
 .../apache/commons/vfs2/provider/tar/Tbz2FileProvider.java |  2 +-
 .../apache/commons/vfs2/provider/tar/TgzFileProvider.java  |  2 +-
 .../java/org/apache/commons/vfs2/tasks/DeleteTask.java     |  2 +-
 .../org/apache/commons/vfs2/util/CombinedResources.java    |  2 +-
 .../src/main/java/org/apache/commons/vfs2/util/Os.java     |  2 +-
 .../main/java/org/apache/commons/vfs2/util/OsFamily.java   |  2 +-
 .../java/org/apache/commons/vfs2/AbstractTestSuite.java    |  4 ++--
 .../commons/vfs2/FileObjectEscapeCharacterInPathTest.java  | 14 +++++++-------
 .../java/org/apache/commons/vfs2/ProviderDeleteTests.java  |  2 +-
 .../src/test/java/org/apache/commons/vfs2/RunTest.java     |  2 +-
 .../apache/commons/vfs2/impl/DefaultFileMonitorTest.java   |  1 -
 .../commons/vfs2/impl/DefaultFileSystemManagerTest.java    |  4 ++--
 .../org/apache/commons/vfs2/impl/VfsClassLoaderTests.java  |  4 ++--
 .../commons/vfs2/provider/local/WindowsFileNameTests.java  |  4 ++--
 .../commons/vfs2/provider/ram/CustomRamProviderTest.java   |  2 +-
 .../vfs2/util/DelegatingFileSystemOptionsBuilderTest.java  |  4 ++--
 40 files changed, 67 insertions(+), 78 deletions(-)

diff --git a/commons-vfs2-examples/src/main/java/org/apache/commons/vfs2/example/Shell.java b/commons-vfs2-examples/src/main/java/org/apache/commons/vfs2/example/Shell.java
index eda480b..63dbf34 100644
--- a/commons-vfs2-examples/src/main/java/org/apache/commons/vfs2/example/Shell.java
+++ b/commons-vfs2-examples/src/main/java/org/apache/commons/vfs2/example/Shell.java
@@ -56,7 +56,7 @@ public final class Shell {
 
     private Shell() throws IOException {
         final String providers = System.getProperty("providers");
-        final URL providersUrl = (providers != null) ? Shell.class.getResource("/" + providers) : null;
+        final URL providersUrl = providers != null ? Shell.class.getResource("/" + providers) : null;
 
         if (providersUrl != null) {
             mgr = new StandardFileSystemManager();
diff --git a/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileObject.java b/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileObject.java
index 0783f7c..19ec04b 100644
--- a/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileObject.java
+++ b/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileObject.java
@@ -82,7 +82,7 @@ public class WebdavFileObject extends HttpFileObject<WebdavFileSystem> {
     /**
      * An empty immutable {@code WebdavFileObject} array.
      */
-    private static final WebdavFileObject[] EMPTY_ARRAY = new WebdavFileObject[0];
+    private static final WebdavFileObject[] EMPTY_ARRAY = {};
 
     /**
      * An OutputStream that writes to a Webdav resource.
@@ -230,7 +230,7 @@ public class WebdavFileObject extends HttpFileObject<WebdavFileSystem> {
         builder = (WebdavFileSystemConfigBuilder) WebdavFileSystemConfigBuilder.getInstance();
     }
 
-    void log(Exception ex) {
+    void log(final Exception ex) {
         // TODO Consider logging.
     }
 
diff --git a/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java b/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java
index 9d6c162..37a557b 100644
--- a/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java
+++ b/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java
@@ -47,7 +47,7 @@ public class WebdavFileProvider extends HttpFileProvider {
      * @deprecated Might be removed in the next major version.
      */
     @Deprecated
-    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = new UserAuthenticationData.Type[] {
+    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = {
             UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD };
 
     /** The capabilities of the WebDAV provider */
diff --git a/commons-vfs2-jackrabbit1/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestCase.java b/commons-vfs2-jackrabbit1/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestCase.java
index 38ed437..a2f086b 100644
--- a/commons-vfs2-jackrabbit1/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestCase.java
+++ b/commons-vfs2-jackrabbit1/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestCase.java
@@ -52,7 +52,7 @@ import junit.framework.Test;
  *
  */
 public class WebdavProviderTestCase extends AbstractProviderTestConfig {
-    private static final char[] PASSWORD = new char[0];
+    private static final char[] PASSWORD = {};
 
     private static final String USER_ID = "admin";
 
@@ -110,11 +110,7 @@ public class WebdavProviderTestCase extends AbstractProviderTestConfig {
         // First output the node path
         message(node.getPath());
         // Skip the virtual (and large!) jcr:system subtree
-        if (node.getName().equals("jcr:system")) {
-            return;
-        }
-
-        if (node.getName().equals("jcr:content")) {
+        if (node.getName().equals("jcr:system") || node.getName().equals("jcr:content")) {
             return;
         }
 
diff --git a/commons-vfs2-jackrabbit2/src/main/java/org/apache/commons/vfs2/provider/webdav4/Webdav4FileObject.java b/commons-vfs2-jackrabbit2/src/main/java/org/apache/commons/vfs2/provider/webdav4/Webdav4FileObject.java
index 3d29fa1..9da008d 100644
--- a/commons-vfs2-jackrabbit2/src/main/java/org/apache/commons/vfs2/provider/webdav4/Webdav4FileObject.java
+++ b/commons-vfs2-jackrabbit2/src/main/java/org/apache/commons/vfs2/provider/webdav4/Webdav4FileObject.java
@@ -82,7 +82,7 @@ public class Webdav4FileObject extends Http4FileObject<Webdav4FileSystem> {
     /**
      * An empty immutable {@code Webdav4FileObject} array.
      */
-    private static final Webdav4FileObject[] EMPTY_ARRAY = new Webdav4FileObject[0];
+    private static final Webdav4FileObject[] EMPTY_ARRAY = {};
 
     /**
      * An OutputStream that writes to a Webdav resource.
@@ -228,7 +228,7 @@ public class Webdav4FileObject extends Http4FileObject<Webdav4FileSystem> {
         this(name, fileSystem, Webdav4FileSystemConfigBuilder.getInstance());
     }
 
-    void log(Exception ex) {
+    void log(final Exception ex) {
         // TODO Consider logging
     }
 
diff --git a/commons-vfs2-jackrabbit2/src/main/java/org/apache/commons/vfs2/provider/webdav4/Webdav4FileProvider.java b/commons-vfs2-jackrabbit2/src/main/java/org/apache/commons/vfs2/provider/webdav4/Webdav4FileProvider.java
index f1919aa..d0e5cb6 100644
--- a/commons-vfs2-jackrabbit2/src/main/java/org/apache/commons/vfs2/provider/webdav4/Webdav4FileProvider.java
+++ b/commons-vfs2-jackrabbit2/src/main/java/org/apache/commons/vfs2/provider/webdav4/Webdav4FileProvider.java
@@ -47,7 +47,7 @@ public class Webdav4FileProvider extends Http4FileProvider {
      * @deprecated Might be removed in the next major version.
      */
     @Deprecated
-    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = new UserAuthenticationData.Type[] {
+    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = {
             UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD };
 
     /** The capabilities of the WebDAV provider */
diff --git a/commons-vfs2-jackrabbit2/src/test/java/org/apache/commons/vfs2/provider/webdav4/test/Webdav4ProviderTestCase.java b/commons-vfs2-jackrabbit2/src/test/java/org/apache/commons/vfs2/provider/webdav4/test/Webdav4ProviderTestCase.java
index 1dcfe90..b411e03 100644
--- a/commons-vfs2-jackrabbit2/src/test/java/org/apache/commons/vfs2/provider/webdav4/test/Webdav4ProviderTestCase.java
+++ b/commons-vfs2-jackrabbit2/src/test/java/org/apache/commons/vfs2/provider/webdav4/test/Webdav4ProviderTestCase.java
@@ -114,11 +114,7 @@ public class Webdav4ProviderTestCase extends AbstractProviderTestConfig {
         // First output the node path
         message(node.getPath());
         // Skip the virtual (and large!) jcr:system subtree
-        if (node.getName().equals("jcr:system")) {
-            return;
-        }
-
-        if (node.getName().equals("jcr:content")) {
+        if (node.getName().equals("jcr:system") || node.getName().equals("jcr:content")) {
             return;
         }
 
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileName.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileName.java
index e0cfa55..a31fd86 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileName.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileName.java
@@ -43,7 +43,7 @@ public interface FileName extends Comparable<FileName> {
      *
      * @since 2.8.0
      */
-    FileName[] EMPTY_ARRAY = new FileName[0];
+    FileName[] EMPTY_ARRAY = {};
 
     /**
      * Gets the base name of this file. The base name is the last element of the file name. For example the base name
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileObject.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileObject.java
index 63f50ac..3c390da 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileObject.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileObject.java
@@ -100,7 +100,7 @@ public interface FileObject extends Comparable<FileObject>, Iterable<FileObject>
      *
      * @since 2.8.0
      */
-    FileObject[] EMPTY_ARRAY = new FileObject[0];
+    FileObject[] EMPTY_ARRAY = {};
 
     /**
      * Queries the file if it is possible to rename it to newfile.
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemConfigBuilder.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemConfigBuilder.java
index 86567a5..d448c39 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemConfigBuilder.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemConfigBuilder.java
@@ -234,7 +234,7 @@ public abstract class FileSystemConfigBuilder {
      */
     protected double getDouble(final FileSystemOptions fileSystemOptions, final String name,
         final double defaultValue) {
-        return getDouble(fileSystemOptions, name, new Double(defaultValue)).doubleValue();
+        return getDouble(fileSystemOptions, name, Double.valueOf(defaultValue)).doubleValue();
     }
 
     /**
@@ -383,7 +383,7 @@ public abstract class FileSystemConfigBuilder {
      * @since 2.0
      */
     protected float getFloat(final FileSystemOptions fileSystemOptions, final String name, final float defaultValue) {
-        return getFloat(fileSystemOptions, name, new Float(defaultValue)).floatValue();
+        return getFloat(fileSystemOptions, name, Float.valueOf(defaultValue)).floatValue();
     }
 
     /**
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileReplicator.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileReplicator.java
index 4154ccd..be03ab8 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileReplicator.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileReplicator.java
@@ -41,7 +41,7 @@ public class DefaultFileReplicator extends AbstractVfsComponent implements FileR
 
     private static final Random random = new Random();
 
-    private static final char[] TMP_RESERVED_CHARS = new char[] { '?', '/', '\\', ' ', '&', '"', '\'', '*', '#', ';',
+    private static final char[] TMP_RESERVED_CHARS = { '?', '/', '\\', ' ', '&', '"', '\'', '*', '#', ';',
             ':', '<', '>', '|' };
 
     private final ArrayList<Object> copies = new ArrayList<>();
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/operations/FileOperationProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/operations/FileOperationProvider.java
index d987a7e..bd6f016 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/operations/FileOperationProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/operations/FileOperationProvider.java
@@ -27,7 +27,7 @@ import org.apache.commons.vfs2.FileSystemException;
  * @since 0.1
  */
 public interface FileOperationProvider {
-    
+
     /**
      * Empty array.
      *
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileName.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileName.java
index 520509e..874f062 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileName.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileName.java
@@ -61,12 +61,10 @@ public abstract class AbstractFileName implements FileName {
         this.type = type;
         if (StringUtils.isEmpty(absPath)) {
             this.absPath = ROOT_PATH;
+        } else if (absPath.length() > 1 && absPath.endsWith("/")) {
+            this.absPath = absPath.substring(0, absPath.length() - 1);
         } else {
-            if (absPath.length() > 1 && absPath.endsWith("/")) {
-                this.absPath = absPath.substring(0, absPath.length() - 1);
-            } else {
-                this.absPath = absPath;
-            }
+            this.absPath = absPath;
         }
     }
 
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileProvider.java
index 59dc332..3c26f10 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileProvider.java
@@ -33,7 +33,7 @@ import org.apache.commons.vfs2.provider.local.GenericFileNameParser;
  */
 public abstract class AbstractFileProvider extends AbstractVfsContainer implements FileProvider {
 
-    private static final AbstractFileSystem[] EMPTY_ABSTRACT_FILE_SYSTEMS = new AbstractFileSystem[0];
+    private static final AbstractFileSystem[] EMPTY_ABSTRACT_FILE_SYSTEMS = {};
 
     /**
      * The cached file systems.
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
index d69fbe6..819b185 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
@@ -60,7 +60,7 @@ public abstract class AbstractFileSystem extends AbstractVfsComponent implements
         this(null, null, null);
     }
 
-    private static final FileListener[] EMPTY_FILE_LISTENER_ARRAY = new FileListener[0];
+    private static final FileListener[] EMPTY_FILE_LISTENER_ARRAY = {};
 
     private static final Log LOG = LogFactory.getLog(AbstractFileSystem.class);
 
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/DefaultFileContent.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/DefaultFileContent.java
index 59a456b..7f3db1c 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/DefaultFileContent.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/DefaultFileContent.java
@@ -48,7 +48,7 @@ public final class DefaultFileContent implements FileContent {
      * final int STATE_RANDOM_ACCESS = 3;
      */
 
-    private static final Certificate[] EMPTY_CERTIFICATE_ARRAY = new Certificate[0];
+    private static final Certificate[] EMPTY_CERTIFICATE_ARRAY = {};
     static final int STATE_CLOSED = 0;
     static final int STATE_OPENED = 1;
 
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/RFC2396.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/RFC2396.java
index 3fb6fca..baae1ae 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/RFC2396.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/RFC2396.java
@@ -26,7 +26,7 @@ import org.apache.commons.lang3.ArrayUtils;
  * The RFC 2396 Collected BNF for URI from <a href="https://datatracker.ietf.org/doc/html/rfc2396#appendix-A">Appendix
  * A</a>:
  * </p>
- * 
+ *
  * <pre>
       URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
       absoluteURI   = scheme ":" ( hier_part | opaque_part )
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileProvider.java
index 63cac0b..6b6d4f0 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileProvider.java
@@ -43,7 +43,7 @@ public class FtpFileProvider extends AbstractOriginatingFileProvider {
     /**
      * Authenticator types.
      */
-    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = new UserAuthenticationData.Type[] {
+    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = {
             UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD };
 
     static final Collection<Capability> CAPABILITIES = Collections
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileProvider.java
index 3d6b51b..57ba1bc 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileProvider.java
@@ -38,7 +38,7 @@ import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
 public class HttpFileProvider extends AbstractOriginatingFileProvider {
 
     /** Authenticator information. */
-    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = new UserAuthenticationData.Type[] {
+    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = {
             UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD };
 
     static final Collection<Capability> CAPABILITIES = Collections
@@ -68,7 +68,7 @@ public class HttpFileProvider extends AbstractOriginatingFileProvider {
 
             final String fileScheme = rootName.getScheme();
             final char lastChar = fileScheme.charAt(fileScheme.length() - 1);
-            final String internalScheme = (lastChar == 's' || lastChar == 'S') ? "https" : "http";
+            final String internalScheme = lastChar == 's' || lastChar == 'S' ? "https" : "http";
 
             httpClient = HttpClientFactory.createConnection(internalScheme, rootName.getHostName(),
                     rootName.getPort(),
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http4/Http4FileProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http4/Http4FileProvider.java
index 676ef21..fa043b8 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http4/Http4FileProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http4/Http4FileProvider.java
@@ -93,10 +93,10 @@ public class Http4FileProvider extends AbstractOriginatingFileProvider {
 
     /** Authenticator information. */
     static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES =
-            new UserAuthenticationData.Type[] {
-                    UserAuthenticationData.USERNAME,
-                    UserAuthenticationData.PASSWORD
-                    };
+            {
+            UserAuthenticationData.USERNAME,
+            UserAuthenticationData.PASSWORD
+            };
 
     /** FileProvider capabilities */
     static final Collection<Capability> CAPABILITIES =
@@ -315,7 +315,7 @@ public class Http4FileProvider extends AbstractOriginatingFileProvider {
 
             if (keystoreFileObject != null && keystoreFileObject.exists()) {
                 final String keystorePass = builder.getKeyStorePass(fileSystemOptions);
-                final char[] keystorePassChars = (keystorePass != null) ? keystorePass.toCharArray() : null;
+                final char[] keystorePassChars = keystorePass != null ? keystorePass.toCharArray() : null;
                 sslContextBuilder.loadTrustMaterial(keystoreFileObject, keystorePassChars, TrustAllStrategy.INSTANCE);
             } else {
                 sslContextBuilder.loadTrustMaterial(TrustAllStrategy.INSTANCE);
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http5/Http5FileProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http5/Http5FileProvider.java
index aaf859e..0602fcb 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http5/Http5FileProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http5/Http5FileProvider.java
@@ -89,10 +89,10 @@ public class Http5FileProvider extends AbstractOriginatingFileProvider {
 
     /** Authenticator information. */
     static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES =
-            new UserAuthenticationData.Type[] {
-                    UserAuthenticationData.USERNAME,
-                    UserAuthenticationData.PASSWORD
-                    };
+            {
+            UserAuthenticationData.USERNAME,
+            UserAuthenticationData.PASSWORD
+            };
 
     /** FileProvider capabilities */
     static final Collection<Capability> CAPABILITIES =
@@ -311,7 +311,7 @@ public class Http5FileProvider extends AbstractOriginatingFileProvider {
 
             if (keystoreFileObject != null && keystoreFileObject.exists()) {
                 final String keystorePass = builder.getKeyStorePass(fileSystemOptions);
-                final char[] keystorePassChars = (keystorePass != null) ? keystorePass.toCharArray() : null;
+                final char[] keystorePassChars = keystorePass != null ? keystorePass.toCharArray() : null;
                 sslContextBuilder.loadTrustMaterial(keystoreFileObject, keystorePassChars, TrustAllStrategy.INSTANCE);
             } else {
                 sslContextBuilder.loadTrustMaterial(TrustAllStrategy.INSTANCE);
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
index 5896eac..3047625 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
@@ -128,7 +128,7 @@ public class LocalFile extends AbstractFileObject<LocalFileSystem> {
         // TODO Reuse Apache Commons IO
         // @formatter:off
         return Files.newOutputStream(file.toPath(), append ?
-            new OpenOption[] {StandardOpenOption.CREATE, StandardOpenOption.APPEND} : 
+            new OpenOption[] {StandardOpenOption.CREATE, StandardOpenOption.APPEND} :
             new OpenOption[] {StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING});
         // @formatter:on
     }
@@ -196,7 +196,7 @@ public class LocalFile extends AbstractFileObject<LocalFileSystem> {
 
     /**
      * Determines if this file is a symbolic link.
-     * 
+     *
      * @since 2.4
      */
     @Override
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileProvider.java
index e19fb60..62c0101 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileProvider.java
@@ -42,7 +42,7 @@ public class SftpFileProvider extends AbstractOriginatingFileProvider {
     public static final String ATTR_USER_INFO = "UI";
 
     /** Authentication types. */
-    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = new UserAuthenticationData.Type[] {
+    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = {
             UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD };
 
     /** The provider's capabilities. */
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java
index 54c477f..b2792b7 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java
@@ -778,8 +778,8 @@ public final class SftpFileSystemConfigBuilder extends FileSystemConfigBuilder {
      */
     public void setStrictHostKeyChecking(final FileSystemOptions options, final String hostKeyChecking)
             throws FileSystemException {
-        if (hostKeyChecking == null || (!hostKeyChecking.equals(HOST_KEY_CHECK_ASK)
-                && !hostKeyChecking.equals(HOST_KEY_CHECK_NO) && !hostKeyChecking.equals(HOST_KEY_CHECK_YES))) {
+        if (hostKeyChecking == null || !hostKeyChecking.equals(HOST_KEY_CHECK_ASK)
+                && !hostKeyChecking.equals(HOST_KEY_CHECK_NO) && !hostKeyChecking.equals(HOST_KEY_CHECK_YES)) {
             throw new FileSystemException("vfs.provider.sftp/StrictHostKeyChecking-arg.error", hostKeyChecking);
         }
 
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/tar/Tbz2FileProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/tar/Tbz2FileProvider.java
index 94574cc..bd95861 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/tar/Tbz2FileProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/tar/Tbz2FileProvider.java
@@ -29,7 +29,7 @@ public class Tbz2FileProvider extends CompositeFileProvider {
     /** The provider's capabilities */
     protected static final Collection<Capability> capabilities = TarFileProvider.capabilities;
 
-    private static final String[] SCHEMES = new String[] { "bz2", "tar" };
+    private static final String[] SCHEMES = { "bz2", "tar" };
 
     public Tbz2FileProvider() {
     }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/tar/TgzFileProvider.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/tar/TgzFileProvider.java
index a29e44f..36649a0 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/tar/TgzFileProvider.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/tar/TgzFileProvider.java
@@ -29,7 +29,7 @@ public class TgzFileProvider extends CompositeFileProvider {
     /** The provider's capabilities */
     protected static final Collection<Capability> capabilities = TarFileProvider.capabilities;
 
-    private static final String[] SCHEMES = new String[] { "gz", "tar" };
+    private static final String[] SCHEMES = { "gz", "tar" };
 
     public TgzFileProvider() {
     }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/tasks/DeleteTask.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/tasks/DeleteTask.java
index 5f09109..f45c1ff 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/tasks/DeleteTask.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/tasks/DeleteTask.java
@@ -67,7 +67,7 @@ public class DeleteTask extends VfsTask {
      */
     @Override
     public void execute() throws BuildException {
-        if ((file == null && srcDirUrl == null) || (srcDirUrl != null && filesList == null)) {
+        if ((srcDirUrl == null ? file == null : filesList == null)) {
             final String message = Messages.getString("vfs.tasks/delete.no-source-files.error");
             throw new BuildException(message);
         }
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/CombinedResources.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/CombinedResources.java
index 642b4a0..2023bff 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/CombinedResources.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/CombinedResources.java
@@ -83,7 +83,7 @@ public class CombinedResources extends ResourceBundle {
         if (locale == null) {
             return;
         }
-        final String[] parts = new String[] {locale.getLanguage(), locale.getCountry(), locale.getVariant()};
+        final String[] parts = {locale.getLanguage(), locale.getCountry(), locale.getVariant()};
         final StringBuilder sb = new StringBuilder();
         for (int i = 0; i < 3; i++) {
             sb.append(getResourceName());
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/Os.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/Os.java
index 0e64918..5168b50 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/Os.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/Os.java
@@ -87,7 +87,7 @@ public final class Os {
     private static final OsFamily OS_FAMILY;
     private static final OsFamily[] OS_ALL_FAMILIES;
 
-    private static final OsFamily[] ALL_FAMILIES = new OsFamily[] { OS_FAMILY_DOS, OS_FAMILY_MAC, OS_FAMILY_NETWARE,
+    private static final OsFamily[] ALL_FAMILIES = { OS_FAMILY_DOS, OS_FAMILY_MAC, OS_FAMILY_NETWARE,
             OS_FAMILY_OS2, OS_FAMILY_OSX, OS_FAMILY_UNIX, OS_FAMILY_WINDOWS, OS_FAMILY_WINNT, OS_FAMILY_WIN9X };
 
     static {
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/OsFamily.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/OsFamily.java
index 1ec92f0..50856ca 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/OsFamily.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/OsFamily.java
@@ -28,7 +28,7 @@ public final class OsFamily {
 
     private final String name;
     private final OsFamily[] families;
-    static final OsFamily[] EMPTY_OS_FAMILY_ARRAY = new OsFamily[0];
+    static final OsFamily[] EMPTY_OS_FAMILY_ARRAY = {};
 
     OsFamily(final String name) {
         this.name = name;
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractTestSuite.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractTestSuite.java
index 038ec34..4d9d442 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractTestSuite.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractTestSuite.java
@@ -45,7 +45,7 @@ import junit.framework.TestSuite;
  */
 public abstract class AbstractTestSuite extends TestSetup {
 
-    private static final Thread[] EMPTY_THREAD_ARRAY = new Thread[0];
+    private static final Thread[] EMPTY_THREAD_ARRAY = {};
     public static final String WRITE_TESTS_FOLDER = "write-tests";
     public static final String READ_TESTS_FOLDER = "read-tests";
 
@@ -163,7 +163,7 @@ public abstract class AbstractTestSuite extends TestSetup {
         if (ArrayUtils.isEmpty(threadSnapshot)) {
             return StringUtils.EMPTY;
         }
-        final StringBuffer sb = new StringBuffer(256);
+        final StringBuilder sb = new StringBuilder(256);
         sb.append("Threads still running (" + threadSnapshot.length + ") at " + Instant.now() + ", live threads:");
         sb.append(System.lineSeparator());
 
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/FileObjectEscapeCharacterInPathTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/FileObjectEscapeCharacterInPathTest.java
index 96e4cda..f109c56 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/FileObjectEscapeCharacterInPathTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/FileObjectEscapeCharacterInPathTest.java
@@ -50,17 +50,17 @@ public class FileObjectEscapeCharacterInPathTest {
     /**
      * Test file paths.
      */
-    public static final String[] TEST_FILE_PATHS = new String[] {REL_PATH_SPACE, REL_PATH_GREAT};
+    public static final String[] TEST_FILE_PATHS = {REL_PATH_SPACE, REL_PATH_GREAT};
 
     private static StandardFileSystemManager loadFileSystemManager() throws FileSystemException {
-        StandardFileSystemManager fileSystemManager = new StandardFileSystemManager();
+        final StandardFileSystemManager fileSystemManager = new StandardFileSystemManager();
         fileSystemManager.setLogger(null);
         fileSystemManager.init();
         fileSystemManager.setBaseFile(SystemUtils.getUserDir());
         return fileSystemManager;
     }
 
-    private static File toFile2(FileObject fileObject) throws FileSystemException {
+    private static File toFile2(final FileObject fileObject) throws FileSystemException {
         if (fileObject == null || !"file".equals(fileObject.getURL().getProtocol())) {
             return null;
         }
@@ -68,7 +68,7 @@ public class FileObjectEscapeCharacterInPathTest {
     }
 
     @SuppressWarnings("resource")
-    private void testProviderGetPath(String relPathStr) throws URISyntaxException {
+    private void testProviderGetPath(final String relPathStr) throws URISyntaxException {
         FileSystems.getDefault().provider().getPath(new URI(Paths.get(relPathStr).toAbsolutePath().toUri().toString()));
     }
 
@@ -93,8 +93,8 @@ public class FileObjectEscapeCharacterInPathTest {
         testToFile(fileObject -> fileObject.getPath().toFile());
     }
 
-    private void testToFile(FailableFunction<FileObject, File, IOException> function) throws IOException {
-        for (String testFilePath : TEST_FILE_PATHS) {
+    private void testToFile(final FailableFunction<FileObject, File, IOException> function) throws IOException {
+        for (final String testFilePath : TEST_FILE_PATHS) {
             try (FileSystemManager fileSystemManager = loadFileSystemManager();
                 FileObject fileObject = fileSystemManager.resolveFile(testFilePath)) {
                 assertNotNull(fileObject);
@@ -102,7 +102,7 @@ public class FileObjectEscapeCharacterInPathTest {
                     InputStream inputStream = content.getInputStream()) {
                     assertEquals(TEST_FILE_CONTENT, IOUtils.toString(inputStream, StandardCharsets.UTF_8));
                 }
-                File file = function.apply(fileObject);
+                final File file = function.apply(fileObject);
                 assertNotNull(file);
                 assertEquals(TEST_FILE_CONTENT, FileUtils.readFileToString(file, StandardCharsets.UTF_8));
             }
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/ProviderDeleteTests.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/ProviderDeleteTests.java
index f3edd5a..8c54709 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/ProviderDeleteTests.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/ProviderDeleteTests.java
@@ -23,7 +23,7 @@ import org.junit.Test;
  */
 public class ProviderDeleteTests extends AbstractProviderTestCase {
 
-    private class FileNameSelector implements FileSelector {
+    private static class FileNameSelector implements FileSelector {
         final String basename;
 
         private FileNameSelector(final String basename) {
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/RunTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/RunTest.java
index b9c306a..64ca769 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/RunTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/RunTest.java
@@ -40,7 +40,7 @@ public class RunTest {
         //props.setProperty("test.webdav.uri", "webdav://vfsusr:vfs%2f%25\\te:st@" + ip + "/vfstest");
         props.setProperty("test.sftp.uri", "sftp://vfsusr:vfs%2f%25\\te:st@" + ip + "/vfstest");
 
-        final Test[] tests = new Test[] {
+        final Test[] tests = {
                 // LocalProviderTestCase.suite(),
                 // FtpProviderTestCase.suite(),
                 // UrlProviderHttpTestCase.suite(),
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
index 6a7da1f..ac9467b 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
@@ -33,7 +33,6 @@ import org.apache.commons.vfs2.FileSystemManager;
 import org.apache.commons.vfs2.VFS;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
 
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
index 7667fe7..2399bca 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
@@ -88,8 +88,8 @@ public class DefaultFileSystemManagerTest {
         testCreateFileSystem("src/test/resources/test-data/bla.txt.bz2", Bzip2FileObject.class);
     }
 
-    private void testCreateFileSystem(final String path, Class<?> clazz) throws FileSystemException {
-        FileSystemManager manager = VFS.getManager();
+    private void testCreateFileSystem(final String path, final Class<?> clazz) throws FileSystemException {
+        final FileSystemManager manager = VFS.getManager();
         try (FileObject localFileObject = manager.resolveFile(new File(path).getAbsolutePath());
                 FileObject fileObject = manager.createFileSystem(localFileObject)) {
             Assert.assertEquals(clazz, fileObject.getClass());
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/VfsClassLoaderTests.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/VfsClassLoaderTests.java
index 75323eb..e097237 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/VfsClassLoaderTests.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/VfsClassLoaderTests.java
@@ -113,7 +113,7 @@ public class VfsClassLoaderTests extends AbstractProviderTestCase {
         // to returning resources for META-INF/MANIFEST.MF (see VFS-500)
         // so we use our own which is guaranteed to not return any hit
         final ClassLoader mockClassloader = new MockClassloader();
-        final FileObject[] search = new FileObject[] { nestedJar, testJar };
+        final FileObject[] search = { nestedJar, testJar };
         final VFSClassLoader loader = new VFSClassLoader(search, getManager(), mockClassloader);
 
         final Enumeration<URL> urls = loader.getResources("META-INF/MANIFEST.MF");
@@ -150,7 +150,7 @@ public class VfsClassLoaderTests extends AbstractProviderTestCase {
         assertFalse(manager.canCreateFileSystem(dir));
 
         // prepare classloader
-        final FileObject[] search = new FileObject[] { dir };
+        final FileObject[] search = { dir };
         final ClassLoader mockClassloader = new MockClassloader();
         final VFSClassLoader loader = new VFSClassLoader(search, getManager(), mockClassloader);
 
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/WindowsFileNameTests.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/WindowsFileNameTests.java
index e938e7a..3a35ea4 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/WindowsFileNameTests.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/WindowsFileNameTests.java
@@ -65,7 +65,7 @@ public class WindowsFileNameTests extends AbstractProviderTestCase {
     @Test
     public void testWindowsRoots() throws Exception {
         // valid URI forms of the filesystem root
-        final String[] tests = new String[] { "file:///C:/", "file://C:/", "file:/C:/", "file:C:/" };
+        final String[] tests = { "file:///C:/", "file://C:/", "file:/C:/", "file:C:/" };
 
         for (final String name : tests) {
             final DefaultFileSystemManager manager = getManager();
@@ -91,7 +91,7 @@ public class WindowsFileNameTests extends AbstractProviderTestCase {
 
     @Test
     public void testWindowsWrongRoots() throws Exception {
-        final String[] tests = new String[] { "file:///C:", "file://C:", "file:/C:", "file:C:" };
+        final String[] tests = { "file:///C:", "file://C:", "file:/C:", "file:C:" };
 
         for (final String name : tests) {
             try {
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ram/CustomRamProviderTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ram/CustomRamProviderTest.java
index b089873..48ce1f8 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ram/CustomRamProviderTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ram/CustomRamProviderTest.java
@@ -49,7 +49,7 @@ import org.junit.Test;
  * Custom tests for RamProvider.
  */
 public class CustomRamProviderTest {
-    private static final byte[] NON_EMPTY_FILE_CONTENT = new byte[] { 1, 2, 3 };
+    private static final byte[] NON_EMPTY_FILE_CONTENT = { 1, 2, 3 };
 
     /** List of URL special characters encoded for AbstractFileObject#getChild */
     final char[] ENC = { /*'#',*/ '!', '?'};
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilderTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilderTest.java
index 2b0c666..4a7271e 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilderTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilderTest.java
@@ -39,7 +39,7 @@ import org.junit.Test;
  * Some tests for the DelegatingFileSystemOptionsBuilder
  */
 public class DelegatingFileSystemOptionsBuilderTest {
-    private static final String[] schemes = new String[] { "http", "ftp", "file", "zip", "tar", "tgz", "bz2", "gz",
+    private static final String[] schemes = { "http", "ftp", "file", "zip", "tar", "tgz", "bz2", "gz",
             "jar", "tmp", "ram" };
 
     private StandardFileSystemManager fsm;
@@ -90,7 +90,7 @@ public class DelegatingFileSystemOptionsBuilderTest {
 
     @Test
     public void testDelegatingGood() throws Throwable {
-        final String[] identityPaths = new String[] { "/file1", "/file2", };
+        final String[] identityPaths = { "/file1", "/file2", };
 
         final FileSystemOptions opts = new FileSystemOptions();
         final DelegatingFileSystemOptionsBuilder delgate = new DelegatingFileSystemOptionsBuilder(fsm);

[commons-vfs] 10/16: Make starting and stopping a DefaultFileMonitor safer to use from multiple threads.

Posted by gg...@apache.org.
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-vfs.git

commit 63c6912d9580b753ca5fb740be392874478c3235
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 10:44:24 2021 -0500

    Make starting and stopping a DefaultFileMonitor safer to use from
    multiple threads.
---
 .../main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
index a1200cf..4efb139 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
@@ -545,7 +545,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     /**
      * Starts monitoring the files that have been added.
      */
-    public void start() {
+    public synchronized void start() {
         if (this.monitorThread == null) {
             this.monitorThread = new Thread(this);
             this.monitorThread.setDaemon(true);
@@ -557,7 +557,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     /**
      * Stops monitoring the files that have been added.
      */
-    public void stop() {
+    public synchronized void stop() {
         this.runFlag = false;
         if (this.monitorThread != null) {
             this.monitorThread.interrupt();

[commons-vfs] 09/16: Better internal name.

Posted by gg...@apache.org.
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-vfs.git

commit d72a9d47df14b8ab923965a848bb440f5b194285
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 10:35:24 2021 -0500

    Better internal name.
---
 .../java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java  | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
index db04237..a1200cf 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
@@ -294,7 +294,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     /**
      * A flag used to determine if the monitor thread should be running.
      */
-    private volatile boolean shouldRun = true; // used for inter-thread communication
+    private volatile boolean runFlag = true; // used for inter-thread communication
 
     /**
      * A flag used to determine if adding files to be monitored should be recursive.
@@ -456,7 +456,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
      */
     @Override
     public void run() {
-        mainloop: while (!monitorThread.isInterrupted() && this.shouldRun) {
+        mainloop: while (!monitorThread.isInterrupted() && this.runFlag) {
             // For each entry in the map
             final Object[] fileNames;
             synchronized (this.monitorMap) {
@@ -480,7 +480,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
                     }
                 }
 
-                if (monitorThread.isInterrupted() || !this.shouldRun) {
+                if (monitorThread.isInterrupted() || !this.runFlag) {
                     continue mainloop;
                 }
             }
@@ -500,7 +500,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
             }
         }
 
-        this.shouldRun = true;
+        this.runFlag = true;
     }
 
     /**
@@ -558,7 +558,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
      * Stops monitoring the files that have been added.
      */
     public void stop() {
-        this.shouldRun = false;
+        this.runFlag = false;
         if (this.monitorThread != null) {
             this.monitorThread.interrupt();
             try {

[commons-vfs] 02/16: Sort.

Posted by gg...@apache.org.
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-vfs.git

commit 3655a83ab469d66d9b71fee85d30ccd6e43c9a90
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 09:40:41 2021 -0500

    Sort.
---
 .../org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java     | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
index ac9467b..404994e 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
@@ -42,8 +42,8 @@ import org.junit.Test;
 public class DefaultFileMonitorTest {
 
     private static class CountingListener implements FileListener {
-        private final AtomicLong created = new AtomicLong();
         private final AtomicLong changed = new AtomicLong();
+        private final AtomicLong created = new AtomicLong();
         private final AtomicLong deleted = new AtomicLong();
 
         @Override
@@ -63,10 +63,11 @@ public class DefaultFileMonitorTest {
     }
 
     private enum Status {
-        CHANGED, DELETED, CREATED
+        CHANGED, CREATED, DELETED
     }
 
     private class TestFileListener implements FileListener {
+
         @Override
         public void fileChanged(final FileChangeEvent event) throws Exception {
             status = Status.CHANGED;
@@ -87,10 +88,10 @@ public class DefaultFileMonitorTest {
 
     private FileSystemManager fileSystemManager;
 
-    private File testDir;
-
     private volatile Status status;
 
+    private File testDir;
+
     private File testFile;
 
     private void deleteTestFileIfPresent() {

[commons-vfs] 06/16: Fix typos in error messages.

Posted by gg...@apache.org.
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-vfs.git

commit 1489c552fc243f417eaaf641414460bdb4010716
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 10:17:32 2021 -0500

    Fix typos in error messages.
---
 .../resources/org/apache/commons/vfs2/Resources.properties | 14 +++++++-------
 src/changes/changes.xml                                    |  3 +++
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/commons-vfs2/src/main/resources/org/apache/commons/vfs2/Resources.properties b/commons-vfs2/src/main/resources/org/apache/commons/vfs2/Resources.properties
index 51e1b8b..7904775 100644
--- a/commons-vfs2/src/main/resources/org/apache/commons/vfs2/Resources.properties
+++ b/commons-vfs2/src/main/resources/org/apache/commons/vfs2/Resources.properties
@@ -24,7 +24,7 @@ vfs.provider/random-access-not-supported.error=The file type does not support ra
 vfs.provider/random-access-read-not-supported.error=The file type does not support read in random access mode.
 vfs.provider/random-access-write-not-supported.error=The file type does not support write in random access mode.
 vfs.provider/create-folder-not-supported.error=This file type does not support folder creation.
-vfs.provider/get-last-modified-not-supported.error=This file type does not support retriving last modified time.
+vfs.provider/get-last-modified-not-supported.error=This file type does not support retrieving last modified time.
 vfs.provider/set-last-modified-not-supported.error=This file type does not support setting last modified time.
 vfs.provider/set-attribute-not-supported.error=This file type does not support setting attributes.
 vfs.provider/remove-attribute-not-supported.error=This file type does not support removing attributes.
@@ -100,10 +100,10 @@ vfs.provider/invalid-absolute-uri.error=Invalid absolute URI "{0}".
 vfs.provider/not-layered-fs.error=File system for URL scheme "{0}" is not a layered file system.
 vfs.provider/no-config-builder.error=File provider for URL scheme "{0}" does not provide a configuration builder.
 vfs.provider/config-key-invalid.error=The configuration builder for scheme "{0}" has no option "{1}".
-vfs.provider/config-value-invalid.error=The delegating configuration builder cant convert value "{2}" for key "{1}" scheme "{0}".
+vfs.provider/config-value-invalid.error=The delegating configuration builder can't convert value "{2}" for key "{1}" scheme "{0}".
 vfs.provider/config-too-many-values.error=Too many values for configuration builder for scheme "{0}" key "{1}".
 vfs.provider/config-unexpected-primitive.error=Unexpected primitive "{0}".
-vfs.provider/config-unexpected-value-class.error=Cant convert a "{0}" value for scheme "{1}" key "{2}".
+vfs.provider/config-unexpected-value-class.error=Can't convert a "{0}" value for scheme "{1}" key "{2}".
 
 # AbstractFileSystem
 vfs.provider/files-cache-missing.error=No files-cache implementation set.
@@ -145,7 +145,7 @@ vfs.impl/unknown-scheme.error=Unknown scheme "{0}" in URI "{1}".
 vfs.impl/find-rel-file.error=Could not find file with URI "{0}" because it is a relative path, and no base URI was provided.
 vfs.impl/multiple-providers-for-scheme.error=Multiple providers registered for URL scheme "{0}".
 vfs.impl/configuration-already-set.error=FilesCache implementation already set.
-vfs.impl/configuration-already-in-use.error=The configuration is already attached to an filesystemmanager. You cant change it anymore.
+vfs.impl/configuration-already-in-use.error=The configuration is already attached to a file system manager. You can't change it anymore.
 vfs.impl/unknown-provider.error=No file provider is registered with URI scheme "{0}" to handle file "{1}".
 vfs.impl/no-provider-for-file.error=Could not find a file provider that can handle file "{0}".
 vfs.impl/no-local-file-provider.error=Could not find a file provider which can handle local files.
@@ -153,8 +153,8 @@ vfs.impl/no-replicator.error=No file replicator configured.
 vfs.impl/no-temp-file-store.error=No temporary file store configured.
 vfs.impl/replicate-file.error=Could not replicate "{0}".
 vfs.impl/delete-temp.warn=Could not clean up temporary file "{0}".
-vfs.impl/init-replicator.error=Could not initialise file replicator.
-vfs.impl/already-inited.error=Manager already inited, cant change the configuration now.
+vfs.impl/init-replicator.error=Could not initialize file replicator.
+vfs.impl/already-inited.error=Manager already initialized, can't change the configuration now.
 vfs.impl/invalid-decorator.error="{0}" is not a valid decorator. It has to extend "DecoratedFileObject" and must provide a single argument constructor which takes a "FileObject"
 vfs.impl/temp-dir.debug=Using "{0}" as temporary files store.
 
@@ -301,4 +301,4 @@ vfs.selectors/filefilter.missing.error=Configure a fileFilter or override accept
 
 # Utils
 vfs.util/find-abstract-file-object.error=Object "{0}" did not extend from AbstractFileObject.
-vfs.util/missing-capability.error=The Filesystem does not provide the required capability "{0}".
+vfs.util/missing-capability.error=The file system does not provide the required capability "{0}".
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ed41182..ee8cb29 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -62,6 +62,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" issue="VFS-793" dev="ggregory" due-to="Vitali Nashkevich, Gary Gregory">
         GenericFileName.getURI() returns invalid URI.
       </action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">
+        Fix typos in error messages.
+      </action>
       <!-- ADD -->
       <action type="add" dev="ggregory" due-to="Seth Falco">
         Add vscode files to gitignore #205.

[commons-vfs] 04/16: Javadoc.

Posted by gg...@apache.org.
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-vfs.git

commit ebb0d40f4b2f89267c51e58050f6daa78c3e9e09
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 09:46:43 2021 -0500

    Javadoc.
---
 .../commons/vfs2/impl/DefaultFileMonitor.java      | 28 +++++++++++++---------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
index 8305f87..b26dc5e 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
@@ -33,26 +33,31 @@ import org.apache.commons.vfs2.provider.AbstractFileSystem;
  * A polling {@link FileMonitor} implementation.
  * <p>
  * The DefaultFileMonitor is a Thread based polling file system monitor with a 1 second delay.
+ * </p>
  *
  * <h2>Design:</h2>
- *
+ * <p>
  * There is a Map of monitors known as FileMonitorAgents. With the thread running, each FileMonitorAgent object is asked
  * to "check" on the file it is responsible for. To do this check, the cache is cleared.
+ * </p>
  * <ul>
  * <li>If the file existed before the refresh and it no longer exists, a delete event is fired.</li>
  * <li>If the file existed before the refresh and it still exists, check the last modified timestamp to see if that has
  * changed.</li>
  * <li>If it has, fire a change event.</li>
  * </ul>
+ * <p>
  * With each file delete, the FileMonitorAgent of the parent is asked to re-build its list of children, so that they can
  * be accurately checked when there are new children.
+ * </p>
  * <p>
  * New files are detected during each "check" as each file does a check for new children. If new children are found,
  * create events are fired recursively if recursive descent is enabled.
+ * </p>
  * <p>
  * For performance reasons, added a delay that increases as the number of files monitored increases. The default is a
  * delay of 1 second for every 1000 files processed.
- *
+ * </p>
  * <h2>Example usage:</h2>
  *
  * <pre>
@@ -68,6 +73,7 @@ import org.apache.commons.vfs2.provider.AbstractFileSystem;
  * <i>(where CustomFileListener is a class that implements the FileListener interface.)</i>
  */
 public class DefaultFileMonitor implements Runnable, FileMonitor {
+
     private static final Log LOG = LogFactory.getLog(DefaultFileMonitor.class);
 
     private static final long DEFAULT_DELAY = 1000;
@@ -120,7 +126,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     private final FileListener listener;
 
     /**
-     * Creates a new instance with the given listener.
+     * Constructs a new instance with the given listener.
      *
      * @param listener the listener.
      */
@@ -129,7 +135,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * Access method to get the recursive setting when adding files for monitoring.
+     * Tests the recursive setting when adding files for monitoring.
      *
      * @return true if monitoring is enabled for children.
      */
@@ -138,7 +144,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * Access method to set the recursive setting when adding files for monitoring.
+     * Sets the recursive setting when adding files for monitoring.
      *
      * @param newRecursive true if monitoring should be enabled for children.
      */
@@ -147,7 +153,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * Access method to get the current FileListener object notified when there are changes with the files added.
+     * Gets the current FileListener object notified when there are changes with the files added.
      *
      * @return The FileListener.
      */
@@ -226,7 +232,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * Get the delay between runs.
+     * Gets the delay between runs.
      *
      * @return The delay period.
      */
@@ -235,7 +241,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * Set the delay between runs.
+     * Sets the delay between runs.
      *
      * @param delay The delay period.
      */
@@ -244,7 +250,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * get the number of files to check per run.
+     * Gets the number of files to check per run.
      *
      * @return The number of files to check per iteration.
      */
@@ -253,7 +259,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
     }
 
     /**
-     * set the number of files to check per run. a additional delay will be added if there are more files to check
+     * Sets the number of files to check per run. a additional delay will be added if there are more files to check
      *
      * @param checksPerRun a value less than 1 will disable this feature
      */
@@ -399,7 +405,7 @@ public class DefaultFileMonitor implements Runnable, FileMonitor {
         }
 
         /**
-         * Clear the cache and re-request the file object
+         * Clear the cache and re-request the file object.
          */
         private void refresh() {
             try {

[commons-vfs] 15/16: Write test fixture in one JRE API call.

Posted by gg...@apache.org.
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-vfs.git

commit 4d37b32b7c5c20de1292e78941f191e20fb6d522
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 11:51:04 2021 -0500

    Write test fixture in one JRE API call.
    
    Refactor commons test code.
---
 .../commons/vfs2/impl/DefaultFileMonitorTest.java  | 37 ++++++++++++----------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
index 6418703..bd0ee88 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
@@ -21,9 +21,9 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
@@ -104,6 +104,10 @@ public class DefaultFileMonitorTest {
         }
     }
 
+    private Status getStatus() {
+        return status.get();
+    }
+
     /**
      * VFS-299: Handlers are not removed. One instance is {@link DefaultFileMonitor#removeFile(FileObject)}.
      *
@@ -170,11 +174,15 @@ public class DefaultFileMonitorTest {
         }
     }
 
+    private void resetStatus() {
+        status.set(null);
+    }
+
     @Before
     public void setUp() throws Exception {
         fileSystemManager = VFS.getManager();
         testDir = AbstractVfsTestCase.getTestDirectoryFile();
-        status.set(null);
+        resetStatus();
         testFile = new File(testDir, "testReload.properties");
         deleteTestFileIfPresent();
     }
@@ -193,11 +201,11 @@ public class DefaultFileMonitorTest {
                 monitor.setRecursive(false);
                 monitor.addFile(fileObject);
                 monitor.start();
-                status.set(null);
+                resetStatus();
                 Thread.sleep(DELAY_MILLIS * 5);
                 testFile.delete();
                 Thread.sleep(DELAY_MILLIS * 30);
-                assertNull("Event should not have occurred", status.get());
+                assertNull("Event should not have occurred", getStatus());
             }
         }
     }
@@ -211,11 +219,11 @@ public class DefaultFileMonitorTest {
                 monitor.setRecursive(true);
                 monitor.addFile(fileObj);
                 monitor.start();
-                status.set(null);
+                resetStatus();
                 Thread.sleep(DELAY_MILLIS * 5);
                 testFile.delete();
                 waitFor(Status.DELETED, DELAY_MILLIS * 30);
-                status.set(null);
+                resetStatus();
                 Thread.sleep(DELAY_MILLIS * 5);
                 writeToFile(testFile);
                 waitFor(Status.CREATED, DELAY_MILLIS * 30);
@@ -309,10 +317,10 @@ public class DefaultFileMonitorTest {
                 monitor.start();
                 writeToFile(testFile);
                 waitFor(Status.CREATED, DELAY_MILLIS * 10);
-                status.set(null);
+                resetStatus();
                 testFile.delete();
                 waitFor(Status.DELETED, DELAY_MILLIS * 10);
-                status.set(null);
+                resetStatus();
                 Thread.sleep(DELAY_MILLIS * 5);
                 monitor.addFile(fileObject);
                 writeToFile(testFile);
@@ -322,7 +330,7 @@ public class DefaultFileMonitorTest {
     }
 
     private void waitFor(final Status expected, final long timeoutMillis) throws InterruptedException {
-        if (expected == status.get()) {
+        if (expected == getStatus()) {
             return;
         }
         long remaining = timeoutMillis;
@@ -330,19 +338,16 @@ public class DefaultFileMonitorTest {
         while (remaining > 0) {
             Thread.sleep(interval);
             remaining -= interval;
-            if (expected == status.get()) {
+            if (expected == getStatus()) {
                 return;
             }
         }
-        assertNotNull("No event occurred", status.get());
-        assertEquals("Incorrect event " + status, expected, status.get());
+        assertNotNull("No event occurred", getStatus());
+        assertEquals("Incorrect event " + getStatus(), expected, getStatus());
     }
 
     private void writeToFile(final File file) throws IOException {
-        // assertTrue(file.delete());
-        try (final BufferedWriter out = Files.newBufferedWriter(file.toPath())) {
-            out.write("string=value1");
-        }
+        Files.write(file.toPath(), "string=value1".getBytes(StandardCharsets.UTF_8));
     }
 
 }

[commons-vfs] 07/16: LocalFile: Fix exception message "Unknown message with code" and use an actual message code.

Posted by gg...@apache.org.
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-vfs.git

commit 1a92b8c8cedb911ef798940a464390af3835b7cb
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 10:25:09 2021 -0500

    LocalFile: Fix exception message "Unknown message with code" and use an
    actual message code.
---
 .../main/java/org/apache/commons/vfs2/provider/local/LocalFile.java    | 2 +-
 src/changes/changes.xml                                                | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
index 3047625..dc60775 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
@@ -116,7 +116,7 @@ public class LocalFile extends AbstractFileObject<LocalFileSystem> {
         try {
             return Files.getLastModifiedTime(file.toPath()).toMillis();
         } catch (final IOException e) {
-            throw new FileSystemException(file.toString(), e);
+            throw new FileSystemException("vfs.provider/get-last-modified.error", file, e);
         }
     }
 
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ee8cb29..2e499ec 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -65,6 +65,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="ggregory" due-to="Gary Gregory">
         Fix typos in error messages.
       </action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">
+        LocalFile: Fix exception message "Unknown message with code" and use an actual message code.
+      </action>
       <!-- ADD -->
       <action type="add" dev="ggregory" due-to="Seth Falco">
         Add vscode files to gitignore #205.

[commons-vfs] 03/16: Drop old in-line comment.

Posted by gg...@apache.org.
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-vfs.git

commit c7d0f3077b3b94f5bdef35ec462fc4dccc6295f6
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Nov 26 09:43:09 2021 -0500

    Drop old in-line comment.
---
 .../test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java   | 1 -
 1 file changed, 1 deletion(-)

diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
index 404994e..9352bc7 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java
@@ -187,7 +187,6 @@ public class DefaultFileMonitorTest {
 
     @After
     public void tearDown() {
-        // fileSystemManager.close();
         deleteTestFileIfPresent();
     }