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

mattcasters 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 0d14622d73 Add empty option to encoding dropdowns, fixes #7938 (#7939)
0d14622d73 is described below

commit 0d14622d73918027c1e4d59cc648d32010044d57
Author: Hans Van Akelyen <[email protected]>
AuthorDate: Thu Aug 13 16:14:11 2026 +0200

    Add empty option to encoding dropdowns, fixes #7938 (#7939)
---
 .../hop/workflow/actions/sql/ActionSqlDialog.java  | 16 ++------
 .../writetofile/ActionWriteToFileDialog.java       | 17 ++------
 .../mail/pipeline/transforms/mail/MailDialog.java  | 18 ++------
 .../workflow/actions/mail/ActionMailDialog.java    | 17 ++------
 .../ChangeFileEncodingDialog.java                  | 19 ++-------
 .../transforms/excelinput/ExcelInputDialog.java    | 18 ++------
 .../filemetadata/FileMetadataDialog.java           | 19 ++-------
 .../hop/pipeline/transforms/http/HttpDialog.java   | 16 ++------
 .../transforms/httppost/HttpPostDialog.java        | 16 ++------
 .../transforms/jsonoutput/JsonOutputDialog.java    | 18 ++------
 .../jsonoutputenhanced/JsonEOutputDialog.java      | 18 ++------
 .../loadfileinput/LoadFileInputDialog.java         | 14 ++-----
 .../propertyinput/PropertyInputDialog.java         | 18 ++------
 .../selectvalues/SelectValuesDialog.java           | 10 +----
 .../sqlfileoutput/SQLFileOutputDialog.java         | 19 ++-------
 .../transforms/csvinput/CsvInputDialog.java        | 17 ++------
 .../fileinput/text/TextFileInputDialog.java        | 31 +++++---------
 .../textfileoutput/TextFileOutputDialog.java       | 16 ++------
 .../hop/pipeline/transforms/tika/TikaDialog.java   | 15 ++-----
 .../tokenreplacement/TokenReplacementDialog.java   | 16 ++------
 .../transforms/vcardoutput/VCardOutputDialog.java  |  9 ++--
 .../transforms/xml/addxml/AddXmlDialog.java        | 19 ++-------
 .../advancedxmloutput/AdvancedXmlOutputDialog.java | 17 ++------
 .../xml/getxmldata/GetXmlDataDialog.java           | 18 ++------
 .../transforms/xml/xmljoin/XmlJoinDialog.java      | 20 ++-------
 .../transforms/xml/xmloutput/XmlOutputDialog.java  | 16 ++------
 .../main/java/org/apache/hop/ui/core/ConstUi.java  | 19 +++++++++
 .../java/org/apache/hop/ui/core/ConstUiTest.java   | 48 ++++++++++++++++++++++
 28 files changed, 165 insertions(+), 349 deletions(-)

diff --git 
a/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSqlDialog.java
 
b/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSqlDialog.java
index d0bd68b3c2..9f91d5bd0e 100644
--- 
a/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSqlDialog.java
+++ 
b/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSqlDialog.java
@@ -17,8 +17,6 @@
 
 package org.apache.hop.workflow.actions.sql;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import org.apache.hop.core.Const;
@@ -27,6 +25,7 @@ import org.apache.hop.core.database.DatabaseMeta;
 import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.MessageBox;
@@ -356,16 +355,9 @@ public class ActionSqlDialog extends ActionDialog {
   private void setEncodings() {
     if (!gotEncodings) {
       gotEncodings = true;
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/actions/writetofile/src/main/java/org/apache/hop/workflow/actions/writetofile/ActionWriteToFileDialog.java
 
b/plugins/actions/writetofile/src/main/java/org/apache/hop/workflow/actions/writetofile/ActionWriteToFileDialog.java
index 49c36ddd72..c3b8e342f5 100644
--- 
a/plugins/actions/writetofile/src/main/java/org/apache/hop/workflow/actions/writetofile/ActionWriteToFileDialog.java
+++ 
b/plugins/actions/writetofile/src/main/java/org/apache/hop/workflow/actions/writetofile/ActionWriteToFileDialog.java
@@ -17,13 +17,12 @@
 
 package org.apache.hop.workflow.actions.writetofile;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.Props;
 import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.MessageBox;
@@ -285,17 +284,9 @@ public class ActionWriteToFileDialog extends ActionDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      java.util.List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/misc/mail/src/main/java/org/apache/hop/mail/pipeline/transforms/mail/MailDialog.java
 
b/plugins/misc/mail/src/main/java/org/apache/hop/mail/pipeline/transforms/mail/MailDialog.java
index 452e4e2f93..b1f1c3f567 100644
--- 
a/plugins/misc/mail/src/main/java/org/apache/hop/mail/pipeline/transforms/mail/MailDialog.java
+++ 
b/plugins/misc/mail/src/main/java/org/apache/hop/mail/pipeline/transforms/mail/MailDialog.java
@@ -17,8 +17,6 @@
 
 package org.apache.hop.mail.pipeline.transforms.mail;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.Props;
@@ -30,6 +28,7 @@ import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.mail.metadata.MailServerConnection;
 import org.apache.hop.mail.workflow.actions.mail.MailEmbeddedImageField;
 import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.ErrorDialog;
@@ -2275,18 +2274,9 @@ public class MailDialog extends BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      ArrayList<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/misc/mail/src/main/java/org/apache/hop/mail/workflow/actions/mail/ActionMailDialog.java
 
b/plugins/misc/mail/src/main/java/org/apache/hop/mail/workflow/actions/mail/ActionMailDialog.java
index 9c2ab1f97a..191a9564b5 100644
--- 
a/plugins/misc/mail/src/main/java/org/apache/hop/mail/workflow/actions/mail/ActionMailDialog.java
+++ 
b/plugins/misc/mail/src/main/java/org/apache/hop/mail/workflow/actions/mail/ActionMailDialog.java
@@ -17,7 +17,6 @@
 
 package org.apache.hop.mail.workflow.actions.mail;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Random;
 import org.apache.hop.core.Const;
@@ -27,6 +26,7 @@ import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.mail.metadata.MailServerConnection;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.ErrorDialog;
@@ -1696,18 +1696,9 @@ public class ActionMailDialog extends ActionDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      java.util.List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 }
diff --git 
a/plugins/transforms/changefileencoding/src/main/java/org/apache/hop/pipeline/transforms/changefileencoding/ChangeFileEncodingDialog.java
 
b/plugins/transforms/changefileencoding/src/main/java/org/apache/hop/pipeline/transforms/changefileencoding/ChangeFileEncodingDialog.java
index d12f16b66c..f7ae9bf5dd 100644
--- 
a/plugins/transforms/changefileencoding/src/main/java/org/apache/hop/pipeline/transforms/changefileencoding/ChangeFileEncodingDialog.java
+++ 
b/plugins/transforms/changefileencoding/src/main/java/org/apache/hop/pipeline/transforms/changefileencoding/ChangeFileEncodingDialog.java
@@ -17,8 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.changefileencoding;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.row.IRowMeta;
@@ -26,6 +24,7 @@ import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.ErrorDialog;
@@ -372,18 +371,8 @@ public class ChangeFileEncodingDialog extends 
BaseTransformDialog {
 
   private void setEncodings(ComboVar cVar) {
     // Encoding of the text file:
-    String encoding =
-        Const.NVL(cVar.getText(), 
Const.getEnvironmentVariable("file.encoding", Const.UTF_8));
-    cVar.removeAll();
-    ArrayList<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-    for (Charset charSet : values) {
-      cVar.add(charSet.displayName());
-    }
-
-    // Now select the default!
-    int idx = Const.indexOfString(encoding, cVar.getItems());
-    if (idx >= 0) {
-      cVar.select(idx);
-    }
+    String encoding = cVar.getText();
+    cVar.setItems(ConstUi.getEncodings());
+    cVar.setText(Const.NVL(encoding, ""));
   }
 }
diff --git 
a/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelinput/ExcelInputDialog.java
 
b/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelinput/ExcelInputDialog.java
index a52316e0cf..1ed3c03996 100644
--- 
a/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelinput/ExcelInputDialog.java
+++ 
b/plugins/transforms/excel/src/main/java/org/apache/hop/pipeline/transforms/excelinput/ExcelInputDialog.java
@@ -20,7 +20,6 @@ package org.apache.hop.pipeline.transforms.excelinput;
 import static 
org.apache.hop.pipeline.transforms.excelinput.ExcelInputMeta.EIFile;
 import static 
org.apache.hop.pipeline.transforms.excelinput.ExcelInputMeta.EISheet;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Pattern;
@@ -53,6 +52,7 @@ import 
org.apache.hop.pipeline.transforms.fileinput.text.DirectoryDialogButtonLi
 import org.apache.hop.staticschema.metadata.SchemaDefinition;
 import org.apache.hop.staticschema.metadata.SchemaFieldDefinition;
 import org.apache.hop.staticschema.util.SchemaDefinitionUtil;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.EnterListDialog;
@@ -1936,19 +1936,9 @@ public class ExcelInputDialog extends 
BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/filemetadata/src/main/java/org/apache/hop/pipeline/transforms/filemetadata/FileMetadataDialog.java
 
b/plugins/transforms/filemetadata/src/main/java/org/apache/hop/pipeline/transforms/filemetadata/FileMetadataDialog.java
index 8a91936a04..c00cea7080 100644
--- 
a/plugins/transforms/filemetadata/src/main/java/org/apache/hop/pipeline/transforms/filemetadata/FileMetadataDialog.java
+++ 
b/plugins/transforms/filemetadata/src/main/java/org/apache/hop/pipeline/transforms/filemetadata/FileMetadataDialog.java
@@ -19,15 +19,13 @@ package org.apache.hop.pipeline.transforms.filemetadata;
 
 import static 
org.apache.hop.pipeline.transforms.filemetadata.FileMetadataMeta.FMCandidate;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.row.IRowMeta;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.ErrorDialog;
@@ -107,18 +105,9 @@ public class FileMetadataDialog extends 
BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wDefaultCharset.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wDefaultCharset.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = meta.getDefaultCharset();
-      int idx = Const.indexOfString(defEncoding, wDefaultCharset.getItems());
-      if (idx >= 0) {
-        wDefaultCharset.select(idx);
-      }
+      String encoding = wDefaultCharset.getText();
+      wDefaultCharset.setItems(ConstUi.getEncodings());
+      wDefaultCharset.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/http/src/main/java/org/apache/hop/pipeline/transforms/http/HttpDialog.java
 
b/plugins/transforms/http/src/main/java/org/apache/hop/pipeline/transforms/http/HttpDialog.java
index 425fac0ac9..217ac0b4fc 100644
--- 
a/plugins/transforms/http/src/main/java/org/apache/hop/pipeline/transforms/http/HttpDialog.java
+++ 
b/plugins/transforms/http/src/main/java/org/apache/hop/pipeline/transforms/http/HttpDialog.java
@@ -17,7 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.http;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.core.Const;
@@ -871,18 +870,9 @@ public class HttpDialog extends BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/httppost/src/main/java/org/apache/hop/pipeline/transforms/httppost/HttpPostDialog.java
 
b/plugins/transforms/httppost/src/main/java/org/apache/hop/pipeline/transforms/httppost/HttpPostDialog.java
index 9c88d77d5b..9a84d9c89a 100644
--- 
a/plugins/transforms/httppost/src/main/java/org/apache/hop/pipeline/transforms/httppost/HttpPostDialog.java
+++ 
b/plugins/transforms/httppost/src/main/java/org/apache/hop/pipeline/transforms/httppost/HttpPostDialog.java
@@ -17,7 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.httppost;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.core.Const;
@@ -1057,18 +1056,9 @@ public class HttpPostDialog extends BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutputDialog.java
 
b/plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutputDialog.java
index 583d2ab619..b10d4c798a 100644
--- 
a/plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutputDialog.java
+++ 
b/plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutputDialog.java
@@ -17,7 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.jsonoutput;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -706,20 +705,9 @@ public class JsonOutputDialog extends BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      } else {
-        wEncoding.select(Const.indexOfString(Const.UTF_8, 
wEncoding.getItems()));
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputDialog.java
 
b/plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputDialog.java
index dddc6c0a8e..e668c22f35 100644
--- 
a/plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputDialog.java
+++ 
b/plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputDialog.java
@@ -17,7 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.jsonoutputenhanced;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.core.Const;
@@ -949,20 +948,9 @@ public class JsonEOutputDialog extends BaseTransformDialog 
{
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      } else {
-        wEncoding.select(Const.indexOfString(Const.UTF_8, 
wEncoding.getItems()));
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/loadfileinput/src/main/java/org/apache/hop/pipeline/transforms/loadfileinput/LoadFileInputDialog.java
 
b/plugins/transforms/loadfileinput/src/main/java/org/apache/hop/pipeline/transforms/loadfileinput/LoadFileInputDialog.java
index f160346c71..cccb3f0fee 100644
--- 
a/plugins/transforms/loadfileinput/src/main/java/org/apache/hop/pipeline/transforms/loadfileinput/LoadFileInputDialog.java
+++ 
b/plugins/transforms/loadfileinput/src/main/java/org/apache/hop/pipeline/transforms/loadfileinput/LoadFileInputDialog.java
@@ -17,8 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.loadfileinput;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.Props;
 import org.apache.hop.core.exception.HopException;
@@ -33,6 +31,7 @@ import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.Pipeline;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.PipelinePreviewFactory;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.EnterNumberDialog;
@@ -1124,15 +1123,8 @@ public class LoadFileInputDialog extends 
BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
       String encoding = wEncoding.getText();
-      wEncoding.removeAll();
-      ArrayList<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      if (!Utils.isEmpty(encoding)) {
-        wEncoding.setText(encoding);
-      }
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/propertyinput/src/main/java/org/apache/hop/pipeline/transforms/propertyinput/PropertyInputDialog.java
 
b/plugins/transforms/propertyinput/src/main/java/org/apache/hop/pipeline/transforms/propertyinput/PropertyInputDialog.java
index 9c595a6e3c..4ccc320d93 100644
--- 
a/plugins/transforms/propertyinput/src/main/java/org/apache/hop/pipeline/transforms/propertyinput/PropertyInputDialog.java
+++ 
b/plugins/transforms/propertyinput/src/main/java/org/apache/hop/pipeline/transforms/propertyinput/PropertyInputDialog.java
@@ -17,8 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.propertyinput;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
 import java.util.Iterator;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hop.core.Const;
@@ -37,6 +35,7 @@ import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.Pipeline;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.PipelinePreviewFactory;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.EnterNumberDialog;
@@ -1049,18 +1048,9 @@ public class PropertyInputDialog extends 
BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      ArrayList<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/selectvalues/src/main/java/org/apache/hop/pipeline/transforms/selectvalues/SelectValuesDialog.java
 
b/plugins/transforms/selectvalues/src/main/java/org/apache/hop/pipeline/transforms/selectvalues/SelectValuesDialog.java
index 579f95e278..c10369901a 100644
--- 
a/plugins/transforms/selectvalues/src/main/java/org/apache/hop/pipeline/transforms/selectvalues/SelectValuesDialog.java
+++ 
b/plugins/transforms/selectvalues/src/main/java/org/apache/hop/pipeline/transforms/selectvalues/SelectValuesDialog.java
@@ -19,9 +19,7 @@ package org.apache.hop.pipeline.transforms.selectvalues;
 
 import static org.apache.hop.core.row.IValueMeta.storageTypeCodes;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -41,6 +39,7 @@ import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.transform.TransformMeta;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.FormDataBuilder;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
@@ -664,12 +663,7 @@ public class SelectValuesDialog extends 
BaseTransformDialog {
 
   private String[] getCharsets() {
     if (charsets == null) {
-      Collection<Charset> charsetCol = Charset.availableCharsets().values();
-      charsets = new String[charsetCol.size()];
-      int i = 0;
-      for (Charset charset : charsetCol) {
-        charsets[i++] = charset.displayName();
-      }
+      charsets = ConstUi.getEncodings();
     }
     return charsets;
   }
diff --git 
a/plugins/transforms/sqlfileoutput/src/main/java/org/apache/hop/pipeline/transforms/sqlfileoutput/SQLFileOutputDialog.java
 
b/plugins/transforms/sqlfileoutput/src/main/java/org/apache/hop/pipeline/transforms/sqlfileoutput/SQLFileOutputDialog.java
index be89075470..e608ebb519 100644
--- 
a/plugins/transforms/sqlfileoutput/src/main/java/org/apache/hop/pipeline/transforms/sqlfileoutput/SQLFileOutputDialog.java
+++ 
b/plugins/transforms/sqlfileoutput/src/main/java/org/apache/hop/pipeline/transforms/sqlfileoutput/SQLFileOutputDialog.java
@@ -17,9 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.sqlfileoutput;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.DbCache;
@@ -32,6 +29,7 @@ import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.transform.TransformMeta;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.database.dialog.DatabaseExplorerDialog;
 import org.apache.hop.ui.core.database.dialog.SqlEditor;
@@ -754,18 +752,9 @@ public class SQLFileOutputDialog extends 
BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/csvinput/CsvInputDialog.java
 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/csvinput/CsvInputDialog.java
index a53bbc009e..d98e76e2b2 100644
--- 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/csvinput/CsvInputDialog.java
+++ 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/csvinput/CsvInputDialog.java
@@ -19,7 +19,6 @@ package org.apache.hop.pipeline.transforms.csvinput;
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -52,6 +51,7 @@ import 
org.apache.hop.pipeline.transforms.fileinput.text.TextFileCSVImportProgre
 import org.apache.hop.staticschema.metadata.SchemaDefinition;
 import org.apache.hop.staticschema.metadata.SchemaFieldDefinition;
 import org.apache.hop.staticschema.util.SchemaDefinitionUtil;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.EnterNumberDialog;
@@ -764,18 +764,9 @@ public class CsvInputDialog extends BaseTransformDialog
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
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 8600fc8558..9de080fc20 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
@@ -19,7 +19,6 @@ package org.apache.hop.pipeline.transforms.fileinput.text;
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -47,6 +46,7 @@ import org.apache.hop.core.row.IRowMeta;
 import org.apache.hop.core.row.IValueMeta;
 import org.apache.hop.core.row.value.ValueMetaBase;
 import org.apache.hop.core.row.value.ValueMetaFactory;
+import org.apache.hop.core.util.EnvUtil;
 import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.core.vfs.HopVfs;
@@ -61,6 +61,7 @@ import 
org.apache.hop.pipeline.transforms.file.BaseFileInputMeta;
 import org.apache.hop.staticschema.metadata.SchemaDefinition;
 import org.apache.hop.staticschema.metadata.SchemaFieldDefinition;
 import org.apache.hop.staticschema.util.SchemaDefinitionUtil;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.EnterNumberDialog;
@@ -1527,14 +1528,11 @@ public class TextFileInputDialog extends 
BaseTransformDialog
   }
 
   protected void setLocales() {
-    Locale[] locale = Locale.getAvailableLocales();
-    String[] dateLocale = new String[locale.length];
-    for (int i = 0; i < locale.length; i++) {
-      dateLocale[i] = locale[i].toString();
-    }
-    if (dateLocale != null) {
-      wDateLocale.setItems(dateLocale);
-    }
+    // The list is sorted and starts with an empty entry so the locale can be 
cleared again.
+    //
+    String locale = wDateLocale.getText();
+    wDateLocale.setItems(EnvUtil.getLocaleList());
+    wDateLocale.setText(Const.NVL(locale, ""));
   }
 
   private void addErrorTab() {
@@ -2501,18 +2499,9 @@ public class TextFileInputDialog extends 
BaseTransformDialog
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/textfileoutput/TextFileOutputDialog.java
 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/textfileoutput/TextFileOutputDialog.java
index c03bd7a4ef..cbbb0aff08 100644
--- 
a/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/textfileoutput/TextFileOutputDialog.java
+++ 
b/plugins/transforms/textfile/src/main/java/org/apache/hop/pipeline/transforms/textfileoutput/TextFileOutputDialog.java
@@ -17,7 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.textfileoutput;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.core.Const;
@@ -1357,18 +1356,9 @@ public class TextFileOutputDialog extends 
BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/tika/src/main/java/org/apache/hop/pipeline/transforms/tika/TikaDialog.java
 
b/plugins/transforms/tika/src/main/java/org/apache/hop/pipeline/transforms/tika/TikaDialog.java
index 965b347435..e0652f0ad6 100755
--- 
a/plugins/transforms/tika/src/main/java/org/apache/hop/pipeline/transforms/tika/TikaDialog.java
+++ 
b/plugins/transforms/tika/src/main/java/org/apache/hop/pipeline/transforms/tika/TikaDialog.java
@@ -17,8 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.tika;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hop.core.Const;
@@ -32,6 +30,7 @@ import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.Pipeline;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.PipelinePreviewFactory;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.EnterNumberDialog;
@@ -761,16 +760,8 @@ public class TikaDialog extends BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
       String encoding = wEncoding.getText();
-      wEncoding.removeAll();
-      ArrayList<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset value : values) {
-        Charset charSet = (Charset) value;
-        wEncoding.add(charSet.displayName());
-      }
-
-      if (!StringUtils.isEmpty(encoding)) {
-        wEncoding.setText(encoding);
-      }
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/tokenreplacement/src/main/java/org/apache/hop/pipeline/transforms/tokenreplacement/TokenReplacementDialog.java
 
b/plugins/transforms/tokenreplacement/src/main/java/org/apache/hop/pipeline/transforms/tokenreplacement/TokenReplacementDialog.java
index 60f7b785f1..0c302cffaa 100644
--- 
a/plugins/transforms/tokenreplacement/src/main/java/org/apache/hop/pipeline/transforms/tokenreplacement/TokenReplacementDialog.java
+++ 
b/plugins/transforms/tokenreplacement/src/main/java/org/apache/hop/pipeline/transforms/tokenreplacement/TokenReplacementDialog.java
@@ -16,7 +16,6 @@
  */
 package org.apache.hop.pipeline.transforms.tokenreplacement;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.core.Const;
@@ -1185,18 +1184,9 @@ public class TokenReplacementDialog extends 
BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wOutputFileEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wOutputFileEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, 
wOutputFileEncoding.getItems());
-      if (idx >= 0) {
-        wOutputFileEncoding.select(idx);
-      }
+      String encoding = wOutputFileEncoding.getText();
+      wOutputFileEncoding.setItems(ConstUi.getEncodings());
+      wOutputFileEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/vcard/src/main/java/org/apache/hop/pipeline/transforms/vcardoutput/VCardOutputDialog.java
 
b/plugins/transforms/vcard/src/main/java/org/apache/hop/pipeline/transforms/vcardoutput/VCardOutputDialog.java
index 9ad99cba02..08ab01dee2 100644
--- 
a/plugins/transforms/vcard/src/main/java/org/apache/hop/pipeline/transforms/vcardoutput/VCardOutputDialog.java
+++ 
b/plugins/transforms/vcard/src/main/java/org/apache/hop/pipeline/transforms/vcardoutput/VCardOutputDialog.java
@@ -18,7 +18,6 @@ package org.apache.hop.pipeline.transforms.vcardoutput;
 
 import static org.apache.hop.core.util.Utils.isEmpty;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -38,6 +37,7 @@ import 
org.apache.hop.pipeline.transforms.vcard.VCardMappingDialogUtil;
 import org.apache.hop.pipeline.transforms.vcard.VCardPropertyType;
 import org.apache.hop.pipeline.transforms.vcard.VCardStreamFieldMatcher;
 import org.apache.hop.pipeline.transforms.vcard.VCardVersionOption;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.EnterMappingDialog;
@@ -637,10 +637,9 @@ public class VCardOutputDialog extends BaseTransformDialog 
implements ITransform
   private void setEncodings() {
     if (!gotEncodings) {
       gotEncodings = true;
-      wEncoding.removeAll();
-      for (Charset charset : Charset.availableCharsets().values()) {
-        wEncoding.add(charset.displayName());
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/addxml/AddXmlDialog.java
 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/addxml/AddXmlDialog.java
index b160694b94..2ddf96a3f0 100644
--- 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/addxml/AddXmlDialog.java
+++ 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/addxml/AddXmlDialog.java
@@ -17,7 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.xml.addxml;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -34,6 +33,7 @@ import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.transform.TransformMeta;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.ErrorDialog;
@@ -429,20 +429,9 @@ public class AddXmlDialog extends BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      } else {
-        wEncoding.select(Const.indexOfString(Const.UTF_8, 
wEncoding.getItems()));
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/advancedxmloutput/AdvancedXmlOutputDialog.java
 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/advancedxmloutput/AdvancedXmlOutputDialog.java
index 690b63aff6..fcc01ee3d7 100644
--- 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/advancedxmloutput/AdvancedXmlOutputDialog.java
+++ 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/advancedxmloutput/AdvancedXmlOutputDialog.java
@@ -17,7 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.xml.advancedxmloutput;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.core.Const;
@@ -29,6 +28,7 @@ import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.transform.TransformMeta;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.ErrorDialog;
@@ -715,20 +715,9 @@ public class AdvancedXmlOutputDialog extends 
BaseTransformDialog {
       return;
     }
     encodingsLoaded = true;
-    List<String> encs = new ArrayList<>(Charset.availableCharsets().keySet());
-    java.util.Collections.sort(encs);
     String current = wEncoding.getText();
-    for (String e : encs) {
-      wEncoding.add(e);
-    }
-    if (!Utils.isEmpty(current)) {
-      int idx = wEncoding.indexOf(current);
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      } else {
-        wEncoding.setText(current);
-      }
-    }
+    wEncoding.setItems(ConstUi.getEncodings());
+    wEncoding.setText(Const.NVL(current, ""));
   }
 
   // 
---------------------------------------------------------------------------
diff --git 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/getxmldata/GetXmlDataDialog.java
 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/getxmldata/GetXmlDataDialog.java
index 046e938c50..4a7058065d 100644
--- 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/getxmldata/GetXmlDataDialog.java
+++ 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/getxmldata/GetXmlDataDialog.java
@@ -24,8 +24,6 @@ import static 
org.apache.hop.pipeline.transforms.xml.getxmldata.GetXmlDataField.
 import static 
org.apache.hop.pipeline.transforms.xml.getxmldata.GetXmlDataField.getTrimTypeByDesc;
 import static 
org.apache.hop.pipeline.transforms.xml.getxmldata.GetXmlDataField.getTrimTypeCode;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.Props;
 import org.apache.hop.core.RowMetaAndData;
@@ -41,6 +39,7 @@ import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.Pipeline;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.PipelinePreviewFactory;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.FormDataBuilder;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
@@ -1597,18 +1596,9 @@ public class GetXmlDataDialog extends 
BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      ArrayList<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/xmljoin/XmlJoinDialog.java
 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/xmljoin/XmlJoinDialog.java
index 879a2fef6f..07be815f73 100644
--- 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/xmljoin/XmlJoinDialog.java
+++ 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/xmljoin/XmlJoinDialog.java
@@ -17,8 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.xml.xmljoin;
 
-import java.nio.charset.Charset;
-import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.util.Utils;
@@ -26,6 +24,7 @@ import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.transform.TransformMeta;
+import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.widget.TextVar;
@@ -497,20 +496,9 @@ public class XmlJoinDialog extends BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      } else {
-        wEncoding.select(Const.indexOfString(Const.UTF_8, 
wEncoding.getItems()));
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 }
diff --git 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/xmloutput/XmlOutputDialog.java
 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/xmloutput/XmlOutputDialog.java
index 09b79550f0..a3b307e82f 100644
--- 
a/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/xmloutput/XmlOutputDialog.java
+++ 
b/plugins/transforms/xml/src/main/java/org/apache/hop/pipeline/transforms/xml/xmloutput/XmlOutputDialog.java
@@ -17,7 +17,6 @@
 
 package org.apache.hop.pipeline.transforms.xml.xmloutput;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.core.Const;
@@ -768,18 +767,9 @@ public class XmlOutputDialog extends BaseTransformDialog {
     if (!gotEncodings) {
       gotEncodings = true;
 
-      wEncoding.removeAll();
-      List<Charset> values = new 
ArrayList<>(Charset.availableCharsets().values());
-      for (Charset charSet : values) {
-        wEncoding.add(charSet.displayName());
-      }
-
-      // Now select the default!
-      String defEncoding = Const.getEnvironmentVariable("file.encoding", 
Const.UTF_8);
-      int idx = Const.indexOfString(defEncoding, wEncoding.getItems());
-      if (idx >= 0) {
-        wEncoding.select(idx);
-      }
+      String encoding = wEncoding.getText();
+      wEncoding.setItems(ConstUi.getEncodings());
+      wEncoding.setText(Const.NVL(encoding, ""));
     }
   }
 
diff --git a/ui/src/main/java/org/apache/hop/ui/core/ConstUi.java 
b/ui/src/main/java/org/apache/hop/ui/core/ConstUi.java
index 4bc7dee85c..046e656c3a 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/ConstUi.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/ConstUi.java
@@ -17,7 +17,10 @@
 
 package org.apache.hop.ui.core;
 
+import java.nio.charset.Charset;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.util.Utils;
@@ -257,4 +260,20 @@ public class ConstUi {
     }
     return names;
   }
+
+  /**
+   * Get the available character set encodings to show in a drop down. The 
first entry is empty so
+   * that a previously selected encoding can be cleared again, falling back to 
the default encoding.
+   *
+   * @return the available encodings, preceded by an empty entry
+   */
+  public static String[] getEncodings() {
+    Collection<Charset> charsets = Charset.availableCharsets().values();
+    List<String> encodings = new ArrayList<>(charsets.size() + 1);
+    encodings.add("");
+    for (Charset charset : charsets) {
+      encodings.add(charset.displayName());
+    }
+    return encodings.toArray(new String[0]);
+  }
 }
diff --git a/ui/src/test/java/org/apache/hop/ui/core/ConstUiTest.java 
b/ui/src/test/java/org/apache/hop/ui/core/ConstUiTest.java
new file mode 100644
index 0000000000..c8e85de1f2
--- /dev/null
+++ b/ui/src/test/java/org/apache/hop/ui/core/ConstUiTest.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.ui.core;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+class ConstUiTest {
+
+  @Test
+  void encodingListStartsWithAnEmptyEntry() {
+    String[] encodings = ConstUi.getEncodings();
+
+    assertEquals("", encodings[0], "The first encoding must be empty so it can 
be cleared again");
+    assertEquals(Charset.availableCharsets().size() + 1, encodings.length);
+  }
+
+  @Test
+  void encodingListContainsTheAvailableCharsets() {
+    List<String> encodings = Arrays.asList(ConstUi.getEncodings());
+
+    for (Charset charset : Charset.availableCharsets().values()) {
+      assertTrue(
+          encodings.contains(charset.displayName()),
+          () -> "Encoding " + charset.displayName() + " is missing from the 
list");
+    }
+  }
+}

Reply via email to