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 42630be5ff865ff122a4cdd5c6ddebb3840198ed
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Fri Feb 19 11:08:43 2021 -0500

    Use java.time.Duration for timeouts.
    
    - [HTTP4] Add
    Http4FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions,
    Duration) and deprecate Integer version.
    - [HTTP4] Add
    Http4FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration)
    and deprecate Integer version.
    - [HTTP4] Add
    Http4FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions)
    and deprecate Integer version.
    - [HTTP4] Add
    Http4FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and
    deprecate Integer version.
---
 .../vfs2/provider/http4/Http4FileProvider.java     | 13 ++--
 .../http4/Http4FileSystemConfigBuilder.java        | 69 +++++++++++++++++++---
 .../vfs2/provider/http4/Http4ProviderTestCase.java | 22 ++++++-
 src/changes/changes.xml                            | 12 ++++
 4 files changed, 101 insertions(+), 15 deletions(-)

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 91e3a38..1a2c11d 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
@@ -42,6 +42,7 @@ import org.apache.commons.vfs2.UserAuthenticationData;
 import org.apache.commons.vfs2.UserAuthenticator;
 import org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider;
 import org.apache.commons.vfs2.provider.GenericFileName;
+import org.apache.commons.vfs2.util.DurationUtils;
 import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
 import org.apache.http.ConnectionReuseStrategy;
 import org.apache.http.Header;
@@ -112,16 +113,18 @@ public class Http4FileProvider extends 
AbstractOriginatingFileProvider {
     }
 
     private HttpClientConnectionManager createConnectionManager(final 
Http4FileSystemConfigBuilder builder,
-            final FileSystemOptions fileSystemOptions) throws 
FileSystemException {
+        final FileSystemOptions fileSystemOptions) {
         final PoolingHttpClientConnectionManager connManager = new 
PoolingHttpClientConnectionManager();
         
connManager.setMaxTotal(builder.getMaxTotalConnections(fileSystemOptions));
         
connManager.setDefaultMaxPerRoute(builder.getMaxConnectionsPerHost(fileSystemOptions));
 
+        // @formatter:off
         final SocketConfig socketConfig =
                 SocketConfig
                 .custom()
-                .setSoTimeout(builder.getSoTimeout(fileSystemOptions))
+                
.setSoTimeout(DurationUtils.toMillisInt(builder.getSoTimeoutDuration(fileSystemOptions)))
                 .build();
+        // @formatter:on
 
         connManager.setDefaultSocketConfig(socketConfig);
 
@@ -141,10 +144,10 @@ public class Http4FileProvider extends 
AbstractOriginatingFileProvider {
     }
 
     private RequestConfig createDefaultRequestConfig(final 
Http4FileSystemConfigBuilder builder,
-            final FileSystemOptions fileSystemOptions) {
+        final FileSystemOptions fileSystemOptions) {
         return RequestConfig.custom()
-                
.setConnectTimeout(builder.getConnectionTimeout(fileSystemOptions))
-                .build();
+            
.setConnectTimeout(DurationUtils.toMillisInt(builder.getConnectionTimeoutDuration(fileSystemOptions)))
+            .build();
     }
 
     private HostnameVerifier createHostnameVerifier(final 
Http4FileSystemConfigBuilder builder,
diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http4/Http4FileSystemConfigBuilder.java
 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http4/Http4FileSystemConfigBuilder.java
index 9506a9d..f5a41bc 100644
--- 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http4/Http4FileSystemConfigBuilder.java
+++ 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http4/Http4FileSystemConfigBuilder.java
@@ -17,6 +17,7 @@
 package org.apache.commons.vfs2.provider.http4;
 
 import java.security.KeyStore;
+import java.time.Duration;
 
 import org.apache.commons.vfs2.FileSystem;
 import org.apache.commons.vfs2.FileSystemConfigBuilder;
@@ -140,12 +141,12 @@ public class Http4FileSystemConfigBuilder extends 
FileSystemConfigBuilder {
     /**
      * The default value for {@link #CONNECTION_TIMEOUT} configuration.
      */
-    private static final int DEFAULT_CONNECTION_TIMEOUT = 0;
+    private static final Duration DEFAULT_CONNECTION_TIMEOUT = Duration.ZERO;
 
     /**
      * The default value for {@link #SO_TIMEOUT} configuration.
      */
-    private static final int DEFAULT_SO_TIMEOUT = 0;
+    private static final Duration DEFAULT_SO_TIMEOUT = Duration.ZERO;
 
     /**
      * The default value for {@link #KEEP_ALIVE} configuration.
@@ -207,9 +208,23 @@ public class Http4FileSystemConfigBuilder extends 
FileSystemConfigBuilder {
      *
      * @param opts The FileSystem options.
      * @return The connection timeout.
+     * @deprecated Use {@link 
#getConnectionTimeoutDuration(FileSystemOptions)}.
      */
+    @Deprecated
     public int getConnectionTimeout(final FileSystemOptions opts) {
-        return getInteger(opts, CONNECTION_TIMEOUT, 
DEFAULT_CONNECTION_TIMEOUT);
+        return getDurationInteger(opts, CONNECTION_TIMEOUT, 
DEFAULT_CONNECTION_TIMEOUT);
+    }
+
+    /**
+    /**
+     * Gets the connection timeout.
+     *
+     * @param opts The FileSystem options.
+     * @return The connection timeout.
+     * @since 2.8.0
+     */
+    public Duration getConnectionTimeoutDuration(final FileSystemOptions opts) 
{
+        return getDuration(opts, CONNECTION_TIMEOUT, 
DEFAULT_CONNECTION_TIMEOUT);
     }
 
     /**
@@ -331,9 +346,22 @@ public class Http4FileSystemConfigBuilder extends 
FileSystemConfigBuilder {
      *
      * @param opts The FileSystemOptions.
      * @return The socket timeout.
+     * @deprecated Use {@link #getSoTimeoutDuration(FileSystemOptions)}.
      */
+    @Deprecated
     public int getSoTimeout(final FileSystemOptions opts) {
-        return getInteger(opts, SO_TIMEOUT, DEFAULT_SO_TIMEOUT);
+        return getDurationInteger(opts, SO_TIMEOUT, DEFAULT_SO_TIMEOUT);
+    }
+
+    /**
+     * Gets the socket timeout.
+     *
+     * @param opts The FileSystemOptions.
+     * @return The socket timeout.
+     * @since 2.8.0
+     */
+    public Duration getSoTimeoutDuration(final FileSystemOptions opts) {
+        return getDuration(opts, SO_TIMEOUT, DEFAULT_SO_TIMEOUT);
     }
 
     /**
@@ -388,13 +416,26 @@ public class Http4FileSystemConfigBuilder extends 
FileSystemConfigBuilder {
     }
 
     /**
-     * The connection timeout.
+     * Sets the connection timeout.
+     *
+     * @param opts The FileSystem options.
+     * @param connectionTimeout The connection timeout.
+     * @since 2.8.0
+     */
+    public void setConnectionTimeout(final FileSystemOptions opts, final 
Duration connectionTimeout) {
+        setParam(opts, CONNECTION_TIMEOUT, connectionTimeout);
+    }
+
+    /**
+     * Sets the connection timeout.
      *
      * @param opts The FileSystem options.
      * @param connectionTimeout The connection timeout.
+     * @deprecated Use {@link #setConnectionTimeout(FileSystemOptions, 
Duration)}.
      */
+    @Deprecated
     public void setConnectionTimeout(final FileSystemOptions opts, final int 
connectionTimeout) {
-        setParam(opts, CONNECTION_TIMEOUT, Integer.valueOf(connectionTimeout));
+        setConnectionTimeout(opts, Duration.ofMillis(connectionTimeout));
     }
 
     /**
@@ -548,13 +589,25 @@ public class Http4FileSystemConfigBuilder extends 
FileSystemConfigBuilder {
     }
 
     /**
-     * The socket timeout.
+     * Sets the socket timeout.
+     *
+     * @param opts The FileSystem options.
+     * @param soTimeout socket timeout.
+     */
+    public void setSoTimeout(final FileSystemOptions opts, final Duration 
soTimeout) {
+        setParam(opts, SO_TIMEOUT, soTimeout);
+    }
+
+    /**
+     * Sets the socket timeout.
      *
      * @param opts The FileSystem options.
      * @param soTimeout socket timeout.
+     * @deprecated Use {@link #setSoTimeout(FileSystemOptions, Duration)}.
      */
+    @Deprecated
     public void setSoTimeout(final FileSystemOptions opts, final int 
soTimeout) {
-        setParam(opts, SO_TIMEOUT, Integer.valueOf(soTimeout));
+        setSoTimeout(opts, Duration.ofMillis(soTimeout));
     }
 
     /**
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http4/Http4ProviderTestCase.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http4/Http4ProviderTestCase.java
index 89a7c86..4b35f31 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http4/Http4ProviderTestCase.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http4/Http4ProviderTestCase.java
@@ -17,6 +17,7 @@
 package org.apache.commons.vfs2.provider.http4;
 
 import java.io.File;
+import java.time.Duration;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.vfs2.AbstractProviderTestConfig;
@@ -143,24 +144,41 @@ public class Http4ProviderTestCase extends 
AbstractProviderTestConfig {
     }
 
     /** Ensure VFS-453 options are present. */
+    @SuppressWarnings("deprecation")
     public void testHttpTimeoutConfig() {
         final FileSystemOptions opts = new FileSystemOptions();
         final Http4FileSystemConfigBuilder builder = 
Http4FileSystemConfigBuilder.getInstance();
 
         // ensure defaults are 0
         assertEquals(0, builder.getConnectionTimeout(opts));
+        assertEquals(Duration.ZERO, 
builder.getConnectionTimeoutDuration(opts));
         assertEquals(0, builder.getSoTimeout(opts));
+        assertEquals(Duration.ZERO, builder.getSoTimeoutDuration(opts));
         assertEquals("Jakarta-Commons-VFS", builder.getUserAgent(opts));
 
+        // Set int timeouts
         builder.setConnectionTimeout(opts, 60000);
         builder.setSoTimeout(opts, 60000);
         builder.setUserAgent(opts, "foo/bar");
 
         // ensure changes are visible
-        assertEquals(60000, builder.getConnectionTimeout(opts));
-        assertEquals(60000, builder.getSoTimeout(opts));
+        assertEquals(60_000, builder.getConnectionTimeout(opts));
+        assertEquals(60_000, 
builder.getConnectionTimeoutDuration(opts).toMillis());
+        assertEquals(60_000, builder.getSoTimeout(opts));
+        assertEquals(60_000, builder.getSoTimeoutDuration(opts).toMillis());
         assertEquals("foo/bar", builder.getUserAgent(opts));
 
+        // Set Duration timeouts
+        builder.setConnectionTimeout(opts, Duration.ofMinutes(1));
+        builder.setSoTimeout(opts, Duration.ofMinutes(1));
+        builder.setUserAgent(opts, "foo/bar");
+
+        // ensure changes are visible
+        assertEquals(60_000, builder.getConnectionTimeout(opts));
+        assertEquals(60_000, 
builder.getConnectionTimeoutDuration(opts).toMillis());
+        assertEquals(60_000, builder.getSoTimeout(opts));
+        assertEquals(60_000, builder.getSoTimeoutDuration(opts).toMillis());
+        assertEquals("foo/bar", builder.getUserAgent(opts));
     }
 
     private void testResloveFolderSlash(final String uri, final boolean 
followRedirect) throws FileSystemException {
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 422e420..eb41a47 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -130,6 +130,18 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" due-to="Gary Gregory" type="add">
         [SFTP] Add 
SftpFileSystemConfigBuilder.getSessionTimeout(FileSystemOptions) and deprecate 
Integer version.
       </action>
+      <action dev="ggregory" due-to="Gary Gregory" type="add">
+        [HTTP4] Add 
Http4FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) 
and deprecate Integer version.
+      </action>
+      <action dev="ggregory" due-to="Gary Gregory" type="add">
+        [HTTP4] Add 
Http4FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and 
deprecate Integer version.
+      </action>
+      <action dev="ggregory" due-to="Gary Gregory" type="add">
+        [HTTP4] Add 
Http4FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions) 
and deprecate Integer version.
+      </action>
+      <action dev="ggregory" due-to="Gary Gregory" type="add">
+        [HTTP4] Add 
Http4FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and 
deprecate Integer version.
+      </action>
       <!-- UPDATES -->
       <action dev="ggregory" due-to="PeterAlfredLee" type="update">
         Modify some code use for-each loop and stream API #142.

Reply via email to