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 654bcf1110f7da2275a293ed6299b1ca19aa3397
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Sun Aug 11 17:24:36 2024 -0400

    Add FileSystemConfigBuilder.getParamOrDefault(FileSystemOptions, String,
    T)
    
    - ZipFileSystemConfigBuilder.getCharset(FileSystemOptions) returns UTF-8
    instead of null when absent
---
 .../commons/vfs2/provider/webdav/WebdavFileSystem.java    |  1 -
 .../org/apache/commons/vfs2/FileSystemConfigBuilder.java  | 15 +++++++++++++++
 .../java/org/apache/commons/vfs2/FileSystemOptions.java   |  7 ++++++-
 .../apache/commons/vfs2/provider/zip/ZipFileSystem.java   |  9 +++++----
 .../vfs2/provider/zip/ZipFileSystemConfigBuilder.java     |  5 +++--
 .../provider/zip/ZipProviderWithCharsetNullTestCase.java  |  3 ++-
 src/changes/changes.xml                                   |  6 ++++++
 7 files changed, 37 insertions(+), 9 deletions(-)

diff --git 
a/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystem.java
 
b/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystem.java
index ff40765c..1709fb66 100644
--- 
a/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystem.java
+++ 
b/commons-vfs2-jackrabbit1/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystem.java
@@ -27,7 +27,6 @@ import org.apache.commons.vfs2.provider.AbstractFileName;
 import org.apache.commons.vfs2.provider.DefaultURLStreamHandler;
 import org.apache.commons.vfs2.provider.GenericFileName;
 import org.apache.commons.vfs2.provider.http.HttpFileSystem;
-import org.apache.http.client.protocol.HttpClientContext;
 
 /**
  * A WebDAV file system.
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 ca19c824..4a39aef4 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
@@ -508,6 +508,21 @@ public abstract class FileSystemConfigBuilder {
         return fileSystemOptions == null ? null : 
fileSystemOptions.getOption(getConfigClass(), name);
     }
 
+    /**
+     * Gets a named parameter.
+     *
+     * @param <T> The expected return type.
+     * @param fileSystemOptions file system options to query, may be null.
+     * @param name get option with this name
+     * @param defaultValue The default value if absent.
+     * @return the named option or {@code defaultValue}.
+     *
+     * @since 2.10.0
+     */
+    protected <T> T getParamOrDefault(final FileSystemOptions 
fileSystemOptions, final String name, final T defaultValue) {
+        return fileSystemOptions == null ? defaultValue : 
fileSystemOptions.getOptionOrDefault(getConfigClass(), name, defaultValue);
+    }
+
     /**
      * Gets a named parameter.
      *
diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemOptions.java 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemOptions.java
index 958f52b5..f4dd9fa6 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemOptions.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemOptions.java
@@ -192,7 +192,12 @@ public final class FileSystemOptions implements Cloneable, 
Comparable<FileSystem
     }
 
     <T> T getOption(final Class<? extends FileSystem> fileSystemClass, final 
String name) {
-        return (T) options.get(new FileSystemOptionKey(fileSystemClass, name));
+        return getOptionOrDefault(fileSystemClass, name, null);
+    }
+
+    <T> T getOptionOrDefault(final Class<? extends FileSystem> 
fileSystemClass, final String name, final T defaultValue) {
+        final T value = (T) options.getOrDefault(new 
FileSystemOptionKey(fileSystemClass, name), defaultValue);
+        return value != null ? value : defaultValue;
     }
 
     @Override
diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystem.java
 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystem.java
index 2389ad61..b8a8990c 100644
--- 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystem.java
+++ 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystem.java
@@ -19,6 +19,7 @@ package org.apache.commons.vfs2.provider.zip;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.Collection;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -98,14 +99,13 @@ public class ZipFileSystem extends AbstractFileSystem {
 
     protected ZipFile createZipFile(final File file) throws 
FileSystemException {
         try {
-            return charset == null ? new ZipFile(file) : new ZipFile(file, 
charset);
+            return new ZipFile(file, charset);
         } catch (final IOException ioe) {
             throw new 
FileSystemException("vfs.provider.zip/open-zip-file.error", file, ioe);
         }
     }
 
-    protected ZipFileObject createZipFileObject(final AbstractFileName name, 
final ZipEntry entry)
-            throws FileSystemException {
+    protected ZipFileObject createZipFileObject(final AbstractFileName name, 
final ZipEntry entry) throws FileSystemException {
         return new ZipFileObject(name, entry, this, true);
     }
 
@@ -124,7 +124,8 @@ public class ZipFileSystem extends AbstractFileSystem {
     }
 
     /**
-     * Gets the Charset.
+     * Gets the Charset, defaults to {@link StandardCharsets#UTF_8}, the value 
used in {@link ZipFile}.
+     *
      * @return the Charset.
      */
     protected Charset getCharset() {
diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystemConfigBuilder.java
 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystemConfigBuilder.java
index 0c0b7c7f..eaa50169 100644
--- 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystemConfigBuilder.java
+++ 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystemConfigBuilder.java
@@ -18,6 +18,7 @@
 package org.apache.commons.vfs2.provider.zip;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.commons.vfs2.FileSystem;
 import org.apache.commons.vfs2.FileSystemConfigBuilder;
@@ -49,13 +50,13 @@ public class ZipFileSystemConfigBuilder extends 
FileSystemConfigBuilder {
     }
 
     /**
-     * Gets the Charset from the FileSystemOptions.
+     * Gets the Charset from the FileSystemOptions or {@link 
StandardCharsets#UTF_8} if absent.
      *
      * @param fileSystemOptions The source FileSystemOptions.
      * @return the Charset from the FileSystemOptions.
      */
     public Charset getCharset(final FileSystemOptions fileSystemOptions) {
-        return getParam(fileSystemOptions, KEY_CHARSET);
+        return getParamOrDefault(fileSystemOptions, KEY_CHARSET, 
StandardCharsets.UTF_8);
     }
 
     @Override
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetNullTestCase.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetNullTestCase.java
index 9f84fdef..e504d409 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetNullTestCase.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetNullTestCase.java
@@ -19,6 +19,7 @@ package org.apache.commons.vfs2.provider.zip;
 import static org.apache.commons.vfs2.VfsTestUtils.getTestResource;
 
 import java.io.File;
+import java.nio.charset.StandardCharsets;
 
 import junit.framework.Test;
 
@@ -59,7 +60,7 @@ public class ZipProviderWithCharsetNullTestCase extends 
AbstractProviderTestConf
         final FileSystem fileSystem = resolvedFile.getFileSystem();
         Assertions.assertTrue(fileSystem instanceof ZipFileSystem);
         final ZipFileSystem zipFileSystem = (ZipFileSystem) fileSystem;
-        Assertions.assertNull(zipFileSystem.getCharset());
+        Assertions.assertEquals(StandardCharsets.UTF_8, 
zipFileSystem.getCharset());
         return resolvedFile;
     }
 
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c0ff7eb4..7ec1e0f9 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -200,6 +200,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="ggregory" due-to="Arnout Engelen">
         Simplify UriParser #558.
       </action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">
+        ZipFileSystemConfigBuilder.getCharset(FileSystemOptions) returns UTF-8 
instead of null when absent.
+      </action>
       <!-- ADD -->
       <action type="add" issue="VFS-848" dev="ggregory" due-to="beise, Gary 
Gregory">
         Config option for trailing slash in webdav URI #425.
@@ -252,6 +255,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add a BOM POM commons-vfs2-bom.
       </action>
+      <action type="add" dev="ggregory" due-to="Gary Gregory">
+        Add FileSystemConfigBuilder.getParamOrDefault(FileSystemOptions, 
String, T).
+      </action>
       <!-- UPDATE -->
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump actions/cache and others.

Reply via email to