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 643eb5068809b955ae3d98408f7e006d154f1110
Author: Gary Gregory <[email protected]>
AuthorDate: Thu Feb 11 21:08:12 2021 -0500

    - [HTTP] Add
    HttpFileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions,
    Duration) and deprecate Integer version.
    - [HTTP] Add HttpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions,
    Duration) and deprecate Integer version.
    - [HTTP] Add
    HttpFileSystemConfigBuilder.getConnectionTimeout(FileSystemOptions) and
    deprecate Integer version.
    - [HTTP] Add
    HttpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and
    deprecate Integer version.
---
 .../vfs2/provider/http/HttpClientFactory.java      | 30 +++++----
 .../provider/http/HttpFileSystemConfigBuilder.java | 74 +++++++++++++++++++---
 .../vfs2/provider/http/HttpProviderTestCase.java   | 37 ++++++++---
 src/changes/changes.xml                            | 31 ++++++---
 4 files changed, 132 insertions(+), 40 deletions(-)

diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpClientFactory.java
 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpClientFactory.java
index 807e595..f4de4a9 100644
--- 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpClientFactory.java
+++ 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpClientFactory.java
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.vfs2.provider.http;
 
+import java.time.Duration;
+
 import org.apache.commons.httpclient.Cookie;
 import org.apache.commons.httpclient.HostConfiguration;
 import org.apache.commons.httpclient.HttpClient;
@@ -29,6 +31,7 @@ import org.apache.commons.vfs2.FileSystemException;
 import org.apache.commons.vfs2.FileSystemOptions;
 import org.apache.commons.vfs2.UserAuthenticationData;
 import org.apache.commons.vfs2.UserAuthenticator;
+import org.apache.commons.vfs2.util.DurationUtils;
 import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
 
 /**
@@ -62,7 +65,7 @@ public final class HttpClientFactory {
      */
     public static HttpClient createConnection(final 
HttpFileSystemConfigBuilder builder, final String scheme,
             final String hostname, final int port, final String username, 
final String password,
-            final FileSystemOptions fileSystemOptions) throws 
FileSystemException {
+        final FileSystemOptions fileSystemOptions) throws FileSystemException {
         final HttpClient client;
         try {
             final HttpConnectionManager mgr = new 
MultiThreadedHttpConnectionManager();
@@ -84,15 +87,15 @@ public final class HttpClientFactory {
                 final UserAuthenticator proxyAuth = 
builder.getProxyAuthenticator(fileSystemOptions);
                 if (proxyAuth != null) {
                     final UserAuthenticationData authData = 
UserAuthenticatorUtils.authenticate(proxyAuth,
-                            new UserAuthenticationData.Type[] { 
UserAuthenticationData.USERNAME,
-                                    UserAuthenticationData.PASSWORD });
+                        new UserAuthenticationData.Type[] 
{UserAuthenticationData.USERNAME,
+                            UserAuthenticationData.PASSWORD});
 
                     if (authData != null) {
                         final UsernamePasswordCredentials proxyCreds = new 
UsernamePasswordCredentials(
-                                
UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
-                                        UserAuthenticationData.USERNAME, 
null)),
-                                
UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
-                                        UserAuthenticationData.PASSWORD, 
null)));
+                            UserAuthenticatorUtils.toString(
+                                UserAuthenticatorUtils.getData(authData, 
UserAuthenticationData.USERNAME, null)),
+                            UserAuthenticatorUtils.toString(
+                                UserAuthenticatorUtils.getData(authData, 
UserAuthenticationData.PASSWORD, null)));
 
                         final AuthScope scope = new AuthScope(proxyHost, 
AuthScope.ANY_PORT);
                         client.getState().setProxyCredentials(scope, 
proxyCreds);
@@ -111,15 +114,17 @@ public final class HttpClientFactory {
                 }
             }
             /*
-              ConnectionManager set methods must be called after the host & 
port and proxy host & port are set in the
-              HostConfiguration. They are all used as part of the key when 
HttpConnectionManagerParams tries to locate
-              the host configuration.
+             * ConnectionManager set methods must be called after the host & 
port and proxy host & port are set in the
+             * HostConfiguration. They are all used as part of the key when 
HttpConnectionManagerParams tries to locate
+             * the host configuration.
              */
             connectionMgrParams.setMaxConnectionsPerHost(config, 
builder.getMaxConnectionsPerHost(fileSystemOptions));
             
connectionMgrParams.setMaxTotalConnections(builder.getMaxTotalConnections(fileSystemOptions));
 
-            
connectionMgrParams.setConnectionTimeout(builder.getConnectionTimeout(fileSystemOptions));
-            
connectionMgrParams.setSoTimeout(builder.getSoTimeout(fileSystemOptions));
+            connectionMgrParams.setConnectionTimeout(
+                
DurationUtils.toMillisInt(builder.getConnectionTimeoutDuration(fileSystemOptions)));
+            connectionMgrParams
+                
.setSoTimeout(DurationUtils.toMillisInt(builder.getSoTimeoutDuration(fileSystemOptions)));
 
             client.setHostConfiguration(config);
 
@@ -134,4 +139,5 @@ public final class HttpClientFactory {
 
         return client;
     }
+    
 }
diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java
 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java
index 3179fe3..0d5a6c4 100644
--- 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java
+++ 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.vfs2.provider.http;
 
+import java.time.Duration;
+
 import org.apache.commons.httpclient.Cookie;
 import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
 import org.apache.commons.httpclient.params.HttpConnectionParams;
@@ -39,9 +41,9 @@ public class HttpFileSystemConfigBuilder extends 
FileSystemConfigBuilder {
 
     private static final int DEFAULT_MAX_CONNECTIONS = 50;
 
-    private static final int DEFAULT_CONNECTION_TIMEOUT = 0;
+    private static final Duration DEFAULT_CONNECTION_TIMEOUT = Duration.ZERO;
 
-    private static final int DEFAULT_SO_TIMEOUT = 0;
+    private static final Duration DEFAULT_SO_TIMEOUT = Duration.ZERO;
 
     private static final boolean DEFAULT_FOLLOW_REDIRECT = true;
 
@@ -277,11 +279,24 @@ public class HttpFileSystemConfigBuilder extends 
FileSystemConfigBuilder {
      * The connection timeout.
      *
      * @param opts The FileSystem options.
-     * @param connectionTimeout The connection timeout.
+     * @param duration The connection timeout.
+     * @since 2.8.0
+     */
+    public void setConnectionTimeout(final FileSystemOptions opts, final 
Duration duration) {
+        setParam(opts, HttpConnectionParams.CONNECTION_TIMEOUT, duration);
+    }
+
+    /**
+     * The connection timeout.
+     *
+     * @param opts The FileSystem options.
+     * @param duration The connection timeout.
      * @since 2.1
+     * @deprecated Use {@link #setConnectionTimeout(FileSystemOptions, 
Duration)}.
      */
-    public void setConnectionTimeout(final FileSystemOptions opts, final int 
connectionTimeout) {
-        setParam(opts, HttpConnectionParams.CONNECTION_TIMEOUT, 
Integer.valueOf(connectionTimeout));
+    @Deprecated
+    public void setConnectionTimeout(final FileSystemOptions opts, final int 
duration) {
+        setConnectionTimeout(opts, Duration.ofMillis(duration));
     }
 
     /**
@@ -290,20 +305,46 @@ public class HttpFileSystemConfigBuilder extends 
FileSystemConfigBuilder {
      * @param opts The FileSystem options.
      * @return The connection timeout.
      * @since 2.1
+     * @deprecated Use {@link 
#getConnectionTimeoutDuration(FileSystemOptions)}.
      */
+    @Deprecated
     public int getConnectionTimeout(final FileSystemOptions opts) {
-        return getInteger(opts, HttpConnectionParams.CONNECTION_TIMEOUT, 
DEFAULT_CONNECTION_TIMEOUT);
+        return getDurationInteger(opts, 
HttpConnectionParams.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, HttpConnectionParams.CONNECTION_TIMEOUT, 
DEFAULT_CONNECTION_TIMEOUT);
     }
 
     /**
      * The socket timeout.
      *
      * @param opts The FileSystem options.
-     * @param soTimeout socket timeout.
+     * @param duration socket timeout.
+     * @since 2.8.0
+     */
+    public void setSoTimeout(final FileSystemOptions opts, final Duration 
duration) {
+        setParam(opts, HttpConnectionParams.SO_TIMEOUT, duration);
+    }
+
+    /**
+     * The socket timeout.
+     *
+     * @param opts The FileSystem options.
+     * @param duration socket timeout.
      * @since 2.1
+     * @deprecated Use {@link #setSoTimeout(FileSystemOptions, Duration)}.
      */
-    public void setSoTimeout(final FileSystemOptions opts, final int 
soTimeout) {
-        setParam(opts, HttpConnectionParams.SO_TIMEOUT, 
Integer.valueOf(soTimeout));
+    @Deprecated
+    public void setSoTimeout(final FileSystemOptions opts, final int duration) 
{
+        setSoTimeout(opts, Duration.ofMillis(duration));
     }
 
     /**
@@ -312,9 +353,22 @@ public class HttpFileSystemConfigBuilder extends 
FileSystemConfigBuilder {
      * @param opts The FileSystemOptions.
      * @return The socket timeout.
      * @since 2.1
+     * @deprecated Use {@link #getSoTimeoutDuration(FileSystemOptions)}.
      */
+    @Deprecated
     public int getSoTimeout(final FileSystemOptions opts) {
-        return getInteger(opts, HttpConnectionParams.SO_TIMEOUT, 
DEFAULT_SO_TIMEOUT);
+        return getDurationInteger(opts, HttpConnectionParams.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, HttpConnectionParams.SO_TIMEOUT, 
DEFAULT_SO_TIMEOUT);
     }
 
     /**
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http/HttpProviderTestCase.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http/HttpProviderTestCase.java
index c9108b9..f701f96 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http/HttpProviderTestCase.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http/HttpProviderTestCase.java
@@ -17,6 +17,7 @@
 package org.apache.commons.vfs2.provider.http;
 
 import java.io.File;
+import java.time.Duration;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.vfs2.AbstractProviderTestConfig;
@@ -38,6 +39,8 @@ import junit.framework.Test;
  *
  */
 public class HttpProviderTestCase extends AbstractProviderTestConfig {
+    private static final Duration ONE_MINUTE = Duration.ofMinutes(1);
+
     private static NHttpFileServer Server;
 
     private static int SocketPort;
@@ -170,22 +173,36 @@ public class HttpProviderTestCase extends 
AbstractProviderTestConfig {
 
     /** Ensure VFS-453 options are present. */
     public void testHttpTimeoutConfig() {
-        final FileSystemOptions opts = new FileSystemOptions();
+        final FileSystemOptions options = new FileSystemOptions();
         final HttpFileSystemConfigBuilder builder = 
HttpFileSystemConfigBuilder.getInstance();
 
         // ensure defaults are 0
-        assertEquals(0, builder.getConnectionTimeout(opts));
-        assertEquals(0, builder.getSoTimeout(opts));
-        assertEquals("Jakarta-Commons-VFS", builder.getUserAgent(opts));
+        assertEquals(0, builder.getConnectionTimeout(options));
+        assertEquals(0, 
builder.getConnectionTimeoutDuration(options).toMillis());
+        assertEquals(0, builder.getSoTimeout(options));
+        assertEquals("Jakarta-Commons-VFS", builder.getUserAgent(options));
+
+        // Set with deprecated milliseconds APIs.
+        builder.setConnectionTimeout(options, 60000);
+        builder.setSoTimeout(options, 60000);
+        builder.setUserAgent(options, "foo/bar");
+
+        // ensure changes are visible
+        assertEquals(60000, builder.getConnectionTimeout(options));
+        assertEquals(ONE_MINUTE, 
builder.getConnectionTimeoutDuration(options));
+        assertEquals(60000, builder.getSoTimeout(options));
+        assertEquals("foo/bar", builder.getUserAgent(options));
 
-        builder.setConnectionTimeout(opts, 60000);
-        builder.setSoTimeout(opts, 60000);
-        builder.setUserAgent(opts, "foo/bar");
+        // Set with Duration APIs.
+        builder.setConnectionTimeout(options, ONE_MINUTE);
+        builder.setSoTimeout(options, ONE_MINUTE);
 
         // ensure changes are visible
-        assertEquals(60000, builder.getConnectionTimeout(opts));
-        assertEquals(60000, builder.getSoTimeout(opts));
-        assertEquals("foo/bar", builder.getUserAgent(opts));
+        assertEquals(60000, builder.getConnectionTimeout(options));
+        assertEquals(ONE_MINUTE, 
builder.getConnectionTimeoutDuration(options));
+        assertEquals(60000, builder.getSoTimeout(options));
+        assertEquals(ONE_MINUTE, builder.getSoTimeoutDuration(options));
+        assertEquals("foo/bar", builder.getUserAgent(options));
 
         // TODO: should also check the created HTTPClient
     }
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 81a10ed..61b6e9f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -77,31 +77,46 @@ The <action> type attribute can be add,update,fix,remove.
         Add and use VFS.close().
       </action>
       <action dev="ggregory" due-to="Gary Gregory, xiaqingyun" type="add">
-        Add support for FTP ControlKeepAliveReplyTimeout and 
ControlKeepAliveTimeout.
+        [FTP] Add support for ControlKeepAliveReplyTimeout and 
ControlKeepAliveTimeout.
       </action>
       <action dev="ggregory" due-to="Gary Gregory, Michael Graham" type="add">
-        FTP tests can be configured with a custom FTP server command factory.
+        [FTP] Tests can be configured with a custom FTP server command factory.
       </action>
       <action issue="VFS-257" dev="ggregory" due-to="Andrew Franklin, Michael 
Graham, Gary Gregory" type="add">
         [FTP] Add support for MDTM to get more accurate last modified times.
       </action>
       <action dev="ggregory" due-to="Gary Gregory" type="add">
-        Add FtpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, 
Duration) and deprecate Integer version.
+        [FTP] Add 
FtpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, Duration) and 
deprecate Integer version.
       </action>
       <action dev="ggregory" due-to="Gary Gregory" type="add">
-        Add FtpFileSystemConfigBuilder.setDataTimeout(FileSystemOptions, 
Duration) and deprecate Integer version.
+        [FTP] Add FtpFileSystemConfigBuilder.setDataTimeout(FileSystemOptions, 
Duration) and deprecate Integer version.
       </action>
       <action dev="ggregory" due-to="Gary Gregory" type="add">
-        Add FtpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, 
Duration) and deprecate Integer version.
+        [FTP] Add FtpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, 
Duration) and deprecate Integer version.
       </action>
       <action dev="ggregory" due-to="Gary Gregory" type="add">
-        Add 
FtpFileSystemConfigBuilder.getConnectTimeoutDuration(FileSystemOptions) and 
deprecate Integer version.
+        [FTP] Add 
FtpFileSystemConfigBuilder.getConnectTimeoutDuration(FileSystemOptions) and 
deprecate Integer version.
       </action>
       <action dev="ggregory" due-to="Gary Gregory" type="add">
-        Add 
FtpFileSystemConfigBuilder.getDataTimeoutDuration(FileSystemOptions) and 
deprecate Integer version.
+        [FTP] Add 
FtpFileSystemConfigBuilder.getDataTimeoutDuration(FileSystemOptions) and 
deprecate Integer version.
       </action>
       <action dev="ggregory" due-to="Gary Gregory" type="add">
-        Add FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) 
and deprecate Integer version.
+        [FTP] Add 
FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and 
deprecate Integer version.
+      </action>
+      <action dev="ggregory" due-to="Gary Gregory" type="add">
+        [FTP] Add 
FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and 
deprecate Integer version.
+      </action>
+      <action dev="ggregory" due-to="Gary Gregory" type="add">
+        [HTTP] Add 
HttpFileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) 
and deprecate Integer version.
+      </action>
+      <action dev="ggregory" due-to="Gary Gregory" type="add">
+        [HTTP] Add HttpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, 
Duration) and deprecate Integer version.
+      </action>
+      <action dev="ggregory" due-to="Gary Gregory" type="add">
+        [HTTP] Add 
HttpFileSystemConfigBuilder.getConnectionTimeout(FileSystemOptions) and 
deprecate Integer version.
+      </action>
+      <action dev="ggregory" due-to="Gary Gregory" type="add">
+        [HTTP] Add 
HttpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and 
deprecate Integer version.
       </action>
       <!-- UPDATES -->
       <action dev="ggregory" due-to="PeterAlfredLee" type="update">

Reply via email to