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

hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git


The following commit(s) were added to refs/heads/main by this push:
     new b1d8aed228 issue #3209: preserve Text File Input compression when 
adding files (#7804)
b1d8aed228 is described below

commit b1d8aed228c431b0ebd6f72e36a73bd8d55d0ecf
Author: Matt Casters <[email protected]>
AuthorDate: Thu Aug 6 15:09:57 2026 +0200

    issue #3209: preserve Text File Input compression when adding files (#7804)
    
    Stop checkCompressedFile() from resetting an explicit non-None
    Compression choice when files are added or removed. Auto-detect from
    filename extensions only when Compression is still None, and fix the
    filename column index used for extension lookup.
---
 .../fileinput/text/TextFileInputDialog.java        | 50 ++++++++++++++--------
 1 file changed, 31 insertions(+), 19 deletions(-)

diff --git 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/fileinput/text/TextFileInputDialog.java
 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/fileinput/text/TextFileInputDialog.java
index 20e72be6f6..d24a1d8b69 100644
--- 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/fileinput/text/TextFileInputDialog.java
+++ 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/fileinput/text/TextFileInputDialog.java
@@ -483,31 +483,43 @@ public class TextFileInputDialog extends 
BaseTransformDialog
     checkCompressedFile();
   }
 
-  /*check the compressed extension of the first file in the archive and change 
the
-   * compression mode in the content tab depending on it*/
+  /**
+   * Optionally auto-select compression from filename extensions when the user 
has not already
+   * chosen a non-None compression (issue #3209). Does not override an 
explicit selection.
+   */
   private void checkCompressedFile() {
-    if (wFilenameList.getItemCount() > 0) {
-      for (int i = 0; i < wFilenameList.getItemCount(); i++) {
-        String[] fileRecord = wFilenameList.getItem(i);
-        String fileExtension = FilenameUtils.getExtension(fileRecord[i]);
-        Collection<ICompressionProvider> compProviders =
-            CompressionProviderFactory.getInstance().getCompressionProviders();
-        for (ICompressionProvider provider : compProviders) {
-          if (provider.getDefaultExtension() != null
-              && provider.getDefaultExtension().equals(fileExtension)) {
-            int toBeSelected = ArrayUtils.indexOf(wCompression.getItems(), 
provider.getName());
+    // Preserve explicit Compression settings (GZip, Zip, ...). Only 
auto-detect when None/empty.
+    String current = Const.NVL(wCompression.getText(), "");
+    if (!Utils.isEmpty(current) && !"None".equalsIgnoreCase(current)) {
+      return;
+    }
+
+    if (wFilenameList.getItemCount() <= 0) {
+      return;
+    }
+
+    Collection<ICompressionProvider> compProviders =
+        CompressionProviderFactory.getInstance().getCompressionProviders();
+
+    for (int i = 0; i < wFilenameList.getItemCount(); i++) {
+      String[] fileRecord = wFilenameList.getItem(i);
+      if (fileRecord == null || fileRecord.length == 0 || 
Utils.isEmpty(fileRecord[0])) {
+        continue;
+      }
+      // Filename is always column 0 (not row index i)
+      String fileExtension = FilenameUtils.getExtension(fileRecord[0]);
+      for (ICompressionProvider provider : compProviders) {
+        if (provider.getDefaultExtension() != null
+            && provider.getDefaultExtension().equals(fileExtension)) {
+          int toBeSelected = ArrayUtils.indexOf(wCompression.getItems(), 
provider.getName());
+          if (toBeSelected >= 0) {
             wCompression.select(toBeSelected);
-            return;
           }
+          return;
         }
       }
-      wCompression.select(
-          ArrayUtils.indexOf(
-              wCompression.getItems(),
-              CompressionProviderFactory.getInstance()
-                  .getCompressionProviderByName("None")
-                  .getName()));
     }
+    // No matching compressed extension: leave compression as None/empty (do 
not force select).
   }
 
   private void showFiles() {

Reply via email to