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 1e97eb50a8 [bug] hide/disable unused fields #4843 (#5768)
1e97eb50a8 is described below

commit 1e97eb50a81df56d7b4b9a2af644cef079d0d6aa
Author: Alex Mueller <[email protected]>
AuthorDate: Tue Oct 14 15:42:17 2025 +0200

    [bug] hide/disable unused fields #4843 (#5768)
    
    [bug] catch NPE when a previous transform has no proper configuration
    [chore] refactored layout initialization for better overview
    [DOCS] explain transform Get Filenames operating modes
    
    [chore]: refactored to use WidgetUtils
    
    Co-authored-by: Alex Mueller <[email protected]>
---
 .../pages/pipeline/transforms/getfilenames.adoc    |   36 +-
 .../getfilenames/GetFileNamesDialog.java           | 1002 ++++++++++----------
 .../messages/messages_de_DE.properties             |    8 +-
 .../messages/messages_en_US.properties             |   10 +-
 .../messages/messages_es_AR.properties             |    3 +-
 .../messages/messages_fr_FR.properties             |    3 +-
 .../messages/messages_it_IT.properties             |    3 +-
 .../messages/messages_ja_JP.properties             |    3 +-
 .../messages/messages_ko_KR.properties             |    3 +-
 .../messages/messages_zh_CN.properties             |    3 +-
 .../org/apache/hop/ui/core/FormDataBuilder.java    |    8 +
 11 files changed, 559 insertions(+), 523 deletions(-)

diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getfilenames.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getfilenames.adoc
index 915482ca61..254ab9eb11 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getfilenames.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getfilenames.adoc
@@ -20,29 +20,35 @@ under the License.
 
 = image:transforms/icons/getfilenames.svg[Get filenames transform Icon, 
role="image-doc-icon"] Get filenames
 
-[%noheader,cols="3a,1a", role="table-no-borders" ]
+[%noheader,cols="3a,1a",role="table-no-borders" ]
 |===
 |
+
 == Description
 
 The Get File Names transform allows you to get information associated with 
file names on the file system.
 
 The information about the retrieved files is added as rows onto the stream.
 
-|
-== Supported Engines
-[%noheader,cols="2,1a",frame=none, role="table-supported-engines"]
+| == Supported Engines
+
+[%noheader,cols="2,1a",frame=none,role="table-supported-engines"]
 !===
-!Hop Engine! image:check_mark.svg[Supported, 24]
-!Spark! image:check_mark.svg[Supported, 24]
-!Flink! image:check_mark.svg[Supported, 24]
-!Dataflow! image:check_mark.svg[Supported, 24]
+!Hop Engine! image:check_mark.svg[Supported,24]
+!Spark! image:check_mark.svg[Supported,24]
+!Flink! image:check_mark.svg[Supported,24]
+!Dataflow! image:check_mark.svg[Supported,24]
 !===
+
 |===
 
 == Usage
 
-The output fields for this transform are:
+This transform operates in two modes.
+
+When metadata is configured within this transform, the input from previous 
transforms is discarded and new rows are being generated.
+
+When metadata is provided form a file field, the following fields are appended 
to the output:
 
 * filename - the complete filename, including the path (/tmp/hop/somefile.txt)
 * short_filename - only the filename, without the path (somefile.txt)
@@ -65,15 +71,18 @@ For more information about specifying file locations, see 
section "Selecting fil
 
 Example: You have a static directory of c:\temp where you expect files with an 
extension of .dat to be placed.
 Under file/directory you would specify c:\temp and under Wildcard you would 
have a RegEx with something like .*\.dat$
+
 [options="header"]
 |===
 |Option|Description
 
 |Is filename defined in a field?|Indicates whether the file you want to load 
is in a field that you can specify.
+2+|*Filenames from field:*
 |Get filename from field|The field to load the file name from.
 |Inclusion wildcard field (RegExp)|If you are loading multiple files, define a 
regular expression that matches the file names to load.
 |Exclusion wildcard field (RegExp)|Define a regular expression that matches 
files you want to exclude from the transform.
 |Include subfolders?|Indicates whether files in subfolders are considered by 
the expressions.
+2+|*Filenames as defined:*
 |File or directory|If the file is not defined by a field, specify the file 
name or the directory to load multiple files from.
 |Add|Click to add the specified file, directory, and regular expressions to 
the selected file list.
 |Browse|Click to select a file.
@@ -95,10 +104,12 @@ The filters tab allows you to filter the retrieved file 
names based on:
 It also gives you:
 
 * The ability to include a row number in the output
-* The ability to limit the number of rows returned. The limit parameter will 
act on the total number of rows returned and not only on the number of files 
returned.
+* The ability to limit the number of rows returned.
+The limit parameter will act on the total number of rows returned and not only 
on the number of files returned.
 * The ability to add the filename(s) to the result list
 * The ability to print an error message in case no files/folders are found 
without stop processing
 * The ability to raise an exception and stop processing in case no 
files/folders are found.
+
 [options="header"]
 |===
 |Option|Description
@@ -113,10 +124,13 @@ It also gives you:
 |===
 
 === Details on how exceptions are raised when no files are found
+
 As described above, if you enable the switch in the _Filter_ tab, Hop will 
raise an exception in case no files are found and will stop the process.
 
 In this case, we need to be aware about two different ways the exceptions are 
raised depending on the way you choose to identify the set of files you are 
looking for.
 
 * If you specified the files (or the inclusion/exclusion expressions) as a set 
in the _Selected files_ table, the files retrieval is performed by considering 
the entire set specified (all at once) and the exception is raised in no files 
are found.
-* If you specified the files by going through the _Filenames from field_ 
option, the details about the files that we are going to retrieve comes in the 
incoming rows. That means that the retrieval is done row by row and as soon as 
one of the details used to specify the searched files fails the exception is 
raised. Therefore, in this case, the evaluation to fire the exception is done 
after the evaluation of each single incoming row and not evaluating the overall 
dataset returned and gener [...]
+* If you specified the files by going through the _Filenames from field_ 
option, the details about the files that we are going to retrieve comes in the 
incoming rows.
+That means that the retrieval is done row by row and as soon as one of the 
details used to specify the searched files fails the exception is raised.
+Therefore, in this case, the evaluation to fire the exception is done after 
the evaluation of each single incoming row and not evaluating the overall 
dataset returned and generated by the details found in the incoming rows.
 
diff --git 
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDialog.java
 
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDialog.java
index 7c6f2f24df..8d13e0900e 100644
--- 
a/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDialog.java
+++ 
b/plugins/transforms/getfilenames/src/main/java/org/apache/hop/pipeline/transforms/getfilenames/GetFileNamesDialog.java
@@ -21,6 +21,7 @@ import org.apache.hop.core.Const;
 import org.apache.hop.core.Props;
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.fileinput.FileInputList;
+import org.apache.hop.core.logging.LogChannel;
 import org.apache.hop.core.row.IRowMeta;
 import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
@@ -28,7 +29,9 @@ 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.FormDataBuilder;
 import org.apache.hop.ui.core.PropsUi;
+import org.apache.hop.ui.core.WidgetUtils;
 import org.apache.hop.ui.core.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.EnterNumberDialog;
 import org.apache.hop.ui.core.dialog.EnterSelectionDialog;
@@ -49,11 +52,10 @@ import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.FormAttachment;
 import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
@@ -105,6 +107,7 @@ public class GetFileNamesDialog extends BaseTransformDialog 
{
   private final GetFileNamesMeta input;
 
   private Button wFileField;
+  private Label wFileFieldWarning;
 
   private Label wlFilenameField;
   private CCombo wFilenameField;
@@ -128,6 +131,10 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
 
   private boolean getPreviousFields = false;
 
+  private Group groupAsDefined;
+
+  private Group groupFromField;
+
   public GetFileNamesDialog(
       Shell parent,
       IVariables variables,
@@ -137,108 +144,60 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
     input = transformMeta;
   }
 
-  @Override
-  public String open() {
-    Shell parent = getParent();
-
-    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX | 
SWT.MIN);
-    PropsUi.setLook(shell);
-    setShellImage(shell, input);
-
-    ModifyListener lsMod = e -> input.setChanged();
-    changed = input.hasChanged();
-
-    FormLayout formLayout = new FormLayout();
-    formLayout.marginWidth = PropsUi.getFormMargin();
-    formLayout.marginHeight = PropsUi.getFormMargin();
-
-    shell.setLayout(formLayout);
-    shell.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.DialogTitle"));
+  private void createTransformName(Shell shell, int margin, int middle, 
ModifyListener lsMod) {
+    // TransformName line
+    wlTransformName = new Label(shell, SWT.RIGHT);
+    wlTransformName.setText(BaseMessages.getString(PKG, 
"System.TransformName.Label"));
+    wlTransformName.setToolTipText(BaseMessages.getString(PKG, 
"System.TransformName.Tooltip"));
+    PropsUi.setLook(wlTransformName);
+    wlTransformName.setLayoutData(
+        new FormDataBuilder().left(0, margin).top(0, margin).right(middle, -2 
* margin).result());
 
-    int middle = props.getMiddlePct();
-    int margin = PropsUi.getMargin();
+    wTransformName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    wTransformName.setText(transformName);
+    PropsUi.setLook(wTransformName);
+    wTransformName.addModifyListener(lsMod);
+    wTransformName.setLayoutData(
+        new FormDataBuilder().left(middle, -margin).top(0, margin).right(100, 
-margin).result());
+  }
 
-    // Buttons at the bottom
+  private void createDialogButtons(Shell shell, int margin) {
     wOk = new Button(shell, SWT.PUSH);
     wOk.setText(BaseMessages.getString(PKG, "System.Button.OK"));
     wOk.addListener(SWT.Selection, e -> ok());
+
     wPreview = new Button(shell, SWT.PUSH);
     wPreview.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.Preview.Button"));
     wPreview.addListener(SWT.Selection, e -> preview());
+
     wCancel = new Button(shell, SWT.PUSH);
     wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
     wCancel.addListener(SWT.Selection, e -> cancel());
     setButtonPositions(new Button[] {wOk, wPreview, wCancel}, margin, null);
+  }
 
-    // TransformName line
-    wlTransformName = new Label(shell, SWT.RIGHT);
-    wlTransformName.setText(BaseMessages.getString(PKG, 
"System.TransformName.Label"));
-    wlTransformName.setToolTipText(BaseMessages.getString(PKG, 
"System.TransformName.Tooltip"));
-    PropsUi.setLook(wlTransformName);
-    fdlTransformName = new FormData();
-    fdlTransformName.left = new FormAttachment(0, 0);
-    fdlTransformName.top = new FormAttachment(0, margin);
-    fdlTransformName.right = new FormAttachment(middle, -margin);
-    wlTransformName.setLayoutData(fdlTransformName);
-    wTransformName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
-    wTransformName.setText(transformName);
-    PropsUi.setLook(wTransformName);
-    wTransformName.addModifyListener(lsMod);
-    fdTransformName = new FormData();
-    fdTransformName.left = new FormAttachment(middle, 0);
-    fdTransformName.top = new FormAttachment(0, margin);
-    fdTransformName.right = new FormAttachment(100, 0);
-    wTransformName.setLayoutData(fdTransformName);
-
-    CTabFolder wTabFolder = new CTabFolder(shell, SWT.BORDER);
-    PropsUi.setLook(wTabFolder, Props.WIDGET_STYLE_TAB);
-
-    // ////////////////////////
-    // START OF FILE TAB ///
-    // ////////////////////////
-    CTabItem wFileTab = new CTabItem(wTabFolder, SWT.NONE);
-    wFileTab.setFont(GuiResource.getInstance().getFontDefault());
-    wFileTab.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FileTab.TabTitle"));
-
-    Composite wFileComp = new Composite(wTabFolder, SWT.NONE);
-    PropsUi.setLook(wFileComp);
-
-    FormLayout fileLayout = new FormLayout();
-    fileLayout.marginWidth = 3;
-    fileLayout.marginHeight = 3;
-    wFileComp.setLayout(fileLayout);
-
-    // ///////////////////////////////
-    // START OF Origin files GROUP //
-    // ///////////////////////////////
-
-    Group wOriginFiles = new Group(wFileComp, SWT.SHADOW_NONE);
-    PropsUi.setLook(wOriginFiles);
-    wOriginFiles.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.OriginFiles.Label"));
-
-    FormLayout originFilesgroupLayout = new FormLayout();
-    originFilesgroupLayout.marginWidth = 10;
-    originFilesgroupLayout.marginHeight = 10;
-    wOriginFiles.setLayout(originFilesgroupLayout);
-
-    // Is Filename defined in a Field
-    Label wlFileField = new Label(wOriginFiles, SWT.RIGHT);
-    wlFileField.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FileField.Label"));
-    PropsUi.setLook(wlFileField);
-    FormData fdlFileField = new FormData();
-    fdlFileField.left = new FormAttachment(0, -margin);
-    fdlFileField.top = new FormAttachment(0, margin);
-    fdlFileField.right = new FormAttachment(middle, -2 * margin);
-    wlFileField.setLayoutData(fdlFileField);
-
-    wFileField = new Button(wOriginFiles, SWT.CHECK);
+  private Group createGroupOpMode(Composite parent, int margin, int middle) {
+    Group group = new Group(parent, SWT.SHADOW_NONE);
+    PropsUi.setLook(group);
+    group.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.Group.OpMode.Label"));
+    WidgetUtils.setFormLayout(group, 10);
+
+    Label label = new Label(group, SWT.RIGHT);
+    label.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FileField.Label"));
+    PropsUi.setLook(label);
+    label.setLayoutData(
+        new FormDataBuilder()
+            .left(0, -margin)
+            .top(group, margin)
+            .right(middle, -2 * margin)
+            .result());
+
+    wFileField = new Button(group, SWT.CHECK);
     PropsUi.setLook(wFileField);
     wFileField.setToolTipText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FileField.Tooltip"));
-    FormData fdFileField = new FormData();
-    fdFileField.left = new FormAttachment(middle, -margin);
-    fdFileField.top = new FormAttachment(wlFileField, 0, SWT.CENTER);
-    wFileField.setLayoutData(fdFileField);
-    SelectionAdapter lfilefield =
+    wFileField.setLayoutData(new FormDataBuilder().left(middle, 
-margin).top(0, margin).result());
+
+    wFileField.addSelectionListener(
         new SelectionAdapter() {
           @Override
           public void widgetSelected(SelectionEvent arg0) {
@@ -246,89 +205,117 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
             setFileField();
             input.setChanged();
           }
-        };
-    wFileField.addSelectionListener(lfilefield);
+        });
+
+    wFileFieldWarning = new Label(group, SWT.LEFT);
+    wFileFieldWarning.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FileField.Warning"));
+    PropsUi.setLook(wFileFieldWarning);
+    wFileFieldWarning.setLayoutData(
+        new FormDataBuilder()
+            .left(wFileField, margin)
+            .top(label, 0, SWT.CENTER)
+            .right(100, -margin)
+            .result());
+
+    return group;
+  }
+
+  private Group createGroupFromField(
+      Composite parent, int margin, int middle, ModifyListener lsMod) {
+    Group group = new Group(parent, SWT.SHADOW_NONE);
+    PropsUi.setLook(group);
+    group.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.Group.FromField.Label"));
+    WidgetUtils.setFormLayout(group, 10);
 
     // Filename field
-    wlFilenameField = new Label(wOriginFiles, SWT.RIGHT);
+    wlFilenameField = new Label(group, SWT.RIGHT);
     wlFilenameField.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilenameField.Label"));
     PropsUi.setLook(wlFilenameField);
-    FormData fdlFilenameField = new FormData();
-    fdlFilenameField.left = new FormAttachment(0, -margin);
-    fdlFilenameField.top = new FormAttachment(wFileField, margin);
-    fdlFilenameField.right = new FormAttachment(middle, -2 * margin);
-    wlFilenameField.setLayoutData(fdlFilenameField);
-
-    wFilenameField = new CCombo(wOriginFiles, SWT.BORDER | SWT.READ_ONLY);
+    wlFilenameField.setLayoutData(
+        new FormDataBuilder()
+            .left(0, -margin)
+            .top(wFileField, margin)
+            .right(middle, -2 * margin)
+            .result());
+
+    wFilenameField = new CCombo(group, SWT.BORDER | SWT.READ_ONLY);
     wFilenameField.setEditable(true);
     PropsUi.setLook(wFilenameField);
     wFilenameField.addModifyListener(lsMod);
-    FormData fdFilenameField = new FormData();
-    fdFilenameField.left = new FormAttachment(middle, -margin);
-    fdFilenameField.top = new FormAttachment(wFileField, margin);
-    fdFilenameField.right = new FormAttachment(100, -margin);
-    wFilenameField.setLayoutData(fdFilenameField);
+    wFilenameField.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, -margin)
+            .top(wFileField, margin)
+            .right(100, -margin)
+            .result());
 
     // Wildcard field
-    wlWildcardField = new Label(wOriginFiles, SWT.RIGHT);
+    wlWildcardField = new Label(group, SWT.RIGHT);
     wlWildcardField.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.WildcardField.Label"));
     PropsUi.setLook(wlWildcardField);
-    FormData fdlWildcardField = new FormData();
-    fdlWildcardField.left = new FormAttachment(0, -margin);
-    fdlWildcardField.top = new FormAttachment(wFilenameField, margin);
-    fdlWildcardField.right = new FormAttachment(middle, -2 * margin);
-    wlWildcardField.setLayoutData(fdlWildcardField);
-
-    wWildcardField = new CCombo(wOriginFiles, SWT.BORDER | SWT.READ_ONLY);
+    wlWildcardField.setLayoutData(
+        new FormDataBuilder()
+            .left(0, -margin)
+            .top(wFilenameField, margin)
+            .right(middle, -2 * margin)
+            .result());
+
+    wWildcardField = new CCombo(group, SWT.BORDER | SWT.READ_ONLY);
     wWildcardField.setEditable(true);
     PropsUi.setLook(wWildcardField);
     wWildcardField.addModifyListener(lsMod);
-    FormData fdWildcardField = new FormData();
-    fdWildcardField.left = new FormAttachment(middle, -margin);
-    fdWildcardField.top = new FormAttachment(wFilenameField, margin);
-    fdWildcardField.right = new FormAttachment(100, -margin);
-    wWildcardField.setLayoutData(fdWildcardField);
+    wWildcardField.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, -margin)
+            .top(wFilenameField, margin)
+            .right(100, -margin)
+            .result());
 
     // ExcludeWildcard field
-    wlExcludeWildcardField = new Label(wOriginFiles, SWT.RIGHT);
+    wlExcludeWildcardField = new Label(group, SWT.RIGHT);
     wlExcludeWildcardField.setText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.ExcludeWildcardField.Label"));
     PropsUi.setLook(wlExcludeWildcardField);
-    FormData fdlExcludeWildcardField = new FormData();
-    fdlExcludeWildcardField.left = new FormAttachment(0, -margin);
-    fdlExcludeWildcardField.top = new FormAttachment(wWildcardField, margin);
-    fdlExcludeWildcardField.right = new FormAttachment(middle, -2 * margin);
-    wlExcludeWildcardField.setLayoutData(fdlExcludeWildcardField);
-
-    wExcludeWildcardField = new CCombo(wOriginFiles, SWT.BORDER | 
SWT.READ_ONLY);
+    wlExcludeWildcardField.setLayoutData(
+        new FormDataBuilder()
+            .left(0, -margin)
+            .top(wWildcardField, margin)
+            .right(middle, -2 * margin)
+            .result());
+
+    wExcludeWildcardField = new CCombo(group, SWT.BORDER | SWT.READ_ONLY);
     wExcludeWildcardField.setEditable(true);
     PropsUi.setLook(wExcludeWildcardField);
     wExcludeWildcardField.addModifyListener(lsMod);
-    FormData fdExcludeWildcardField = new FormData();
-    fdExcludeWildcardField.left = new FormAttachment(middle, -margin);
-    fdExcludeWildcardField.top = new FormAttachment(wWildcardField, margin);
-    fdExcludeWildcardField.right = new FormAttachment(100, -margin);
-    wExcludeWildcardField.setLayoutData(fdExcludeWildcardField);
+    wExcludeWildcardField.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, -margin)
+            .top(wWildcardField, margin)
+            .right(100, -margin)
+            .result());
 
     // Is includeSubFoldername defined in a Field
-    wlIncludeSubFolder = new Label(wOriginFiles, SWT.RIGHT);
+    wlIncludeSubFolder = new Label(group, SWT.RIGHT);
     wlIncludeSubFolder.setText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.IncludeSubFolder.Label"));
     PropsUi.setLook(wlIncludeSubFolder);
-    FormData fdlIncludeSubFolder = new FormData();
-    fdlIncludeSubFolder.left = new FormAttachment(0, -margin);
-    fdlIncludeSubFolder.top = new FormAttachment(wExcludeWildcardField, 
margin);
-    fdlIncludeSubFolder.right = new FormAttachment(middle, -2 * margin);
-    wlIncludeSubFolder.setLayoutData(fdlIncludeSubFolder);
-
-    wIncludeSubFolder = new Button(wOriginFiles, SWT.CHECK);
+    wlIncludeSubFolder.setLayoutData(
+        new FormDataBuilder()
+            .left(0, -margin)
+            .top(wExcludeWildcardField, margin)
+            .right(middle, -2 * margin)
+            .result());
+
+    wIncludeSubFolder = new Button(group, SWT.CHECK);
     PropsUi.setLook(wIncludeSubFolder);
     wIncludeSubFolder.setToolTipText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.IncludeSubFolder.Tooltip"));
-    FormData fdIncludeSubFolder = new FormData();
-    fdIncludeSubFolder.left = new FormAttachment(middle, -margin);
-    fdIncludeSubFolder.top = new FormAttachment(wlIncludeSubFolder, 0, 
SWT.CENTER);
-    wIncludeSubFolder.setLayoutData(fdIncludeSubFolder);
+    wIncludeSubFolder.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, -margin)
+            .top(wlIncludeSubFolder, 0, SWT.CENTER)
+            .result());
+
     wIncludeSubFolder.addSelectionListener(
         new SelectionAdapter() {
           @Override
@@ -337,129 +324,229 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
           }
         });
 
-    FormData fdOriginFiles = new FormData();
-    fdOriginFiles.left = new FormAttachment(0, margin);
-    fdOriginFiles.top = new FormAttachment(wFilenameList, margin);
-    fdOriginFiles.right = new FormAttachment(100, -margin);
-    wOriginFiles.setLayoutData(fdOriginFiles);
+    return group;
+  }
 
-    // ///////////////////////////////////////////////////////////
-    // / END OF Origin files GROUP
-    // ///////////////////////////////////////////////////////////
+  private Group createGroupAsDefined(
+      Composite parent, int margin, int middle, ModifyListener lsMod) {
+    Group group = new Group(parent, SWT.SHADOW_NONE);
+    PropsUi.setLook(group);
+    group.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.Group.ByDefinition.Label"));
+    WidgetUtils.setFormLayout(group, 10);
 
-    // Filename line
-    wlFilename = new Label(wFileComp, SWT.RIGHT);
+    // File or directory
+    wlFilename = new Label(group, SWT.RIGHT);
     wlFilename.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.Filename.Label"));
     PropsUi.setLook(wlFilename);
-    FormData fdlFilename = new FormData();
-    fdlFilename.left = new FormAttachment(0, 0);
-    fdlFilename.top = new FormAttachment(wOriginFiles, 2 * margin);
-    fdlFilename.right = new FormAttachment(middle, -margin);
-    wlFilename.setLayoutData(fdlFilename);
-
-    wbbFilename = new Button(wFileComp, SWT.PUSH | SWT.CENTER);
+    wlFilename.setLayoutData(
+        new FormDataBuilder()
+            .left(0, -margin)
+            .top(wFileField, margin)
+            .right(middle, -2 * margin)
+            .result());
+
+    // Button: Browse...
+    wbbFilename = new Button(group, SWT.PUSH | SWT.CENTER);
     PropsUi.setLook(wbbFilename);
     wbbFilename.setText(BaseMessages.getString(PKG, "System.Button.Browse"));
     wbbFilename.setToolTipText(
         BaseMessages.getString(PKG, 
"System.Tooltip.BrowseForFileOrDirAndAdd"));
-    FormData fdbFilename = new FormData();
-    fdbFilename.right = new FormAttachment(100, 0);
-    fdbFilename.top = new FormAttachment(wlFilename, 0, SWT.CENTER);
-    wbbFilename.setLayoutData(fdbFilename);
+    wbbFilename.setLayoutData(
+        new FormDataBuilder().top(wlFilename, 0, SWT.CENTER).right(100, 
0).result());
+    wbbFilename.addListener(
+        SWT.Selection,
+        e -> {
+          if (!Utils.isEmpty(wFilemask.getText()) || 
!Utils.isEmpty(wExcludeFilemask.getText())) {
+            BaseDialog.presentDirectoryDialog(shell, wFilename, variables);
+          } else {
+            BaseDialog.presentFileDialog(
+                shell,
+                wFilename,
+                variables,
+                new String[] {"*.txt;*.csv", "*.csv", "*.txt", "*"},
+                new String[] {
+                  BaseMessages.getString(PKG, 
"GetFileNamesDialog.FileType.TextAndCSVFiles"),
+                  BaseMessages.getString(PKG, "System.FileType.CSVFiles"),
+                  BaseMessages.getString(PKG, "System.FileType.TextFiles"),
+                  BaseMessages.getString(PKG, "System.FileType.AllFiles")
+                },
+                true);
+          }
+        });
 
-    wbaFilename = new Button(wFileComp, SWT.PUSH | SWT.CENTER);
+    // Button: Add
+    wbaFilename = new Button(group, SWT.PUSH | SWT.CENTER);
     PropsUi.setLook(wbaFilename);
     wbaFilename.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilenameAdd.Button"));
     wbaFilename.setToolTipText(
         BaseMessages.getString(PKG, "GetFileNamesDialog.FilenameAdd.Tooltip"));
-    FormData fdbaFilename = new FormData();
-    fdbaFilename.right = new FormAttachment(wbbFilename, -margin);
-    fdbaFilename.top = new FormAttachment(wlFilename, 0, SWT.CENTER);
-    wbaFilename.setLayoutData(fdbaFilename);
+    wbaFilename.setLayoutData(
+        new FormDataBuilder().top(wlFilename, 0, 
SWT.CENTER).right(wbbFilename, -margin).result());
 
-    wFilename = new TextVar(variables, wFileComp, SWT.SINGLE | SWT.LEFT | 
SWT.BORDER);
+    wFilename = new TextVar(variables, group, SWT.SINGLE | SWT.LEFT | 
SWT.BORDER);
     PropsUi.setLook(wFilename);
     wFilename.addModifyListener(lsMod);
-    FormData fdFilename = new FormData();
-    fdFilename.left = new FormAttachment(middle, 0);
-    fdFilename.right = new FormAttachment(wbaFilename, -margin);
-    fdFilename.top = new FormAttachment(wlFilename, 0, SWT.CENTER);
-    wFilename.setLayoutData(fdFilename);
+    wFilename.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, 0)
+            .top(wlFilename, 0, SWT.CENTER)
+            .right(wbaFilename, -margin)
+            .result());
+
+    SelectionAdapter addFileToListAdapter =
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent arg0) {
+            wFilenameList.add(
+                wFilename.getText(),
+                wFilemask.getText(),
+                wExcludeFilemask.getText(),
+                GetFileNamesMeta.RequiredFilesCode[0],
+                GetFileNamesMeta.RequiredFilesCode[0]);
+            wFilename.setText("");
+            wFilemask.setText("");
+            wFilenameList.removeEmptyRows();
+            wFilenameList.setRowNums();
+            wFilenameList.optWidth(true);
+          }
+        };
+    wbaFilename.addSelectionListener(addFileToListAdapter);
+    wFilename.addSelectionListener(addFileToListAdapter);
 
-    wlFilemask = new Label(wFileComp, SWT.RIGHT);
+    // Inclusion wildcard (RegExp)
+    wlFilemask = new Label(group, SWT.RIGHT);
     wlFilemask.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.Filemask.Label"));
     PropsUi.setLook(wlFilemask);
-    FormData fdlFilemask = new FormData();
-    fdlFilemask.left = new FormAttachment(0, 0);
-    fdlFilemask.top = new FormAttachment(wFilename, margin);
-    fdlFilemask.right = new FormAttachment(middle, -margin);
-    wlFilemask.setLayoutData(fdlFilemask);
-    wFilemask = new TextVar(variables, wFileComp, SWT.SINGLE | SWT.LEFT | 
SWT.BORDER);
+    wlFilemask.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wFilename, margin)
+            .right(middle, -2 * margin)
+            .result());
+
+    wFilemask = new TextVar(variables, group, SWT.SINGLE | SWT.LEFT | 
SWT.BORDER);
     PropsUi.setLook(wFilemask);
     wFilemask.addModifyListener(lsMod);
-    FormData fdFilemask = new FormData();
-    fdFilemask.left = new FormAttachment(middle, 0);
-    fdFilemask.top = new FormAttachment(wlFilemask, 0, SWT.CENTER);
-    fdFilemask.right = new FormAttachment(wFilename, 0, SWT.RIGHT);
-    wFilemask.setLayoutData(fdFilemask);
-
-    wlExcludeFilemask = new Label(wFileComp, SWT.RIGHT);
+    wFilemask.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, 0)
+            .top(wlFilemask, 0, SWT.CENTER)
+            .right(wFilename, 0, SWT.RIGHT)
+            .result());
+
+    // Exclusion wildcard (RegExp)
+    wlExcludeFilemask = new Label(group, SWT.RIGHT);
     wlExcludeFilemask.setText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.ExcludeFilemask.Label"));
     PropsUi.setLook(wlExcludeFilemask);
-    FormData fdlExcludeFilemask = new FormData();
-    fdlExcludeFilemask.left = new FormAttachment(0, 0);
-    fdlExcludeFilemask.top = new FormAttachment(wFilemask, margin);
-    fdlExcludeFilemask.right = new FormAttachment(middle, -margin);
-    wlExcludeFilemask.setLayoutData(fdlExcludeFilemask);
-    wExcludeFilemask = new TextVar(variables, wFileComp, SWT.SINGLE | SWT.LEFT 
| SWT.BORDER);
+    wlExcludeFilemask.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wlFilemask, margin)
+            .right(middle, -2 * margin)
+            .result());
+
+    wExcludeFilemask = new TextVar(variables, group, SWT.SINGLE | SWT.LEFT | 
SWT.BORDER);
     PropsUi.setLook(wExcludeFilemask);
     wExcludeFilemask.addModifyListener(lsMod);
-    FormData fdExcludeFilemask = new FormData();
-    fdExcludeFilemask.left = new FormAttachment(middle, 0);
-    fdExcludeFilemask.top = new FormAttachment(wlExcludeFilemask, 0, 
SWT.CENTER);
-    fdExcludeFilemask.right = new FormAttachment(wFilename, 0, SWT.RIGHT);
-    wExcludeFilemask.setLayoutData(fdExcludeFilemask);
-
-    // Filename list line
-    wlFilenameList = new Label(wFileComp, SWT.RIGHT);
+    wExcludeFilemask.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, 0)
+            .top(wlExcludeFilemask, 0, SWT.CENTER)
+            .right(wFilename, 0, SWT.RIGHT)
+            .result());
+
+    // Selected files:
+    wlFilenameList = new Label(group, SWT.RIGHT);
     wlFilenameList.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilenameList.Label"));
     PropsUi.setLook(wlFilenameList);
-    FormData fdlFilenameList = new FormData();
-    fdlFilenameList.left = new FormAttachment(0, 0);
-    fdlFilenameList.top = new FormAttachment(wExcludeFilemask, margin);
-    fdlFilenameList.right = new FormAttachment(middle, -margin);
-    wlFilenameList.setLayoutData(fdlFilenameList);
-
-    // Buttons to the right of the screen...
-    wbdFilename = new Button(wFileComp, SWT.PUSH | SWT.CENTER);
+    wlFilenameList.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wExcludeFilemask, margin)
+            .right(middle, -2 * margin)
+            .result());
+
+    // Button: Delete
+    wbdFilename = new Button(group, SWT.PUSH | SWT.CENTER);
     PropsUi.setLook(wbdFilename);
     wbdFilename.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilenameDelete.Button"));
     wbdFilename.setToolTipText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilenameDelete.Tooltip"));
-    FormData fdbdFilename = new FormData();
-    fdbdFilename.right = new FormAttachment(100, 0);
-    fdbdFilename.top = new FormAttachment(wExcludeFilemask, margin);
-    wbdFilename.setLayoutData(fdbdFilename);
+    wbdFilename.setLayoutData(
+        new FormDataBuilder().top(wExcludeFilemask, margin).right(100, 
0).result());
+    wbdFilename.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent arg0) {
+            int[] idx = wFilenameList.getSelectionIndices();
+            wFilenameList.remove(idx);
+            wFilenameList.removeEmptyRows();
+            wFilenameList.setRowNums();
+            input.setChanged();
+          }
+        });
 
-    wbeFilename = new Button(wFileComp, SWT.PUSH | SWT.CENTER);
+    // Button: Edit
+    wbeFilename = new Button(group, SWT.PUSH | SWT.CENTER);
     PropsUi.setLook(wbeFilename);
     wbeFilename.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilenameEdit.Button"));
     wbeFilename.setToolTipText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilenameEdit.Tooltip"));
-    FormData fdbeFilename = new FormData();
-    fdbeFilename.right = new FormAttachment(100, 0);
-    fdbeFilename.left = new FormAttachment(wbdFilename, 0, SWT.LEFT);
-    fdbeFilename.top = new FormAttachment(wbdFilename, margin);
-    wbeFilename.setLayoutData(fdbeFilename);
+    wbeFilename.setLayoutData(
+        new FormDataBuilder()
+            .left(wbdFilename, 0, SWT.LEFT)
+            .top(wbdFilename, margin)
+            .right(100, 0)
+            .result());
+    wbeFilename.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent arg0) {
+            int idx = wFilenameList.getSelectionIndex();
+            if (idx >= 0) {
+              String[] string = wFilenameList.getItem(idx);
+              wFilename.setText(string[0]);
+              wFilemask.setText(string[1]);
+              wExcludeFilemask.setText(string[2]);
+              wFilenameList.remove(idx);
+            }
+            wFilenameList.removeEmptyRows();
+            wFilenameList.setRowNums();
+            input.setChanged();
+          }
+        });
 
-    wbShowFiles = new Button(wFileComp, SWT.PUSH | SWT.CENTER);
+    // Button: Show filename(s)...
+    wbShowFiles = new Button(group, SWT.PUSH | SWT.CENTER);
     PropsUi.setLook(wbShowFiles);
     wbShowFiles.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.ShowFiles.Button"));
-    FormData fdbShowFiles = new FormData();
-    fdbShowFiles.left = new FormAttachment(middle, 0);
-    fdbShowFiles.bottom = new FormAttachment(100, 0);
-    wbShowFiles.setLayoutData(fdbShowFiles);
+    wbShowFiles.setLayoutData(new FormDataBuilder().left(middle, 
0).bottom(100, 0).result());
+    wbShowFiles.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent e) {
+            GetFileNamesMeta tfii = new GetFileNamesMeta();
+            getInfo(tfii);
+            String[] files = tfii.getFilePaths(variables);
+            if (files != null && files.length > 0) {
+              EnterSelectionDialog esd =
+                  new EnterSelectionDialog(shell, files, "Files read", "Files 
read:");
+              esd.setViewOnly();
+              esd.open();
+            } else {
+              String elementTypeToGet =
+                  
FileInputList.FileTypeFilter.getByOrdinal(wFilterFileType.getSelectionIndex())
+                      .toString();
+              MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
+              mb.setMessage(
+                  BaseMessages.getString(
+                      PKG, "GetFileNamesDialog.NoFilesFound.DialogMessage", 
elementTypeToGet));
+              mb.setText(BaseMessages.getString(PKG, 
"System.Dialog.Error.Title"));
+              mb.open();
+            }
+          }
+        });
 
     ColumnInfo[] colinfo =
         new ColumnInfo[] {
@@ -497,80 +584,85 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
     wFilenameList =
         new TableView(
             variables,
-            wFileComp,
+            group,
             SWT.FULL_SELECTION | SWT.SINGLE | SWT.BORDER,
             colinfo,
             colinfo.length,
             lsMod,
             props);
     PropsUi.setLook(wFilenameList);
-    FormData fdFilenameList = new FormData();
-    fdFilenameList.left = new FormAttachment(middle, 0);
-    fdFilenameList.right = new FormAttachment(wbdFilename, -margin);
-    fdFilenameList.top = new FormAttachment(wExcludeFilemask, margin);
-    fdFilenameList.bottom = new FormAttachment(wbShowFiles, -margin);
-    wFilenameList.setLayoutData(fdFilenameList);
-
-    FormData fdFileComp = new FormData();
-    fdFileComp.left = new FormAttachment(0, 0);
-    fdFileComp.top = new FormAttachment(0, 0);
-    fdFileComp.right = new FormAttachment(100, 0);
-    fdFileComp.bottom = new FormAttachment(100, 0);
-    wFileComp.setLayoutData(fdFileComp);
-
-    wFileComp.layout();
-    wFileTab.setControl(wFileComp);
+    wFilenameList.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, 0)
+            .top(wExcludeFilemask, margin)
+            .right(wbdFilename, -margin)
+            .bottom(wbShowFiles, -margin)
+            .result());
+
+    return group;
+  }
 
-    // ///////////////////////////////////////////////////////////
-    // / END OF FILE TAB
-    // ///////////////////////////////////////////////////////////
+  private void createTabFile(CTabFolder wTabFolder, int margin, int middle, 
ModifyListener lsMod) {
+    CTabItem wFileTab = new CTabItem(wTabFolder, SWT.NONE);
+    wFileTab.setFont(GuiResource.getInstance().getFontDefault());
+    wFileTab.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FileTab.TabTitle"));
+
+    Composite composite = new Composite(wTabFolder, SWT.NONE);
+    composite.setLayoutData(
+        new FormDataBuilder().left(0, 0).top(0, 0).right(100, 0).bottom(100, 
0));
+    PropsUi.setLook(composite);
+    WidgetUtils.setFormLayout(composite, 3);
 
-    FormData fdTabFolder = new FormData();
-    fdTabFolder.left = new FormAttachment(0, 0);
-    fdTabFolder.top = new FormAttachment(wTransformName, margin);
-    fdTabFolder.right = new FormAttachment(100, 0);
-    fdTabFolder.bottom = new FormAttachment(wOk, -2 * margin);
-    wTabFolder.setLayoutData(fdTabFolder);
+    Group opModeGroup = createGroupOpMode(composite, margin, middle);
+    opModeGroup.setLayoutData(
+        new FormDataBuilder().left(0, margin).top(0, margin).right(100, 
-margin).result());
+
+    FormData belowOpModeGroupLayout =
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(opModeGroup, margin)
+            .right(100, -margin)
+            .bottom(100, -margin)
+            .result();
+
+    groupAsDefined = createGroupAsDefined(composite, margin, middle, lsMod);
+    groupAsDefined.setLayoutData(belowOpModeGroupLayout);
+
+    groupFromField = createGroupFromField(composite, margin, middle, lsMod);
+    groupFromField.setLayoutData(belowOpModeGroupLayout);
+
+    composite.layout();
+    wFileTab.setControl(composite);
+  }
+
+  private void createTabFilter(
+      CTabFolder wTabFolder, int margin, int middle, ModifyListener lsMod) {
 
-    // ////////////////////////
-    // START OF Filter TAB ///
-    // ////////////////////////
     CTabItem wFilterTab = new CTabItem(wTabFolder, SWT.NONE);
     wFilterTab.setFont(GuiResource.getInstance().getFontDefault());
     wFilterTab.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilterTab.TabTitle"));
 
     Composite wFilterComp = new Composite(wTabFolder, SWT.NONE);
     PropsUi.setLook(wFilterComp);
-
-    FormLayout filesettingLayout = new FormLayout();
-    filesettingLayout.marginWidth = 3;
-    filesettingLayout.marginHeight = 3;
-    wFilterComp.setLayout(fileLayout);
+    WidgetUtils.setFormLayout(wFilterComp, 3);
 
     // Filter File Type
     Label wlFilterFileType = new Label(wFilterComp, SWT.RIGHT);
     wlFilterFileType.setText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilterTab.FileType.Label"));
     PropsUi.setLook(wlFilterFileType);
-    FormData fdlFilterFileType = new FormData();
-    fdlFilterFileType.left = new FormAttachment(0, 0);
-    fdlFilterFileType.right = new FormAttachment(middle, 0);
-    fdlFilterFileType.top = new FormAttachment(0, 3 * margin);
-    wlFilterFileType.setLayoutData(fdlFilterFileType);
+    wlFilterFileType.setLayoutData(
+        new FormDataBuilder().left(0, margin).top(0, 3 * margin).right(middle, 
-margin).result());
+
     wFilterFileType = new CCombo(wFilterComp, SWT.SINGLE | SWT.READ_ONLY | 
SWT.BORDER);
-    wFilterFileType.add(
-        BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilterTab.FileType.All.Label"));
+    BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilterTab.FileType.All.Label");
     wFilterFileType.add(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label"));
     wFilterFileType.add(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.FilterTab.FileType.OnlyFolder.Label"));
-    // wFilterFileType.select(0); // +1: starts at -1
     PropsUi.setLook(wFilterFileType);
-    FormData fdFilterFileType = new FormData();
-    fdFilterFileType.left = new FormAttachment(middle, 0);
-    fdFilterFileType.top = new FormAttachment(0, 3 * margin);
-    fdFilterFileType.right = new FormAttachment(100, 0);
-    wFilterFileType.setLayoutData(fdFilterFileType);
+    wFilterFileType.setLayoutData(
+        new FormDataBuilder().left(middle, 0).top(0, 3 * margin).right(100, -3 
* margin).result());
     wFilterFileType.addModifyListener(lsMod);
 
     // /////////////////////////////////
@@ -581,33 +673,40 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
     PropsUi.setLook(wAdditionalGroup);
     wAdditionalGroup.setText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.Group.AdditionalGroup.Label"));
-
-    FormLayout additionalgroupLayout = new FormLayout();
-    additionalgroupLayout.marginWidth = 10;
-    additionalgroupLayout.marginHeight = 10;
-    wAdditionalGroup.setLayout(additionalgroupLayout);
+    WidgetUtils.setFormLayout(wAdditionalGroup, 10);
+    wAdditionalGroup.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wFilterFileType, margin)
+            .right(100, -margin)
+            .result());
 
     Label wlInclRownum = new Label(wAdditionalGroup, SWT.RIGHT);
     wlInclRownum.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.InclRownum.Label"));
     PropsUi.setLook(wlInclRownum);
-    FormData fdlInclRownum = new FormData();
-    fdlInclRownum.left = new FormAttachment(0, 0);
-    fdlInclRownum.top = new FormAttachment(wFilterFileType, 2 * margin);
-    fdlInclRownum.right = new FormAttachment(middle, -margin);
-    wlInclRownum.setLayoutData(fdlInclRownum);
+    wlInclRownum.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wFilterFileType, margin)
+            .right(middle, -2 * margin)
+            .result());
+
     wInclRownum = new Button(wAdditionalGroup, SWT.CHECK);
     PropsUi.setLook(wInclRownum);
     wInclRownum.setToolTipText(
         BaseMessages.getString(PKG, "GetFileNamesDialog.InclRownum.Tooltip"));
-    FormData fdRownum = new FormData();
-    fdRownum.left = new FormAttachment(middle, 0);
-    fdRownum.top = new FormAttachment(wlInclRownum, 0, SWT.CENTER);
-    wInclRownum.setLayoutData(fdRownum);
+    wInclRownum.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, -margin)
+            .top(wlInclRownum, 0, SWT.CENTER)
+            .right(100, -margin)
+            .result());
     wInclRownum.addSelectionListener(
         new SelectionAdapter() {
           @Override
           public void widgetSelected(SelectionEvent selectionEvent) {
             input.setChanged();
+            wInclRownumField.setEnabled(wInclRownum.getSelection());
           }
         });
 
@@ -615,25 +714,22 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
     wlInclRownumField.setText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.InclRownumField.Label"));
     PropsUi.setLook(wlInclRownumField);
-    FormData fdlInclRownumField = new FormData();
-    fdlInclRownumField.left = new FormAttachment(wInclRownum, margin);
-    fdlInclRownumField.top = new FormAttachment(wFilterFileType, 2 * margin);
-    wlInclRownumField.setLayoutData(fdlInclRownumField);
+    wlInclRownumField.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wlInclRownum, margin)
+            .right(middle, -2 * margin)
+            .result());
 
     wInclRownumField = new TextVar(variables, wAdditionalGroup, SWT.SINGLE | 
SWT.LEFT | SWT.BORDER);
     PropsUi.setLook(wInclRownumField);
     wInclRownumField.addModifyListener(lsMod);
-    FormData fdInclRownumField = new FormData();
-    fdInclRownumField.left = new FormAttachment(wlInclRownumField, margin);
-    fdInclRownumField.top = new FormAttachment(wFilterFileType, 2 * margin);
-    fdInclRownumField.right = new FormAttachment(100, 0);
-    wInclRownumField.setLayoutData(fdInclRownumField);
-
-    FormData fdAdditionalGroup = new FormData();
-    fdAdditionalGroup.left = new FormAttachment(0, margin);
-    fdAdditionalGroup.top = new FormAttachment(wFilterFileType, margin);
-    fdAdditionalGroup.right = new FormAttachment(100, -margin);
-    wAdditionalGroup.setLayoutData(fdAdditionalGroup);
+    wInclRownumField.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, -margin)
+            .top(wInclRownum, margin)
+            .right(100, -margin)
+            .result());
 
     // ///////////////////////////////////////////////////////////
     // / END OF Additional Fields GROUP
@@ -647,52 +743,50 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
     PropsUi.setLook(wNoFilesFolderGroup);
     wNoFilesFolderGroup.setText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.Group.NoFilesFolder.Label"));
-
-    FormLayout noFilesOrFoldersGroupLayout = new FormLayout();
-    noFilesOrFoldersGroupLayout.marginWidth = 10;
-    noFilesOrFoldersGroupLayout.marginHeight = 10;
-    wNoFilesFolderGroup.setLayout(noFilesOrFoldersGroupLayout);
+    WidgetUtils.setFormLayout(wNoFilesFolderGroup, 10);
 
     // do not fail if no files?
     wlDoNotFailIfNoFile = new Label(wNoFilesFolderGroup, SWT.RIGHT);
     wlDoNotFailIfNoFile.setText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.DoNotFailIfNoFile.Label"));
     PropsUi.setLook(wlDoNotFailIfNoFile);
-    FormData fdldoNotFailIfNoFile = new FormData();
-    fdldoNotFailIfNoFile.left = new FormAttachment(0, 0);
-    fdldoNotFailIfNoFile.top = new FormAttachment(wAdditionalGroup, 2 * 
margin);
-    fdldoNotFailIfNoFile.right = new FormAttachment(middle, -margin);
-    wlDoNotFailIfNoFile.setLayoutData(fdldoNotFailIfNoFile);
-
+    wlDoNotFailIfNoFile.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wAdditionalGroup, margin)
+            .right(middle, -2 * margin)
+            .result());
     wDoNotFailIfNoFile = new Button(wNoFilesFolderGroup, SWT.CHECK);
     PropsUi.setLook(wDoNotFailIfNoFile);
     wDoNotFailIfNoFile.setToolTipText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.DoNotFailIfNoFile.Tooltip"));
-    FormData fddoNotFailIfNoFile = new FormData();
-    fddoNotFailIfNoFile.left = new FormAttachment(middle, 0);
-    fddoNotFailIfNoFile.top = new FormAttachment(wlDoNotFailIfNoFile, 0, 
SWT.CENTER);
-    wDoNotFailIfNoFile.setLayoutData(fddoNotFailIfNoFile);
+    wDoNotFailIfNoFile.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, -margin)
+            .top(wlDoNotFailIfNoFile, 0, SWT.CENTER)
+            .result());
 
     // Raise an exception if no file?
     wlRaiseAnExceptionIfNoFile = new Label(wNoFilesFolderGroup, SWT.RIGHT);
     wlRaiseAnExceptionIfNoFile.setText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.RaiseAnExceptionIfNoFiles.Label"));
     PropsUi.setLook(wlRaiseAnExceptionIfNoFile);
-    FormData fdlRaiseAnExceptionIfNoFile = new FormData();
-    fdlRaiseAnExceptionIfNoFile.left = new FormAttachment(0, 0);
-    fdlRaiseAnExceptionIfNoFile.top = new FormAttachment(wlDoNotFailIfNoFile, 
2 * margin);
-    fdlRaiseAnExceptionIfNoFile.right = new FormAttachment(middle, -margin);
-    wlRaiseAnExceptionIfNoFile.setLayoutData(fdlRaiseAnExceptionIfNoFile);
+    wlRaiseAnExceptionIfNoFile.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wlDoNotFailIfNoFile, margin)
+            .right(middle, -2 * margin)
+            .result());
 
     wRaiseAnExceptionIfNoFile = new Button(wNoFilesFolderGroup, SWT.CHECK);
     PropsUi.setLook(wRaiseAnExceptionIfNoFile);
     wRaiseAnExceptionIfNoFile.setToolTipText(
         BaseMessages.getString(PKG, 
"GetFileNamesDialog.RaiseAnExceptionIfNoFiles.Tooltip"));
-    FormData fddoRaiseAnExceptionIfNoFile = new FormData();
-    fddoRaiseAnExceptionIfNoFile.left = new FormAttachment(middle, 0);
-    fddoRaiseAnExceptionIfNoFile.top =
-        new FormAttachment(wlRaiseAnExceptionIfNoFile, 0, SWT.CENTER);
-    wRaiseAnExceptionIfNoFile.setLayoutData(fddoRaiseAnExceptionIfNoFile);
+    wRaiseAnExceptionIfNoFile.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, -margin)
+            .top(wlRaiseAnExceptionIfNoFile, 0, SWT.CENTER)
+            .result());
     wRaiseAnExceptionIfNoFile.addSelectionListener(
         new SelectionAdapter() {
           @Override
@@ -714,48 +808,48 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
           }
         });
 
-    FormData fdNoFilesOrFoldersGroup = new FormData();
-    fdNoFilesOrFoldersGroup.left = new FormAttachment(0, margin);
-    fdNoFilesOrFoldersGroup.top = new FormAttachment(wAdditionalGroup, margin);
-    fdNoFilesOrFoldersGroup.right = new FormAttachment(100, -margin);
-    wNoFilesFolderGroup.setLayoutData(fdNoFilesOrFoldersGroup);
+    wNoFilesFolderGroup.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wAdditionalGroup, margin)
+            .right(100, -margin)
+            .result());
 
     // /////////////////////////////////
     // END OF No Files Folder GROUP
     // /////////////////////////////////
 
     Label wlLimit = new Label(wFilterComp, SWT.RIGHT);
-    wlLimit.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.Limit.Label"));
     PropsUi.setLook(wlLimit);
-    FormData fdlLimit = new FormData();
-    fdlLimit.left = new FormAttachment(0, 0);
-    fdlLimit.top = new FormAttachment(wNoFilesFolderGroup, margin);
-    fdlLimit.right = new FormAttachment(middle, -margin);
-    wlLimit.setLayoutData(fdlLimit);
+    wlLimit.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.Limit.Label"));
+    wlLimit.setLayoutData(
+        new FormDataBuilder()
+            .left(0, margin)
+            .top(wNoFilesFolderGroup, margin)
+            .right(middle, -margin)
+            .result());
+
     wLimit = new Text(wFilterComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
     PropsUi.setLook(wLimit);
     wLimit.addModifyListener(lsMod);
-    FormData fdLimit = new FormData();
-    fdLimit.left = new FormAttachment(middle, 0);
-    fdLimit.top = new FormAttachment(wNoFilesFolderGroup, margin);
-    fdLimit.right = new FormAttachment(100, 0);
-    wLimit.setLayoutData(fdLimit);
+    wLimit.setLayoutData(
+        new FormDataBuilder()
+            .left(middle, 0)
+            .top(wNoFilesFolderGroup, margin)
+            .right(100, -3 * margin)
+            .result());
 
     Label wlAddResult = new Label(wFilterComp, SWT.RIGHT);
-    wlAddResult.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.AddResult.Label"));
     PropsUi.setLook(wlAddResult);
-    FormData fdlAddResult = new FormData();
-    fdlAddResult.left = new FormAttachment(0, 0);
-    fdlAddResult.top = new FormAttachment(wLimit, margin);
-    fdlAddResult.right = new FormAttachment(middle, -margin);
-    wlAddResult.setLayoutData(fdlAddResult);
+    wlAddResult.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.AddResult.Label"));
+    wlAddResult.setLayoutData(
+        new FormDataBuilder().left(0, margin).top(wLimit, 
margin).right(middle, -margin).result());
+
     wAddResult = new Button(wFilterComp, SWT.CHECK);
     PropsUi.setLook(wAddResult);
     wAddResult.setToolTipText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.AddResult.Tooltip"));
-    FormData fdAddResult = new FormData();
-    fdAddResult.left = new FormAttachment(middle, 0);
-    fdAddResult.top = new FormAttachment(wlAddResult, 0, SWT.CENTER);
-    wAddResult.setLayoutData(fdAddResult);
+    wAddResult.setLayoutData(
+        new FormDataBuilder().left(middle, 0).top(wlAddResult, 0, 
SWT.CENTER).result());
     wAddResult.addSelectionListener(
         new SelectionAdapter() {
           @Override
@@ -764,125 +858,45 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
           }
         });
 
-    FormData fdFilterComp = new FormData();
-    fdFilterComp.left = new FormAttachment(0, 0);
-    fdFilterComp.top = new FormAttachment(0, 0);
-    fdFilterComp.right = new FormAttachment(100, 0);
-    fdFilterComp.bottom = new FormAttachment(100, 0);
-    wFilterComp.setLayoutData(fdFilterComp);
-
+    wFilterComp.setLayoutData(
+        new FormDataBuilder().left(0, 0).top(0, 0).right(100, 0).bottom(100, 
0).result());
     wFilterComp.layout();
     wFilterTab.setControl(wFilterComp);
+  }
 
-    // ///////////////////////////////////////////////////////////
-    // / END OF FILE Filter TAB
-    // ///////////////////////////////////////////////////////////
+  @Override
+  public String open() {
+    Shell parentShell = getParent();
 
-    // Add the file to the list of files...
-    SelectionAdapter selA =
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent arg0) {
-            wFilenameList.add(
-                new String[] {
-                  wFilename.getText(),
-                  wFilemask.getText(),
-                  wExcludeFilemask.getText(),
-                  GetFileNamesMeta.RequiredFilesCode[0],
-                  GetFileNamesMeta.RequiredFilesCode[0]
-                });
-            wFilename.setText("");
-            wFilemask.setText("");
-            wFilenameList.removeEmptyRows();
-            wFilenameList.setRowNums();
-            wFilenameList.optWidth(true);
-          }
-        };
-    wbaFilename.addSelectionListener(selA);
-    wFilename.addSelectionListener(selA);
+    shell = new Shell(parentShell, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX | 
SWT.MIN);
+    shell.setText(BaseMessages.getString(PKG, 
"GetFileNamesDialog.DialogTitle"));
+    PropsUi.setLook(shell);
+    setShellImage(shell, input);
+    WidgetUtils.setFormLayout(shell, PropsUi.getFormMargin());
 
-    // Delete files from the list of files...
-    wbdFilename.addSelectionListener(
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent arg0) {
-            int[] idx = wFilenameList.getSelectionIndices();
-            wFilenameList.remove(idx);
-            wFilenameList.removeEmptyRows();
-            wFilenameList.setRowNums();
-            input.setChanged();
-          }
-        });
+    ModifyListener lsMod = e -> input.setChanged();
+    changed = input.hasChanged();
 
-    // Edit the selected file & remove from the list...
-    wbeFilename.addSelectionListener(
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent arg0) {
-            int idx = wFilenameList.getSelectionIndex();
-            if (idx >= 0) {
-              String[] string = wFilenameList.getItem(idx);
-              wFilename.setText(string[0]);
-              wFilemask.setText(string[1]);
-              wExcludeFilemask.setText(string[2]);
-              wFilenameList.remove(idx);
-            }
-            wFilenameList.removeEmptyRows();
-            wFilenameList.setRowNums();
-            input.setChanged();
-          }
-        });
+    int middle = props.getMiddlePct();
+    int margin = PropsUi.getMargin();
 
-    // Show the files that are selected at this time...
-    wbShowFiles.addSelectionListener(
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            GetFileNamesMeta tfii = new GetFileNamesMeta();
-            getInfo(tfii);
-            String[] files = tfii.getFilePaths(variables);
-            if (files != null && files.length > 0) {
-              EnterSelectionDialog esd =
-                  new EnterSelectionDialog(shell, files, "Files read", "Files 
read:");
-              esd.setViewOnly();
-              esd.open();
-            } else {
-              String elementTypeToGet =
-                  
FileInputList.FileTypeFilter.getByOrdinal(wFilterFileType.getSelectionIndex())
-                      .toString();
-              MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
-              mb.setMessage(
-                  BaseMessages.getString(
-                      PKG, "GetFileNamesDialog.NoFilesFound.DialogMessage", 
elementTypeToGet));
-              mb.setText(BaseMessages.getString(PKG, 
"System.Dialog.Error.Title"));
-              mb.open();
-            }
-          }
-        });
+    createTransformName(shell, margin, middle, lsMod);
+    createDialogButtons(shell, margin);
 
-    // Listen to the Browse... button
-    wbbFilename.addListener(
-        SWT.Selection,
-        e -> {
-          if (!Utils.isEmpty(wFilemask.getText()) || 
!Utils.isEmpty(wExcludeFilemask.getText())) {
-            BaseDialog.presentDirectoryDialog(shell, wFilename, variables);
-          } else {
-            BaseDialog.presentFileDialog(
-                shell,
-                wFilename,
-                variables,
-                new String[] {"*.txt;*.csv", "*.csv", "*.txt", "*"},
-                new String[] {
-                  BaseMessages.getString(PKG, 
"GetFileNamesDialog.FileType.TextAndCSVFiles"),
-                  BaseMessages.getString(PKG, "System.FileType.CSVFiles"),
-                  BaseMessages.getString(PKG, "System.FileType.TextFiles"),
-                  BaseMessages.getString(PKG, "System.FileType.AllFiles")
-                },
-                true);
-          }
-        });
+    CTabFolder tabFolder = new CTabFolder(shell, SWT.BORDER);
+    PropsUi.setLook(tabFolder, Props.WIDGET_STYLE_TAB);
 
-    wTabFolder.setSelection(0);
+    tabFolder.setLayoutData(
+        new FormDataBuilder()
+            .left(0, 0)
+            .top(wTransformName, margin)
+            .right(100, 0)
+            .bottom(wOk, -2 * margin)
+            .result());
+
+    createTabFile(tabFolder, margin, middle, lsMod);
+    createTabFilter(tabFolder, margin, middle, lsMod);
+    tabFolder.setSelection(0);
 
     setFileField();
     getData(input);
@@ -907,7 +921,15 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
         wWildcardField.removeAll();
         wExcludeWildcardField.removeAll();
 
-        IRowMeta r = pipelineMeta.getPrevTransformFields(variables, 
transformName);
+        IRowMeta r = null;
+
+        try {
+          r = pipelineMeta.getPrevTransformFields(variables, transformName);
+        } catch (NullPointerException e) {
+          // thrown when previous transform is not yet properly configured
+          LogChannel.UI.logBasic("Failed to read previous transform fields", 
e);
+        }
+
         if (r != null) {
           wFilenameField.setItems(r.getFieldNames());
           wWildcardField.setItems(r.getFieldNames());
@@ -933,30 +955,25 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
   }
 
   private void activateFileField() {
+    boolean isFromField = wFileField.getSelection();
+    groupFromField.setVisible(isFromField);
 
-    wlFilenameField.setEnabled(wFileField.getSelection());
-    wFilenameField.setEnabled(wFileField.getSelection());
-    wlWildcardField.setEnabled(wFileField.getSelection());
-    wWildcardField.setEnabled(wFileField.getSelection());
-    wlExcludeWildcardField.setEnabled(wFileField.getSelection());
-    wExcludeWildcardField.setEnabled(wFileField.getSelection());
-    wlFilename.setEnabled(!wFileField.getSelection());
-    wbbFilename.setEnabled(!wFileField.getSelection());
-    wbaFilename.setEnabled(!wFileField.getSelection());
-    wFilename.setEnabled(!wFileField.getSelection());
-    wlFilemask.setEnabled(!wFileField.getSelection());
-    wFilemask.setEnabled(!wFileField.getSelection());
-    wlExcludeFilemask.setEnabled(!wFileField.getSelection());
-    wExcludeFilemask.setEnabled(!wFileField.getSelection());
-    wlFilenameList.setEnabled(!wFileField.getSelection());
-    wbdFilename.setEnabled(!wFileField.getSelection());
-    wbeFilename.setEnabled(!wFileField.getSelection());
-    wbShowFiles.setEnabled(!wFileField.getSelection());
-    wlFilenameList.setEnabled(!wFileField.getSelection());
-    wFilenameList.setEnabled(!wFileField.getSelection());
-    wPreview.setEnabled(!wFileField.getSelection());
-    wlIncludeSubFolder.setEnabled(wFileField.getSelection());
-    wIncludeSubFolder.setEnabled(wFileField.getSelection());
+    for (Control c : groupFromField.getChildren()) {
+      c.setEnabled(isFromField);
+    }
+
+    groupAsDefined.setVisible(!isFromField);
+
+    for (Control c : groupAsDefined.getChildren()) {
+      c.setEnabled(!isFromField);
+    }
+
+    wPreview.setEnabled(!isFromField);
+    wFileFieldWarning.setVisible(!isFromField && hasPreviousTransform());
+  }
+
+  private boolean hasPreviousTransform() {
+    return pipelineMeta.findPipelineHopTo(transformMeta) != null;
   }
 
   protected void setErrorsMgmtCheckboxesStatus() {
@@ -977,16 +994,14 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
   /**
    * Read the data from the GetFileNamesMeta object and show it in this dialog.
    *
-   * @param meta The TextFileInputMeta object to obtain the data from.
+   * @param in The TextFileInputMeta object to obtain the data from.
    */
-  public void getData(GetFileNamesMeta meta) {
-    final GetFileNamesMeta in = meta;
-
+  public void getData(final GetFileNamesMeta in) {
     if (!in.getFilesList().isEmpty()) {
       wFilenameList.removeAll();
 
-      for (int i = 0; i < meta.getFilesList().size(); i++) {
-        FileItem fi = meta.getFilesList().get(i);
+      for (int i = 0; i < in.getFilesList().size(); i++) {
+        FileItem fi = in.getFilesList().get(i);
         wFilenameList.add(
             fi.getFileName(),
             fi.getFileMask(),
@@ -1012,6 +1027,7 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
     }
 
     wInclRownum.setSelection(in.isIncludeRowNumber());
+    wInclRownumField.setEnabled(wInclRownum.getSelection());
     wAddResult.setSelection(in.isAddResultFile());
     wFileField.setSelection(in.isFileField());
     if (in.getRowNumberField() != null) {
@@ -1079,7 +1095,7 @@ public class GetFileNamesDialog extends 
BaseTransformDialog {
     in.setDynamicWildcardField(wWildcardField.getText());
     in.setDynamicExcludeWildcardField(wExcludeWildcardField.getText());
     in.setFileField(wFileField.getSelection());
-    in.setRowNumberField(wInclRownumField.getText());
+    in.setRowNumberField(wInclRownum.getSelection() ? 
wInclRownumField.getText() : "");
     in.setRowLimit(Const.toLong(wLimit.getText(), 0L));
     in.setDynamicIncludeSubFolders(wIncludeSubFolder.getSelection());
     in.setDoNotFailIfNoFile(wDoNotFailIfNoFile.getSelection());
diff --git 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_de_DE.properties
 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_de_DE.properties
index eb4d740200..2fd77fc4d7 100644
--- 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_de_DE.properties
+++ 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_de_DE.properties
@@ -17,7 +17,6 @@
 #
 #
 #
-
 GetFileNames.Description=Ermittelt Dateinamen aus dem Betriebssystem und 
sendet diese an den n\u00E4chsten Transform.
 GetFileNames.Exception.CouldnotFindField=Feld {0} konnte nicht im Eingabestrom 
gefunden werden! 
 GetFileNames.Injection.AddResult.Label=Dateinamen zum Result hinzuf\u00FCgen ?
@@ -62,7 +61,8 @@ GetFileNamesDialog.FailedToGetFields.DialogMessage=Fehler
 GetFileNamesDialog.FailedToGetFields.DialogTitle=Fehler bei Feldermittlung!
 GetFileNamesDialog.FileDirColumn.Column=Datei/Verzeichnis
 GetFileNamesDialog.FileField.Label=Ist der Dateiname in einem Feld definiert?
-GetFileNamesDialog.FileField.Tooltip=Aktivieren, wenn der Dateiname in einem 
Feld \ndurch einen Vorg\u00E4ngertransform definiert ist.
+GetFileNamesDialog.FileField.Tooltip=Aktivieren, um Dateinamen aus einem Feld 
des Vorg\u00E4ngertransform zu verarbeiten. Deaktiviert lassen, um Dateinamen 
hier zu definieren und Daten des Vorg\u00E4ngertransform zu verwerfen. 
+GetFileNamesDialog.FileField.Warning=(Daten des Vorg\u00E4ngertransform werden 
verworfen)
 GetFileNamesDialog.Filemask.Label=Platzhalter (regul\u00E4rer Ausdruck) 
 GetFileNamesDialog.Filename.Label=Datei oder Verzeichnis
 GetFileNamesDialog.FilenameAdd.Button=Hinzuf\u00FCgen
@@ -80,6 +80,9 @@ GetFileNamesDialog.FilterTab.FileType.Label=Filtertyp
 GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label=nur Dateien
 GetFileNamesDialog.FilterTab.FileType.OnlyFolder.Label=nur Verzeichnisse
 GetFileNamesDialog.FilterTab.TabTitle=Filter
+GetFileNamesDialog.Group.OpMode.Label=Funktionsweise
+GetFileNamesDialog.Group.ByDefinition.Label=Dateinamen wie definieren
+GetFileNamesDialog.Group.FromField.Label=Dateinamen aus Feld
 GetFileNamesDialog.Group.AdditionalGroup.Label=zus\u00E4tzliche Felder
 GetFileNamesDialog.Group.NoFilesFolder.Label=wenn keine Dateien oder 
Verzeichnisse
 GetFileNamesDialog.InclRownum.Label=Zeilennummer zur Ausgabe hinzuf\u00FCgen? 
@@ -91,7 +94,6 @@ GetFileNamesDialog.IncludeSubFolder.Label=Unterverzeichnisse 
einbeziehen ?
 GetFileNamesDialog.IncludeSubFolder.Tooltip=ermittle Dateien in 
Unterverzeichnissen
 GetFileNamesDialog.Limit.Label=Limit 
 GetFileNamesDialog.NoFilesFound.DialogMessage=Keine Dateien gefunden! 
Dateiname und Verzeichnis, den regul\u00E4ren Ausdruck sowie die Filter 
pr\u00FCfen, die z.Z. auf "{0}" gesetzt sind.
-GetFileNamesDialog.OriginFiles.Label=Dateinamen aus Feld
 GetFileNamesDialog.Preview.Button=\ &Zeilenvorschau
 GetFileNamesDialog.PreviewSize.DialogMessage=Anzahl der Vorschauzeilen:
 GetFileNamesDialog.PreviewSize.DialogTitle=Vorschaugr\u00F6\u00DFe eingeben
diff --git 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_en_US.properties
 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_en_US.properties
index 3c4033c3f8..7f502462ee 100644
--- 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_en_US.properties
+++ 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_en_US.properties
@@ -16,7 +16,6 @@
 # limitations under the License.
 #
 #
-
 GetFileNames.Description=Get file names from the operating system and send 
them to the next transform.
 GetFileNames.Exception.CouldnotFindField=We can not find Field {0} in the 
input stream\! 
 GetFileNames.Injection.AddResult.Label=Add filename to result (Y/N)?
@@ -61,7 +60,8 @@ GetFileNamesDialog.FailedToGetFields.DialogMessage=Error
 GetFileNamesDialog.FailedToGetFields.DialogTitle=Error getting fields\!
 GetFileNamesDialog.FileDirColumn.Column=File/Directory
 GetFileNamesDialog.FileField.Label=Is filename defined in a field?
-GetFileNamesDialog.FileField.Tooltip=Check this option if filename is defined 
in a field\n created by a previous transform.The wildcard is not mandatory.
+GetFileNamesDialog.FileField.Tooltip=Check to process filenames from a 
previous transform. Leave this unchecked to define filenames here and discard 
data from the previous transform.
+GetFileNamesDialog.FileField.Warning=(Data from previous transform will be 
discarded)
 GetFileNamesDialog.Filemask.Label=Inclusion wildcard (RegExp) 
 GetFileNamesDialog.Filename.Label=File or directory 
 GetFileNamesDialog.FilenameAdd.Button=&Add
@@ -79,9 +79,12 @@ GetFileNamesDialog.FilterTab.FileType.Label=Filter type
 GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label=Only files
 GetFileNamesDialog.FilterTab.FileType.OnlyFolder.Label=Only folders
 GetFileNamesDialog.FilterTab.TabTitle=Filters
+GetFileNamesDialog.Group.OpMode.Label=Operating mode
+GetFileNamesDialog.Group.ByDefinition.Label=Filenames as defined
+GetFileNamesDialog.Group.FromField.Label=Filenames from field
 GetFileNamesDialog.Group.AdditionalGroup.Label=Additional fields
 GetFileNamesDialog.Group.NoFilesFolder.Label=If no files or folders
-GetFileNamesDialog.InclRownum.Label=Include rownum in output? 
+GetFileNamesDialog.InclRownum.Label=Include rownum in output?
 GetFileNamesDialog.InclRownum.Tooltip=Check this to add a field (Integer) 
containing the row number.
 GetFileNamesDialog.InclRownumField.Label=Rownum fieldname 
 GetFileNamesDialog.IncludeSubDirs.Column=Include subfolders
@@ -90,7 +93,6 @@ GetFileNamesDialog.IncludeSubFolder.Label=Include subfolders?
 GetFileNamesDialog.IncludeSubFolder.Tooltip=Fetch files in subfolders
 GetFileNamesDialog.Limit.Label=Limit 
 GetFileNamesDialog.NoFilesFound.DialogMessage=No files found\!  Please check 
the filename/directory, the regular expression options amd the filter type 
selection that currently is set to ''{0}''.
-GetFileNamesDialog.OriginFiles.Label=Filenames from field
 GetFileNamesDialog.Preview.Button=\ &Preview rows   
 GetFileNamesDialog.PreviewSize.DialogMessage=Enter the number of rows you 
would like to preview\:
 GetFileNamesDialog.PreviewSize.DialogTitle=Enter preview size
diff --git 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_es_AR.properties
 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_es_AR.properties
index 1d3e5a164b..72fafe756c 100644
--- 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_es_AR.properties
+++ 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_es_AR.properties
@@ -17,7 +17,6 @@
 #
 #
 #
-
 GetFileNames.Description=Obtiene nombres de ficheros del sistema operativo y 
los pasa al siguiente paso.
 GetFileNames.Exception.CouldnotFindField=El campo {0} no puede ser encontrado 
en el flujo de entrada.
 GetFileNames.Log.ErrorFindingField=El campo [{0}] no puede ser encontrado en 
el flujo de entrada.
@@ -55,6 +54,7 @@ GetFileNamesDialog.FilterTab.FileType.Label=Traer
 GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label=S\u00F3lo archivos
 GetFileNamesDialog.FilterTab.FileType.OnlyFolder.Label=S\u00F3lo directorios
 GetFileNamesDialog.FilterTab.TabTitle=Filtros
+GetFileNamesDialog.Group.FromField.Label=Nombres de archivo desde campo
 GetFileNamesDialog.Group.AdditionalGroup.Label=Campos adicionales
 GetFileNamesDialog.InclRownum.Label=\u00BFIncluir el n\u00FAmero de fila en la 
salida?
 GetFileNamesDialog.InclRownum.Tooltip=Seleccione esta opci\u00F3n para 
a\u00F1adir un campo (Entero) conteniendo el n\u00FAmero de fila.
@@ -65,7 +65,6 @@ GetFileNamesDialog.IncludeSubFolder.Label=Incluir 
subdirectorios
 GetFileNamesDialog.IncludeSubFolder.Tooltip=Obtener archivos de subdirectorios
 GetFileNamesDialog.Limit.Label=L\u00EDmite
 GetFileNamesDialog.NoFilesFound.DialogMessage=\u00A1No se han encontrado 
archivos\! Por favor verifique el nombre del archivo/directorio y la 
expresi\u00F3n regular.
-GetFileNamesDialog.OriginFiles.Label=Nombres de archivo desde campo
 GetFileNamesDialog.Preview.Button=\ &Previsualizar filas 
 GetFileNamesDialog.PreviewSize.DialogMessage=Introduzca el n\u00FAmero de 
filas que desea previsualizar\:
 GetFileNamesDialog.PreviewSize.DialogTitle=Introduzca el tama\u00F1o de la 
previsualizaci\u00F3n
diff --git 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_fr_FR.properties
 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_fr_FR.properties
index 2169ba35c9..e00d8a9eab 100644
--- 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_fr_FR.properties
+++ 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_fr_FR.properties
@@ -16,7 +16,6 @@
 # limitations under the License.
 #
 #
-
 GetFileNames.Description=R\u00E9cup\u00E9ration des noms de fichier depuis 
l''OS et transfert \u00E0 la transformation suivante.
 GetFileNames.Exception.CouldnotFindField=Impossible de trouver le champ {0} 
dans le flux d''entr\u00E9e\!
 GetFileNames.Log.ErrorFindingField=Impossible de trouver le champ [{0}] dans 
le flux d''entr\u00E9e\!
@@ -58,6 +57,7 @@ 
GetFileNamesDialog.FilterTab.FileType.Label=R\u00E9cup\u00E9rer
 GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label=Uniquement les fichiers
 GetFileNamesDialog.FilterTab.FileType.OnlyFolder.Label=Uniquement les 
r\u00E9pertoires
 GetFileNamesDialog.FilterTab.TabTitle=Filtres
+GetFileNamesDialog.Group.FromField.Label=Nom fichier depuis champ
 GetFileNamesDialog.Group.AdditionalGroup.Label=Champs additionnels
 GetFileNamesDialog.InclRownum.Label=Inclure N\u00B0 ligne en sortie
 GetFileNamesDialog.InclRownum.Tooltip=Ajout d''un champ (entier)\r\ncontenant 
le num\u00E9ro de ligne 
@@ -68,7 +68,6 @@ GetFileNamesDialog.IncludeSubFolder.Label=Inclure les sous 
r\u00E9pertoires
 GetFileNamesDialog.IncludeSubFolder.Tooltip=Rechercher les fichiers dans les 
sous-r\u00E9pertoires
 GetFileNamesDialog.Limit.Label=Limite
 GetFileNamesDialog.NoFilesFound.DialogMessage=Aucun fichier trouv\u00E9\!  
veuillez svp v\u00E9rifier les fichiers/r\u00E9pertoires et les options.
-GetFileNamesDialog.OriginFiles.Label=Nom fichier depuis champ
 GetFileNamesDialog.Preview.Button=\ &Pr\u00E9visualiser lignes   
 GetFileNamesDialog.PreviewSize.DialogMessage=Saisissez le nombre de lignes max 
\u00E0 pr\u00E9visualiser:
 GetFileNamesDialog.PreviewSize.DialogTitle=Veuillez saisir le nbr de lignes 
pour la pr\u00E9visualition
diff --git 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_it_IT.properties
 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_it_IT.properties
index ca057bc24d..32d0a6299d 100644
--- 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_it_IT.properties
+++ 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_it_IT.properties
@@ -17,7 +17,6 @@
 #
 #
 #
-
 GetFileNames.Exception.CouldnotFindField=Impossibile trovare il campo {0} 
nell'input stream\!
 GetFileNames.Injection.Group.FileTab.Label=File/Directories
 GetFileNames.Log.ErrorFindingField=Impossibile trovare il campo {0} nell'input 
stream\!
@@ -58,6 +57,7 @@ GetFileNamesDialog.FilterTab.FileType.Label=Elementi da 
recuperare
 GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label=Solo file
 GetFileNamesDialog.FilterTab.FileType.OnlyFolder.Label=Solo cartelle
 GetFileNamesDialog.FilterTab.TabTitle=Filtri
+GetFileNamesDialog.Group.FromField.Label=Nome file dal campo
 GetFileNamesDialog.Group.AdditionalGroup.Label=Campi addizionali
 GetFileNamesDialog.Group.NoFilesFolder.Label=Se non vengono trovati files o 
cartelle
 GetFileNamesDialog.InclRownum.Label=Includere il numero riga nell''output?
@@ -69,7 +69,6 @@ GetFileNamesDialog.IncludeSubFolder.Label=Includi le 
sottocartelle?
 GetFileNamesDialog.IncludeSubFolder.Tooltip=Considera anche i files nelle 
sottocartelle
 GetFileNamesDialog.Limit.Label=Limite
 GetFileNamesDialog.NoFilesFound.DialogMessage=Nessun file trovato\! Controlla 
le opzioni dei files/cartelle, delle espressioni regolari per la selezione 
dinamica e la selezione della tendina Elementi da recuperare che adesso \u00E8 
impostata a ''{0}''.
-GetFileNamesDialog.OriginFiles.Label=Nome file dal campo
 GetFileNamesDialog.Preview.Button=&Anteprima righe
 GetFileNamesDialog.PreviewSize.DialogMessage=Inserisci il numero di righe per 
l''anteprima\:
 GetFileNamesDialog.PreviewSize.DialogTitle=Numero di righe di anteprima
diff --git 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_ja_JP.properties
 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_ja_JP.properties
index 4c373ce05d..a7c18dfe63 100644
--- 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_ja_JP.properties
+++ 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_ja_JP.properties
@@ -17,7 +17,6 @@
 #
 #
 #
-
 GetFileNames.Description=Get File 
Names\nOS\u304B\u3089\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u53D6\u5F97\u3057\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u6E21\u3057\u307E\u3059\u3002
 GetFileNames.Exception.CouldnotFindField=We can not find Field {0} in the 
input stream\! 
 GetFileNames.Log.ErrorFindingField=We can not find Field [{0}] in the input 
stream\! 
@@ -59,6 +58,7 @@ 
GetFileNamesDialog.FilterTab.FileType.Label=\u30d5\u30a3\u30eb\u30bf\u30fc\u5f62
 
GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label=\u30d5\u30a1\u30a4\u30eb\u306e\u307f
 
GetFileNamesDialog.FilterTab.FileType.OnlyFolder.Label=\u30d5\u30a9\u30eb\u30c0\u306e\u307f
 GetFileNamesDialog.FilterTab.TabTitle=\u30d5\u30a3\u30eb\u30bf\u30fc
+GetFileNamesDialog.Group.FromField.Label=\u30d5\u30a1\u30a4\u30eb\u8a2d\u5b9a
 
GetFileNamesDialog.Group.AdditionalGroup.Label=\u30ec\u30b3\u30fc\u30c9\u756a\u53f7\u8a2d\u5b9a
 
GetFileNamesDialog.InclRownum.Label=\u30ec\u30b3\u30fc\u30c9\u756a\u53f7\u3092\u51fa\u529b\u306b\u542b\u3080
 
GetFileNamesDialog.InclRownum.Tooltip=\u30ec\u30b3\u30fc\u30c9\u756a\u53f7\u3092\u51fa\u529b\u306b\u542b\u3080\u5834\u5408\u306f\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
@@ -69,7 +69,6 @@ 
GetFileNamesDialog.IncludeSubFolder.Label=\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u
 
GetFileNamesDialog.IncludeSubFolder.Tooltip=\u30b5\u30d6\u30d5\u30a9\u30eb\u30c0\u30fc\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u30d5\u30a7\u30c3\u30c1
 GetFileNamesDialog.Limit.Label=\u6700\u5927\u30d5\u30a1\u30a4\u30eb\u6570
 
GetFileNamesDialog.NoFilesFound.DialogMessage=\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304a\u3088\u3073\u691c\u7d22\u6587\u5b57\u5217\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-GetFileNamesDialog.OriginFiles.Label=\u30d5\u30a1\u30a4\u30eb\u8a2d\u5b9a
 GetFileNamesDialog.Preview.Button=\ \u30d7\u30ec\u30d3\u30e5\u30fc(&V)
 
GetFileNamesDialog.PreviewSize.DialogMessage=\u30d7\u30ec\u30d3\u30e5\u30fc\u3059\u308b\u30ec\u30b3\u30fc\u30c9\u6570\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 GetFileNamesDialog.PreviewSize.DialogTitle=\u30d7\u30ec\u30d3\u30e5\u30fc
diff --git 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_ko_KR.properties
 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_ko_KR.properties
index 1f2577ed8b..dae69d3888 100644
--- 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_ko_KR.properties
+++ 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_ko_KR.properties
@@ -17,7 +17,6 @@
 #
 #
 #
-
 GetFileNames.Exception.CouldnotFindField=\uC785\uB825 
\uC2A4\uD2B8\uB9BC\uC5D0\uC11C \uD544\uB4DC {0}\uC744 \uCC3E\uC744 \uC218 
\uC5C6\uC2B5\uB2C8\uB2E4\!
 GetFileNames.Log.ErrorFindingField=\uC785\uB825 \uC2A4\uD2B8\uB9BC\uC5D0\uC11C 
\uD544\uB4DC [{0}]\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4\!
 GetFileNames.Log.NoField=\uD30C\uC77C\uC774\uB984\uC744 \uAC00\uC9C0\uACE0 
\uC788\uB294 \uD544\uB4DC\uB97C \uC9C0\uC815\uD558\uC2ED\uC2DC\uC624\!
@@ -48,6 +47,7 @@ 
GetFileNamesDialog.FilterTab.FileType.Label=\uAC00\uC838\uC624\uAE30
 GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label=\uD30C\uC77C
 GetFileNamesDialog.FilterTab.FileType.OnlyFolder.Label=\uD3F4\uB354
 GetFileNamesDialog.FilterTab.TabTitle=\uD544\uD130
+GetFileNamesDialog.Group.FromField.Label=\uD544\uB4DC\uC5D0\uC11C 
\uD30C\uC77C\uC774\uB984
 GetFileNamesDialog.Group.AdditionalGroup.Label=\uCD94\uAC00 \uD544\uB4DC
 GetFileNamesDialog.InclRownum.Label=\uCD9C\uB825\uC5D0 
\uB85C\uC6B0\uBC88\uD638 \uD3EC\uD568?
 GetFileNamesDialog.InclRownum.Tooltip=\uB85C\uC6B0 \uBC88\uD638\uB97C 
\uD3EC\uD568\uD55C \uD544\uB4DC(Integer)\uB97C \uCD94\uAC00\uD558\uB824\uBA74 
\uC5EC\uAE30\uB97C \uCCB4\uD06C
@@ -58,7 +58,6 @@ GetFileNamesDialog.IncludeSubFolder.Label=\uD558\uC704 
\uD3F4\uB354 \uD3EC\uD568
 GetFileNamesDialog.IncludeSubFolder.Tooltip=\uD558\uC704 \uD3F4\uB354\uC758 
\uD30C\uC77C \uAC00\uC838\uC624\uAE30
 GetFileNamesDialog.Limit.Label=\uC81C\uD55C 
 GetFileNamesDialog.NoFilesFound.DialogMessage=\uD30C\uC77C\uC744 \uCC3E\uC744 
\uC218 \uC5C6\uC2B5\uB2C8\uB2E4\! 
\uD30C\uC77C\uC774\uB984/\uB514\uB809\uD1A0\uB9AC \uADF8\uB9AC\uACE0 
\uC815\uADDC\uD45C\uD604\uC2DD\uC744 \uD655\uC778\uD558\uC2ED\uC2DC\uC624.
-GetFileNamesDialog.OriginFiles.Label=\uD544\uB4DC\uC5D0\uC11C 
\uD30C\uC77C\uC774\uB984
 GetFileNamesDialog.Preview.Button=\uB85C\uC6B0 \uBBF8\uB9AC\uBCF4\uAE30(&P)
 GetFileNamesDialog.PreviewSize.DialogMessage=\uBBF8\uB9AC\uBCF4\uAE30\uD560 
\uB85C\uC6B0 \uAC1C\uC218\uB97C \uC785\uB825\uD558\uC2ED\uC2DC\uC624\:
 GetFileNamesDialog.PreviewSize.DialogTitle=\uBBF8\uB9AC\uBCF4\uAE30 
\uAC1C\uC218 \uC785\uB825
diff --git 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_zh_CN.properties
 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_zh_CN.properties
index c161c71ea8..fd7a90d33f 100644
--- 
a/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_zh_CN.properties
+++ 
b/plugins/transforms/getfilenames/src/main/resources/org/apache/hop/pipeline/transforms/getfilenames/messages/messages_zh_CN.properties
@@ -16,7 +16,6 @@
 # limitations under the License.
 #
 #
-
 
GetFileNames.Description=\u626B\u63CF\u64CD\u4F5C\u7CFB\u7EDF\u4E2D\u7684\u6587\u4EF6\u540D\u79F0\u5E76\u8F93\u51FA.
 
GetFileNames.Exception.CouldnotFindField=\u4E0D\u80FD\u5728\u8F93\u5165\u6D41\u4E2D\u627E\u5230\u5B57\u6BB5
 {0} 
 
GetFileNames.Injection.AddResult.Label=\u6DFB\u52A0\u6587\u4EF6\u540D\u5230\u7ED3\u679C\u4E2D(Y/N)\uFF1F
@@ -63,6 +62,7 @@ GetFileNamesDialog.FilterTab.FileType.Label=\u83B7\u53D6
 
GetFileNamesDialog.FilterTab.FileType.OnlyFile.Label=\u53EA\u83B7\u53D6\u6587\u4EF6\:
 
GetFileNamesDialog.FilterTab.FileType.OnlyFolder.Label=\u53EA\u83B7\u53D6\u76EE\u5F55\:
 GetFileNamesDialog.FilterTab.TabTitle=\u8FC7\u6EE4
+GetFileNamesDialog.Group.FromField.Label=\u4ECE\u5B57\u6BB5\u83B7\u53D6\u6587\u4EF6\u540D\:
 GetFileNamesDialog.Group.AdditionalGroup.Label=\u9644\u4EF6\u5B57\u6BB5
 
GetFileNamesDialog.Group.NoFilesFolder.Label=\u6587\u4EF6\u4E0D\u5B58\u5728\u65F6\:
 
GetFileNamesDialog.InclRownum.Label=\u5728\u8F93\u51FA\u4E2D\u5305\u62EC\u884C\u53F7\:
@@ -74,7 +74,6 @@ 
GetFileNamesDialog.IncludeSubFolder.Label=\u5305\u542B\u5B50\u76EE\u5F55\:
 GetFileNamesDialog.IncludeSubFolder.Tooltip=\u904D\u5386\u5B50\u76EE\u5F55
 GetFileNamesDialog.Limit.Label=\u9650\u5236\:
 
GetFileNamesDialog.NoFilesFound.DialogMessage=\u6CA1\u6709\u627E\u5230\u6587\u4EF6\!
 
\u8BF7\u68C0\u67E5\u6587\u4EF6/\u76EE\u5F55\u540D\u79F0\u548C\u6B63\u5219\u8868\u8FBE\u5F0F\u9009\u9879.
-GetFileNamesDialog.OriginFiles.Label=\u4ECE\u5B57\u6BB5\u83B7\u53D6\u6587\u4EF6\u540D\:
 GetFileNamesDialog.Preview.Button=\u9884\u89C8\u8BB0\u5F55(&P)
 
GetFileNamesDialog.PreviewSize.DialogMessage=\u8F93\u5165\u4F60\u60F3\u9884\u89C8\u7684\u8BB0\u5F55\u884C\u6570\:
 GetFileNamesDialog.PreviewSize.DialogTitle=\u8F93\u5165\u9884\u89C8\u5927\u5C0F
diff --git a/ui/src/main/java/org/apache/hop/ui/core/FormDataBuilder.java 
b/ui/src/main/java/org/apache/hop/ui/core/FormDataBuilder.java
index ba6ec04518..7efb9af40e 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/FormDataBuilder.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/FormDataBuilder.java
@@ -86,6 +86,14 @@ public class FormDataBuilder implements Cloneable {
     return top(new FormAttachment(control, margin));
   }
 
+  public FormDataBuilder left(Control control, int margin, int alignment) {
+    return left(new FormAttachment(control, margin, alignment));
+  }
+
+  public FormDataBuilder right(Control control, int margin, int alignment) {
+    return right(new FormAttachment(control, margin, alignment));
+  }
+
   public FormDataBuilder top(Control control, int margin, int alignment) {
     return top(new FormAttachment(control, margin, alignment));
   }

Reply via email to