public String open()

in plugins/transforms/tokenreplacement/src/main/java/org/apache/hop/pipeline/transforms/tokenreplacement/TokenReplacementDialog.java [167:1233]


  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, "TokenReplacementDialog.DialogTitle"));

    int middle = props.getMiddlePct();
    int margin = PropsUi.getMargin();

    // Buttons at the bottom
    //
    wOk = new Button(shell, SWT.PUSH);
    wOk.setText(BaseMessages.getString(PKG, "System.Button.OK"));
    wOk.addListener(SWT.Selection, e -> ok());
    wCancel = new Button(shell, SWT.PUSH);
    wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
    wCancel.addListener(SWT.Selection, e -> cancel());
    setButtonPositions(new Button[] {wOk, wCancel}, margin, null);

    // Transform name 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 INPUT TAB///
    // /
    CTabItem wInputTab = new CTabItem(wTabFolder, SWT.NONE);
    wInputTab.setFont(GuiResource.getInstance().getFontDefault());
    wInputTab.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.InputTab.TabTitle"));

    Composite wInputComp = new Composite(wTabFolder, SWT.NONE);
    PropsUi.setLook(wInputComp);

    FormLayout inputLayout = new FormLayout();
    inputLayout.marginWidth = 3;
    inputLayout.marginHeight = 3;
    wInputComp.setLayout(inputLayout);

    //
    // Input Type
    Label wlInputType = new Label(wInputComp, SWT.RIGHT);
    wlInputType.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.InputType.Label"));
    PropsUi.setLook(wlInputType);
    FormData fdlInputType = new FormData();
    fdlInputType.left = new FormAttachment(0, 0);
    fdlInputType.top = new FormAttachment(0, margin);
    fdlInputType.right = new FormAttachment(middle, -margin);
    wlInputType.setLayoutData(fdlInputType);

    wInputType = new CCombo(wInputComp, SWT.BORDER | SWT.READ_ONLY);
    wInputType.setEditable(true);
    PropsUi.setLook(wInputType);
    wInputType.addModifyListener(lsMod);
    FormData fdInputType = new FormData();
    fdInputType.left = new FormAttachment(middle, 0);
    fdInputType.top = new FormAttachment(0, margin);
    fdInputType.right = new FormAttachment(75, 0);
    wInputType.setLayoutData(fdInputType);
    String[] inputTypes = TokenReplacementMeta.INPUT_TYPES;
    for (String inputType : inputTypes) {
      wInputType.add(inputType);
    }
    wInputType.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent selectionEvent) {
            input.setChanged();
            updateInputType();
          }
        });

    /////////////////////
    // Input text group
    gInputText = new Group(wInputComp, SWT.SHADOW_ETCHED_IN);
    gInputText.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.InputTextGroup.Label"));
    FormLayout inputTextLayout = new FormLayout();
    inputTextLayout.marginWidth = 3;
    inputTextLayout.marginHeight = 3;
    gInputText.setLayout(inputTextLayout);
    PropsUi.setLook(gInputText);

    // input text
    wlInputText = new Label(gInputText, SWT.RIGHT);
    wlInputText.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.InputText.Label"));
    PropsUi.setLook(wlInputText);
    FormData fdlInputText = new FormData();
    fdlInputText.left = new FormAttachment(0, 0);
    fdlInputText.right = new FormAttachment(middle, -margin);
    fdlInputText.top = new FormAttachment(0, margin);
    fdlInputText.bottom = new FormAttachment(100, -margin);
    wlInputText.setLayoutData(fdlInputText);

    wInputText =
        new Text(gInputText, SWT.MULTI | SWT.LEFT | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
    PropsUi.setLook(wInputText);
    wInputText.addModifyListener(lsMod);
    FormData fdInputText = new FormData();
    fdInputText.left = new FormAttachment(middle, 0);
    fdInputText.top = new FormAttachment(0, margin);
    fdInputText.right = new FormAttachment(100, 0);
    fdInputText.bottom = new FormAttachment(100, -margin);
    wInputText.setLayoutData(fdInputText);

    FormData fdgInputText = new FormData();
    fdgInputText.left = new FormAttachment(0, 0);
    fdgInputText.right = new FormAttachment(100, 0);
    fdgInputText.top = new FormAttachment(wInputType, margin * 2);
    fdgInputText.bottom = new FormAttachment(100, -margin * 2);
    gInputText.setLayoutData(fdgInputText);

    /////////////////////
    // Input field group
    gInputField = new Group(wInputComp, SWT.SHADOW_ETCHED_IN);
    gInputField.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.InputFieldGroup.Label"));
    FormLayout inputFieldLayout = new FormLayout();
    inputFieldLayout.marginWidth = 3;
    inputFieldLayout.marginHeight = 3;
    gInputField.setLayout(inputFieldLayout);
    PropsUi.setLook(gInputField);

    // input Field Line
    wlInputField = new Label(gInputField, SWT.RIGHT);
    wlInputField.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.InputField.Label"));
    PropsUi.setLook(wlInputField);
    FormData fdlInputField = new FormData();
    fdlInputField.left = new FormAttachment(0, 0);
    fdlInputField.right = new FormAttachment(middle, -margin);
    fdlInputField.top = new FormAttachment(wInputType, margin);
    wlInputField.setLayoutData(fdlInputField);

    wInputField = new ComboVar(variables, gInputField, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wInputField);
    wInputField.addModifyListener(lsMod);
    FormData fdInputField = new FormData();
    fdInputField.left = new FormAttachment(middle, 0);
    fdInputField.top = new FormAttachment(wInputType, margin);
    fdInputField.right = new FormAttachment(100, 0);
    wInputField.setLayoutData(fdInputField);
    wInputField.setEnabled(false);
    wInputField.addFocusListener(
        new FocusListener() {
          @Override
          public void focusLost(org.eclipse.swt.events.FocusEvent e) { // Disable focuslost
          }

          @Override
          public void focusGained(org.eclipse.swt.events.FocusEvent e) {
            Cursor busy = new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT);
            shell.setCursor(busy);
            getFields();
            shell.setCursor(null);
            busy.dispose();
          }
        });
    /* End */

    FormData fdgInputField = new FormData();
    fdgInputField.left = new FormAttachment(0, 0);
    fdgInputField.right = new FormAttachment(100, 0);
    fdgInputField.top = new FormAttachment(wInputType, margin * 2);
    gInputField.setLayoutData(fdgInputField);

    /////////////////////
    // Input file group
    gInputFile = new Group(wInputComp, SWT.SHADOW_ETCHED_IN);
    gInputFile.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.InputFileGroup.Label"));
    FormLayout inputFileLayout = new FormLayout();
    inputFileLayout.marginWidth = 3;
    inputFileLayout.marginHeight = 3;
    gInputFile.setLayout(inputFileLayout);
    PropsUi.setLook(gInputFile);

    // InputFilename line
    wlInputFilename = new Label(gInputFile, SWT.RIGHT);
    wlInputFilename.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.InputFilename.Label"));
    PropsUi.setLook(wlInputFilename);
    FormData fdlInputFilename = new FormData();
    fdlInputFilename.left = new FormAttachment(0, 0);
    fdlInputFilename.top = new FormAttachment(0, margin);
    fdlInputFilename.right = new FormAttachment(middle, -margin);
    wlInputFilename.setLayoutData(fdlInputFilename);

    wbInputFilename = new Button(gInputFile, SWT.PUSH | SWT.CENTER);
    PropsUi.setLook(wbInputFilename);
    wbInputFilename.setText(BaseMessages.getString(PKG, "System.Button.Browse"));
    FormData fdbInputFilename = new FormData();
    fdbInputFilename.right = new FormAttachment(100, 0);
    fdbInputFilename.top = new FormAttachment(0, 0);
    wbInputFilename.setLayoutData(fdbInputFilename);

    wInputFilename = new TextVar(variables, gInputFile, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wInputFilename);
    wInputFilename.addModifyListener(lsMod);
    FormData fdInputFilename = new FormData();
    fdInputFilename.left = new FormAttachment(middle, 0);
    fdInputFilename.top = new FormAttachment(0, margin);
    fdInputFilename.right = new FormAttachment(wbInputFilename, -margin);
    wInputFilename.setLayoutData(fdInputFilename);

    // File name in field line
    //
    wlInputFilenameInField = new Label(gInputFile, SWT.RIGHT);
    wlInputFilenameInField.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.FilenameInField.Label"));
    PropsUi.setLook(wlInputFilenameInField);
    FormData fdlInputFilenameInField = new FormData();
    fdlInputFilenameInField.left = new FormAttachment(0, 0);
    fdlInputFilenameInField.top = new FormAttachment(wInputFilename, margin);
    fdlInputFilenameInField.right = new FormAttachment(middle, -margin);
    wlInputFilenameInField.setLayoutData(fdlInputFilenameInField);

    wInputFilenameInField = new Button(gInputFile, SWT.CHECK);
    PropsUi.setLook(wInputFilenameInField);
    FormData fdInputFilenameInField = new FormData();
    fdInputFilenameInField.left = new FormAttachment(middle, 0);
    fdInputFilenameInField.top = new FormAttachment(wInputFilename, margin);
    fdInputFilenameInField.right = new FormAttachment(100, 0);
    wInputFilenameInField.setLayoutData(fdInputFilenameInField);
    wInputFilenameInField.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
            setInputFilenameInField();
          }
        });

    // Input FileNameField Line
    wlInputFilenameField = new Label(gInputFile, SWT.RIGHT);
    wlInputFilenameField.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.InputFilenameField.Label"));
    PropsUi.setLook(wlInputFilenameField);
    FormData fdlInputFilenameField = new FormData();
    fdlInputFilenameField.left = new FormAttachment(0, 0);
    fdlInputFilenameField.right = new FormAttachment(middle, -margin);
    fdlInputFilenameField.top = new FormAttachment(wInputFilenameInField, margin);
    wlInputFilenameField.setLayoutData(fdlInputFilenameField);

    wInputFilenameField = new ComboVar(variables, gInputFile, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wInputFilenameField);
    wInputFilenameField.addModifyListener(lsMod);
    FormData fdInputFilenameField = new FormData();
    fdInputFilenameField.left = new FormAttachment(middle, 0);
    fdInputFilenameField.top = new FormAttachment(wInputFilenameInField, margin);
    fdInputFilenameField.right = new FormAttachment(100, 0);
    wInputFilenameField.setLayoutData(fdInputFilenameField);
    wInputFilenameField.setEnabled(false);
    wInputFilenameField.addFocusListener(
        new FocusListener() {
          @Override
          public void focusLost(org.eclipse.swt.events.FocusEvent e) {
            // Disable Focuslost
          }

          @Override
          public void focusGained(org.eclipse.swt.events.FocusEvent e) {
            Cursor busy = new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT);
            shell.setCursor(busy);
            getFields();
            shell.setCursor(null);
            busy.dispose();
          }
        });
    /* End */

    // Add Input Filename to Result Line
    //
    wlAddInputFilenameToResult = new Label(gInputFile, SWT.RIGHT);
    wlAddInputFilenameToResult.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.AddInputFilenameToResult.Label"));
    PropsUi.setLook(wlAddInputFilenameToResult);
    FormData fdlAddInputFilenameToResult = new FormData();
    fdlAddInputFilenameToResult.left = new FormAttachment(0, 0);
    fdlAddInputFilenameToResult.top = new FormAttachment(wInputFilenameField, margin);
    fdlAddInputFilenameToResult.right = new FormAttachment(middle, -margin);
    wlAddInputFilenameToResult.setLayoutData(fdlAddInputFilenameToResult);

    wAddInputFilenameToResult = new Button(gInputFile, SWT.CHECK);
    PropsUi.setLook(wAddInputFilenameToResult);
    FormData fdAddInputFilenameToResult = new FormData();
    fdAddInputFilenameToResult.left = new FormAttachment(middle, 0);
    fdAddInputFilenameToResult.top = new FormAttachment(wInputFilenameField, margin);
    fdAddInputFilenameToResult.right = new FormAttachment(100, 0);
    wAddInputFilenameToResult.setLayoutData(fdAddInputFilenameToResult);
    wAddInputFilenameToResult.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
          }
        });

    FormData fdgInputFile = new FormData();
    fdgInputFile.left = new FormAttachment(0, 0);
    fdgInputFile.right = new FormAttachment(100, 0);
    fdgInputFile.top = new FormAttachment(wInputType, margin * 2);
    gInputFile.setLayoutData(fdgInputFile);

    FormData fdInputComp = new FormData();
    fdInputComp.left = new FormAttachment(0, 0);
    fdInputComp.top = new FormAttachment(0, 0);
    fdInputComp.right = new FormAttachment(100, 0);
    fdInputComp.bottom = new FormAttachment(100, 0);
    wInputComp.setLayoutData(fdInputComp);

    wInputComp.layout();
    wInputTab.setControl(wInputComp);

    // ////////////////////////
    // START OF OUTPUT TAB///
    // /
    CTabItem wOutputTab = new CTabItem(wTabFolder, SWT.NONE);
    wOutputTab.setFont(GuiResource.getInstance().getFontDefault());
    wOutputTab.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.OutputTab.TabTitle"));

    Composite wOutputComp = new Composite(wTabFolder, SWT.NONE);
    PropsUi.setLook(wOutputComp);

    FormLayout outputLayout = new FormLayout();
    outputLayout.marginWidth = 3;
    outputLayout.marginHeight = 3;
    wOutputComp.setLayout(outputLayout);

    //
    // Output Type
    Label wlOutputType = new Label(wOutputComp, SWT.RIGHT);
    wlOutputType.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.OutputType.Label"));
    PropsUi.setLook(wlOutputType);
    FormData fdlOutputType = new FormData();
    fdlOutputType.left = new FormAttachment(0, 0);
    fdlOutputType.top = new FormAttachment(0, margin);
    fdlOutputType.right = new FormAttachment(middle, -margin);
    wlOutputType.setLayoutData(fdlOutputType);

    wOutputType = new CCombo(wOutputComp, SWT.BORDER | SWT.READ_ONLY);
    wOutputType.setEditable(true);
    PropsUi.setLook(wOutputType);
    wOutputType.addModifyListener(lsMod);
    FormData fdOutputType = new FormData();
    fdOutputType.left = new FormAttachment(middle, 0);
    fdOutputType.top = new FormAttachment(0, margin);
    fdOutputType.right = new FormAttachment(75, 0);
    wOutputType.setLayoutData(fdOutputType);
    String[] outputTypes = TokenReplacementMeta.OUTPUT_TYPES;
    for (String outputType : outputTypes) {
      wOutputType.add(outputType);
    }
    wOutputType.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent selectionEvent) {
            input.setChanged();
            updateOutputType();
          }
        });

    /////////////////////
    // Output field group
    gOutputField = new Group(wOutputComp, SWT.SHADOW_ETCHED_IN);
    gOutputField.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.OutputFieldGroup.Label"));
    FormLayout outputFieldLayout = new FormLayout();
    outputFieldLayout.marginWidth = 3;
    outputFieldLayout.marginHeight = 3;
    gOutputField.setLayout(outputFieldLayout);
    PropsUi.setLook(gOutputField);

    // output Field Line
    wlOutputField = new Label(gOutputField, SWT.RIGHT);
    wlOutputField.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.OutputField.Label"));
    PropsUi.setLook(wlOutputField);
    FormData fdlOutputField = new FormData();
    fdlOutputField.left = new FormAttachment(0, 0);
    fdlOutputField.right = new FormAttachment(middle, -margin);
    fdlOutputField.top = new FormAttachment(0, margin);
    wlOutputField.setLayoutData(fdlOutputField);

    wOutputField = new TextVar(variables, gOutputField, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wOutputField);
    wOutputField.addModifyListener(lsMod);
    FormData fdOutputField = new FormData();
    fdOutputField.left = new FormAttachment(middle, 0);
    fdOutputField.top = new FormAttachment(0, margin);
    fdOutputField.right = new FormAttachment(100, 0);
    wOutputField.setLayoutData(fdOutputField);
    wOutputField.setEnabled(false);
    wOutputField.addModifyListener(lsMod);
    /* End */

    FormData fdgOutputField = new FormData();
    fdgOutputField.left = new FormAttachment(0, 0);
    fdgOutputField.right = new FormAttachment(100, 0);
    fdgOutputField.top = new FormAttachment(wOutputType, margin * 2);
    gOutputField.setLayoutData(fdgOutputField);

    /////////////////////
    // Output file group
    gOutputFile = new Group(wOutputComp, SWT.SHADOW_ETCHED_IN);
    gOutputFile.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.OutputFileGroup.Label"));
    FormLayout outputFileLayout = new FormLayout();
    outputFileLayout.marginWidth = 3;
    outputFileLayout.marginHeight = 3;
    gOutputFile.setLayout(outputFileLayout);
    PropsUi.setLook(gOutputFile);

    // OutputFilename line
    wlOutputFilename = new Label(gOutputFile, SWT.RIGHT);
    wlOutputFilename.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.OutputFilename.Label"));
    PropsUi.setLook(wlOutputFilename);
    FormData fdlOutputFilename = new FormData();
    fdlOutputFilename.left = new FormAttachment(0, 0);
    fdlOutputFilename.top = new FormAttachment(0, margin);
    fdlOutputFilename.right = new FormAttachment(middle, -margin);
    wlOutputFilename.setLayoutData(fdlOutputFilename);

    wbOutputFilename = new Button(gOutputFile, SWT.PUSH | SWT.CENTER);
    PropsUi.setLook(wbOutputFilename);
    wbOutputFilename.setText(BaseMessages.getString(PKG, "System.Button.Browse"));
    FormData fdbOutputFilename = new FormData();
    fdbOutputFilename.right = new FormAttachment(100, 0);
    fdbOutputFilename.top = new FormAttachment(0, 0);
    wbOutputFilename.setLayoutData(fdbOutputFilename);

    wOutputFilename = new TextVar(variables, gOutputFile, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wOutputFilename);
    wOutputFilename.addModifyListener(lsMod);
    FormData fdOutputFilename = new FormData();
    fdOutputFilename.left = new FormAttachment(middle, 0);
    fdOutputFilename.top = new FormAttachment(0, margin);
    fdOutputFilename.right = new FormAttachment(wbOutputFilename, -margin);
    wOutputFilename.setLayoutData(fdOutputFilename);

    // File name in field line
    //
    Label wlOutputFilenameInField = new Label(gOutputFile, SWT.RIGHT);
    wlOutputFilenameInField.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.FilenameInField.Label"));
    PropsUi.setLook(wlOutputFilenameInField);
    FormData fdlOutputFilenameInField = new FormData();
    fdlOutputFilenameInField.left = new FormAttachment(0, 0);
    fdlOutputFilenameInField.top = new FormAttachment(wOutputFilename, margin);
    fdlOutputFilenameInField.right = new FormAttachment(middle, -margin);
    wlOutputFilenameInField.setLayoutData(fdlOutputFilenameInField);

    wOutputFilenameInField = new Button(gOutputFile, SWT.CHECK);
    PropsUi.setLook(wOutputFilenameInField);
    FormData fdOutputFilenameInField = new FormData();
    fdOutputFilenameInField.left = new FormAttachment(middle, 0);
    fdOutputFilenameInField.top = new FormAttachment(wOutputFilename, margin);
    fdOutputFilenameInField.right = new FormAttachment(100, 0);
    wOutputFilenameInField.setLayoutData(fdOutputFilenameInField);
    wOutputFilenameInField.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
            setOutputFilenameInField();
          }
        });

    // Output FileNameField Line
    wlOutputFilenameField = new Label(gOutputFile, SWT.RIGHT);
    wlOutputFilenameField.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.OutputFilenameField.Label"));
    PropsUi.setLook(wlOutputFilenameField);
    FormData fdlOutputFilenameField = new FormData();
    fdlOutputFilenameField.left = new FormAttachment(0, 0);
    fdlOutputFilenameField.right = new FormAttachment(middle, -margin);
    fdlOutputFilenameField.top = new FormAttachment(wOutputFilenameInField, margin);
    wlOutputFilenameField.setLayoutData(fdlOutputFilenameField);

    wOutputFilenameField = new ComboVar(variables, gOutputFile, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wOutputFilenameField);
    wOutputFilenameField.addModifyListener(lsMod);
    FormData fdOutputFilenameField = new FormData();
    fdOutputFilenameField.left = new FormAttachment(middle, 0);
    fdOutputFilenameField.top = new FormAttachment(wOutputFilenameInField, margin);
    fdOutputFilenameField.right = new FormAttachment(100, 0);
    wOutputFilenameField.setLayoutData(fdOutputFilenameField);
    wOutputFilenameField.setEnabled(false);
    wOutputFilenameField.addFocusListener(
        new FocusListener() {
          @Override
          public void focusLost(org.eclipse.swt.events.FocusEvent e) {
            // Disable Focuslost
          }

          @Override
          public void focusGained(org.eclipse.swt.events.FocusEvent e) {
            Cursor busy = new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT);
            shell.setCursor(busy);
            getFields();
            shell.setCursor(null);
            busy.dispose();
          }
        });
    /* End */

    // Append
    //
    wlAppendOutputFilename = new Label(gOutputFile, SWT.RIGHT);
    wlAppendOutputFilename.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.AppendOutput.Label"));
    PropsUi.setLook(wlAppendOutputFilename);
    FormData fdlAppendOutputFilename = new FormData();
    fdlAppendOutputFilename.left = new FormAttachment(0, 0);
    fdlAppendOutputFilename.top = new FormAttachment(wOutputFilenameField, margin);
    fdlAppendOutputFilename.right = new FormAttachment(middle, -margin);
    wlAppendOutputFilename.setLayoutData(fdlAppendOutputFilename);

    wAppendOutputFilename = new Button(gOutputFile, SWT.CHECK);
    wAppendOutputFilename.setToolTipText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.AppendOutput.Tooltip"));
    PropsUi.setLook(wAppendOutputFilename);
    FormData fdAppendOutputFilename = new FormData();
    fdAppendOutputFilename.left = new FormAttachment(middle, 0);
    fdAppendOutputFilename.top = new FormAttachment(wOutputFilenameField, margin);
    fdAppendOutputFilename.right = new FormAttachment(100, 0);
    wAppendOutputFilename.setLayoutData(fdAppendOutputFilename);
    wAppendOutputFilename.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
          }
        });

    // Create Parent Folder
    //
    wlCreateParentFolder = new Label(gOutputFile, SWT.RIGHT);
    wlCreateParentFolder.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.CreateParentFolder.Label"));
    PropsUi.setLook(wlCreateParentFolder);
    FormData fdlCreateParentFolder = new FormData();
    fdlCreateParentFolder.left = new FormAttachment(0, 0);
    fdlCreateParentFolder.top = new FormAttachment(wAppendOutputFilename, margin);
    fdlCreateParentFolder.right = new FormAttachment(middle, -margin);
    wlCreateParentFolder.setLayoutData(fdlCreateParentFolder);

    wCreateParentFolder = new Button(gOutputFile, SWT.CHECK);
    wCreateParentFolder.setToolTipText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.CreateParentFolder.Tooltip"));
    PropsUi.setLook(wCreateParentFolder);
    FormData fdCreateParentFolder = new FormData();
    fdCreateParentFolder.left = new FormAttachment(middle, 0);
    fdCreateParentFolder.top = new FormAttachment(wAppendOutputFilename, margin);
    fdCreateParentFolder.right = new FormAttachment(100, 0);
    wCreateParentFolder.setLayoutData(fdCreateParentFolder);
    wCreateParentFolder.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
          }
        });

    Label wlFormat = new Label(gOutputFile, SWT.RIGHT);
    wlFormat.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.Format.Label"));
    PropsUi.setLook(wlFormat);
    FormData fdlFormat = new FormData();
    fdlFormat.left = new FormAttachment(0, 0);
    fdlFormat.top = new FormAttachment(wCreateParentFolder, margin);
    fdlFormat.right = new FormAttachment(middle, -margin);
    wlFormat.setLayoutData(fdlFormat);

    wFormat = new CCombo(gOutputFile, SWT.BORDER | SWT.READ_ONLY);
    PropsUi.setLook(wFormat);

    for (int i = 0; i < TokenReplacementMeta.formatMapperLineTerminator.length; i++) {
      wFormat.add(TokenReplacementMeta.formatMapperLineTerminatorDescriptions[i]);
    }
    wFormat.select(0);
    wFormat.addModifyListener(lsMod);
    FormData fdFormat = new FormData();
    fdFormat.left = new FormAttachment(middle, 0);
    fdFormat.top = new FormAttachment(wCreateParentFolder, margin);
    fdFormat.right = new FormAttachment(100, 0);
    wFormat.setLayoutData(fdFormat);

    // Encoding line
    Label wlOutputFileEncoding = new Label(gOutputFile, SWT.RIGHT);
    wlOutputFileEncoding.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.Encoding.Label"));
    PropsUi.setLook(wlOutputFileEncoding);
    FormData fdlOutputFileEncoding = new FormData();
    fdlOutputFileEncoding.left = new FormAttachment(0, 0);
    fdlOutputFileEncoding.top = new FormAttachment(wFormat, margin);
    fdlOutputFileEncoding.right = new FormAttachment(middle, -margin);
    wlOutputFileEncoding.setLayoutData(fdlOutputFileEncoding);

    wOutputFileEncoding = new CCombo(gOutputFile, SWT.BORDER | SWT.READ_ONLY);
    wOutputFileEncoding.setEditable(true);
    PropsUi.setLook(wOutputFileEncoding);
    wOutputFileEncoding.addModifyListener(lsMod);
    FormData fdOutputFileEncoding = new FormData();
    fdOutputFileEncoding.left = new FormAttachment(middle, 0);
    fdOutputFileEncoding.top = new FormAttachment(wFormat, margin);
    fdOutputFileEncoding.right = new FormAttachment(100, 0);
    wOutputFileEncoding.setLayoutData(fdOutputFileEncoding);
    wOutputFileEncoding.addFocusListener(
        new FocusListener() {
          @Override
          public void focusLost(org.eclipse.swt.events.FocusEvent e) {
            // Disable focuslost
          }

          @Override
          public void focusGained(org.eclipse.swt.events.FocusEvent e) {
            Cursor busy = new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT);
            shell.setCursor(busy);
            setEncodings();
            shell.setCursor(null);
            busy.dispose();
          }
        });

    // output Split Every Line
    wlOutputSplitEvery = new Label(gOutputFile, SWT.RIGHT);
    wlOutputSplitEvery.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.OutputSplitEvery.Label"));
    PropsUi.setLook(wlOutputSplitEvery);
    FormData fdlOutputSplitEvery = new FormData();
    fdlOutputSplitEvery.left = new FormAttachment(0, 0);
    fdlOutputSplitEvery.right = new FormAttachment(middle, -margin);
    fdlOutputSplitEvery.top = new FormAttachment(wOutputFileEncoding, margin);
    wlOutputSplitEvery.setLayoutData(fdlOutputSplitEvery);

    wOutputSplitEvery = new Text(gOutputFile, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wOutputSplitEvery);
    wOutputSplitEvery.addModifyListener(lsMod);
    FormData fdOutputSplitEvery = new FormData();
    fdOutputSplitEvery.left = new FormAttachment(middle, 0);
    fdOutputSplitEvery.top = new FormAttachment(wOutputFileEncoding, margin);
    fdOutputSplitEvery.right = new FormAttachment(100, 0);
    wOutputSplitEvery.setLayoutData(fdOutputSplitEvery);
    wOutputSplitEvery.setEnabled(false);

    // Include Transform NR in Output Filename
    //
    wlIncludeTransformNrInFilename = new Label(gOutputFile, SWT.RIGHT);
    wlIncludeTransformNrInFilename.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.IncludeTransformnr.Label"));
    PropsUi.setLook(wlIncludeTransformNrInFilename);
    FormData fdlIncludeTransformNrInFilename = new FormData();
    fdlIncludeTransformNrInFilename.left = new FormAttachment(0, 0);
    fdlIncludeTransformNrInFilename.top = new FormAttachment(wOutputSplitEvery, margin);
    fdlIncludeTransformNrInFilename.right = new FormAttachment(middle, -margin);
    wlIncludeTransformNrInFilename.setLayoutData(fdlIncludeTransformNrInFilename);

    wIncludeTransformNrInFilename = new Button(gOutputFile, SWT.CHECK);
    PropsUi.setLook(wIncludeTransformNrInFilename);
    FormData fdIncludeTransformNrInFilename = new FormData();
    fdIncludeTransformNrInFilename.left = new FormAttachment(middle, 0);
    fdIncludeTransformNrInFilename.top = new FormAttachment(wOutputSplitEvery, margin);
    fdIncludeTransformNrInFilename.right = new FormAttachment(100, 0);
    wIncludeTransformNrInFilename.setLayoutData(fdIncludeTransformNrInFilename);
    wIncludeTransformNrInFilename.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
          }
        });

    // Include Part Nr in filename line
    //
    wlIncludePartNrInFilename = new Label(gOutputFile, SWT.RIGHT);
    wlIncludePartNrInFilename.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.IncludePartnr.Label"));
    PropsUi.setLook(wlIncludePartNrInFilename);
    FormData fdlIncludePartNrInFilename = new FormData();
    fdlIncludePartNrInFilename.left = new FormAttachment(0, 0);
    fdlIncludePartNrInFilename.top = new FormAttachment(wIncludeTransformNrInFilename, margin);
    fdlIncludePartNrInFilename.right = new FormAttachment(middle, -margin);
    wlIncludePartNrInFilename.setLayoutData(fdlIncludePartNrInFilename);

    wIncludePartNrInFilename = new Button(gOutputFile, SWT.CHECK);
    PropsUi.setLook(wIncludePartNrInFilename);
    FormData fdIncludePartNrInFilename = new FormData();
    fdIncludePartNrInFilename.left = new FormAttachment(middle, 0);
    fdIncludePartNrInFilename.top = new FormAttachment(wIncludeTransformNrInFilename, margin);
    fdIncludePartNrInFilename.right = new FormAttachment(100, 0);
    wIncludePartNrInFilename.setLayoutData(fdIncludePartNrInFilename);
    wIncludePartNrInFilename.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
          }
        });

    // Include Date in Output Filename
    //
    wlIncludeDateInFilename = new Label(gOutputFile, SWT.RIGHT);
    wlIncludeDateInFilename.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.IncludeDate.Label"));
    PropsUi.setLook(wlIncludeDateInFilename);
    FormData fdlIncludeDateInFilename = new FormData();
    fdlIncludeDateInFilename.left = new FormAttachment(0, 0);
    fdlIncludeDateInFilename.top = new FormAttachment(wIncludePartNrInFilename, margin);
    fdlIncludeDateInFilename.right = new FormAttachment(middle, -margin);
    wlIncludeDateInFilename.setLayoutData(fdlIncludeDateInFilename);

    wIncludeDateInFilename = new Button(gOutputFile, SWT.CHECK);
    PropsUi.setLook(wIncludeDateInFilename);
    FormData fdIncludeDateInFilename = new FormData();
    fdIncludeDateInFilename.left = new FormAttachment(middle, 0);
    fdIncludeDateInFilename.top = new FormAttachment(wIncludePartNrInFilename, margin);
    fdIncludeDateInFilename.right = new FormAttachment(100, 0);
    wIncludeDateInFilename.setLayoutData(fdIncludeDateInFilename);
    wIncludeDateInFilename.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
          }
        });

    // Include time in filename
    //
    wlIncludeTimeInFilename = new Label(gOutputFile, SWT.RIGHT);
    wlIncludeTimeInFilename.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.IncludeTime.Label"));
    PropsUi.setLook(wlIncludeTimeInFilename);
    FormData fdlIncludeTimeInFilename = new FormData();
    fdlIncludeTimeInFilename.left = new FormAttachment(0, 0);
    fdlIncludeTimeInFilename.top = new FormAttachment(wIncludeDateInFilename, margin);
    fdlIncludeTimeInFilename.right = new FormAttachment(middle, -margin);
    wlIncludeTimeInFilename.setLayoutData(fdlIncludeTimeInFilename);

    wIncludeTimeInFilename = new Button(gOutputFile, SWT.CHECK);
    PropsUi.setLook(wIncludeTimeInFilename);
    FormData fdIncludeTimeInFilename = new FormData();
    fdIncludeTimeInFilename.left = new FormAttachment(middle, 0);
    fdIncludeTimeInFilename.top = new FormAttachment(wIncludeDateInFilename, margin);
    fdIncludeTimeInFilename.right = new FormAttachment(100, 0);
    wIncludeTimeInFilename.setLayoutData(fdIncludeTimeInFilename);
    wIncludeTimeInFilename.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
          }
        });

    // Specify format
    //
    wlSpecifyDateFormat = new Label(gOutputFile, SWT.RIGHT);
    wlSpecifyDateFormat.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.SpecifyFormat.Label"));
    PropsUi.setLook(wlSpecifyDateFormat);
    FormData fdlSpecifyDateFormat = new FormData();
    fdlSpecifyDateFormat.left = new FormAttachment(0, 0);
    fdlSpecifyDateFormat.top = new FormAttachment(wIncludeTimeInFilename, margin);
    fdlSpecifyDateFormat.right = new FormAttachment(middle, -margin);
    wlSpecifyDateFormat.setLayoutData(fdlSpecifyDateFormat);

    wSpecifyDateFormat = new Button(gOutputFile, SWT.CHECK);
    PropsUi.setLook(wSpecifyDateFormat);
    FormData fdSpecifyDateFormat = new FormData();
    fdSpecifyDateFormat.left = new FormAttachment(middle, 0);
    fdSpecifyDateFormat.top = new FormAttachment(wIncludeTimeInFilename, margin);
    fdSpecifyDateFormat.right = new FormAttachment(100, 0);
    wSpecifyDateFormat.setLayoutData(fdSpecifyDateFormat);
    wSpecifyDateFormat.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
            setSpecifyDateFormat();
          }
        });

    // DateTimeFormat
    wlDateFormat = new Label(gOutputFile, SWT.RIGHT);
    wlDateFormat.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.DateTimeFormat.Label"));
    PropsUi.setLook(wlDateFormat);
    FormData fdlDateFormat = new FormData();
    fdlDateFormat.left = new FormAttachment(0, 0);
    fdlDateFormat.top = new FormAttachment(wSpecifyDateFormat, margin);
    fdlDateFormat.right = new FormAttachment(middle, -margin);
    wlDateFormat.setLayoutData(fdlDateFormat);

    wDateFormat = new CCombo(gOutputFile, SWT.BORDER | SWT.READ_ONLY);
    wDateFormat.setEditable(true);
    PropsUi.setLook(wDateFormat);
    wDateFormat.addModifyListener(lsMod);
    FormData fdDateFormat = new FormData();
    fdDateFormat.left = new FormAttachment(middle, 0);
    fdDateFormat.top = new FormAttachment(wSpecifyDateFormat, margin);
    fdDateFormat.right = new FormAttachment(75, 0);
    wDateFormat.setLayoutData(fdDateFormat);
    String[] dats = Const.getDateFormats();
    for (String dat : dats) {
      wDateFormat.add(dat);
    }

    // Add Output Filename to Result Line
    //
    wlAddOutputFilenameToResult = new Label(gOutputFile, SWT.RIGHT);
    wlAddOutputFilenameToResult.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.AddOutputFilenameToResult.Label"));
    PropsUi.setLook(wlAddOutputFilenameToResult);
    FormData fdlAddOutputFilenameToResult = new FormData();
    fdlAddOutputFilenameToResult.left = new FormAttachment(0, 0);
    fdlAddOutputFilenameToResult.top = new FormAttachment(wDateFormat, margin);
    fdlAddOutputFilenameToResult.right = new FormAttachment(middle, -margin);
    wlAddOutputFilenameToResult.setLayoutData(fdlAddOutputFilenameToResult);

    wAddOutputFilenameToResult = new Button(gOutputFile, SWT.CHECK);
    PropsUi.setLook(wAddOutputFilenameToResult);
    FormData fdAddOutputFilenameToResult = new FormData();
    fdAddOutputFilenameToResult.left = new FormAttachment(middle, 0);
    fdAddOutputFilenameToResult.top = new FormAttachment(wDateFormat, margin);
    fdAddOutputFilenameToResult.right = new FormAttachment(100, 0);
    wAddOutputFilenameToResult.setLayoutData(fdAddOutputFilenameToResult);
    wAddOutputFilenameToResult.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            input.setChanged();
          }
        });

    FormData fdgOutputFile = new FormData();
    fdgOutputFile.left = new FormAttachment(0, 0);
    fdgOutputFile.right = new FormAttachment(100, 0);
    fdgOutputFile.top = new FormAttachment(wOutputType, margin * 2);
    gOutputFile.setLayoutData(fdgOutputFile);

    FormData fdOutputComp = new FormData();
    fdOutputComp.left = new FormAttachment(0, 0);
    fdOutputComp.top = new FormAttachment(0, 0);
    fdOutputComp.right = new FormAttachment(100, 0);
    fdOutputComp.bottom = new FormAttachment(100, 0);
    wOutputComp.setLayoutData(fdOutputComp);

    wOutputComp.layout();
    wOutputTab.setControl(wOutputComp);

    // ///////////////////////////////////////////////////////////
    // / END OF FILE TAB
    // ///////////////////////////////////////////////////////////

    // Token tab...
    //
    CTabItem wTokensTab = new CTabItem(wTabFolder, SWT.NONE);
    wTokensTab.setFont(GuiResource.getInstance().getFontDefault());
    wTokensTab.setText(BaseMessages.getString(PKG, "TokenReplacementDialog.TokensTab.TabTitle"));

    FormLayout tokensLayout = new FormLayout();
    tokensLayout.marginWidth = PropsUi.getFormMargin();
    tokensLayout.marginHeight = PropsUi.getFormMargin();

    Composite wTokensComp = new Composite(wTabFolder, SWT.NONE);
    wTokensComp.setLayout(tokensLayout);
    PropsUi.setLook(wTokensComp);

    wGet = new Button(wTokensComp, SWT.PUSH);
    wGet.setText(BaseMessages.getString(PKG, "System.Button.GetFields"));
    wGet.setToolTipText(BaseMessages.getString(PKG, "System.Tooltip.GetFields"));
    fdGet = new FormData();
    fdGet.right = new FormAttachment(50, -margin);
    fdGet.bottom = new FormAttachment(100, 0);
    wGet.setLayoutData(fdGet);

    // Token Start String
    Label wlTokenStartString = new Label(wTokensComp, SWT.RIGHT);
    wlTokenStartString.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.TokenStartString.Label"));
    PropsUi.setLook(wlTokenStartString);
    FormData fdlTokenStartString = new FormData();
    fdlTokenStartString.left = new FormAttachment(0, 0);
    fdlTokenStartString.top = new FormAttachment(0, margin);
    fdlTokenStartString.right = new FormAttachment(middle, -margin);
    wlTokenStartString.setLayoutData(fdlTokenStartString);

    wTokenStartString = new TextVar(variables, wTokensComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wTokenStartString);
    wTokenStartString.addModifyListener(lsMod);
    FormData fdTokenStartString = new FormData();
    fdTokenStartString.left = new FormAttachment(middle, 0);
    fdTokenStartString.top = new FormAttachment(0, margin);
    fdTokenStartString.right = new FormAttachment(100, -margin);
    wTokenStartString.setLayoutData(fdTokenStartString);

    // Token End String
    Label wlTokenEndString = new Label(wTokensComp, SWT.RIGHT);
    wlTokenEndString.setText(
        BaseMessages.getString(PKG, "TokenReplacementDialog.TokenEndString.Label"));
    PropsUi.setLook(wlTokenEndString);
    FormData fdlTokenEndString = new FormData();
    fdlTokenEndString.left = new FormAttachment(0, 0);
    fdlTokenEndString.top = new FormAttachment(wTokenStartString, margin);
    fdlTokenEndString.right = new FormAttachment(middle, -margin);
    wlTokenEndString.setLayoutData(fdlTokenEndString);

    wTokenEndString = new TextVar(variables, wTokensComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wTokenEndString);
    wTokenEndString.addModifyListener(lsMod);
    FormData fdTokenEndString = new FormData();
    fdTokenEndString.left = new FormAttachment(middle, 0);
    fdTokenEndString.top = new FormAttachment(wTokenStartString, margin);
    fdTokenEndString.right = new FormAttachment(100, -margin);
    wTokenEndString.setLayoutData(fdTokenEndString);

    // Tokens table
    final int FieldsCols = 2;
    final int FieldsRows = input.getTokenReplacementFields().length;

    colinf = new ColumnInfo[FieldsCols];
    colinf[0] =
        new ColumnInfo(
            BaseMessages.getString(PKG, "TokenReplacementDialog.TokenColumn.Column"),
            ColumnInfo.COLUMN_TYPE_TEXT,
            false);
    colinf[1] =
        new ColumnInfo(
            BaseMessages.getString(PKG, "TokenReplacementDialog.StreamColumn.Column"),
            ColumnInfo.COLUMN_TYPE_CCOMBO,
            new String[] {""},
            false);

    wFields =
        new TableView(
            variables,
            wTokensComp,
            SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
            colinf,
            FieldsRows,
            lsMod,
            props);

    FormData fdFields = new FormData();
    fdFields.left = new FormAttachment(0, 0);
    fdFields.top = new FormAttachment(wTokenEndString, margin * 2);
    fdFields.right = new FormAttachment(100, 0);
    fdFields.bottom = new FormAttachment(wGet, -margin);
    wFields.setLayoutData(fdFields);

    //
    // Search the fields in the background

    final Runnable runnable =
        () -> {
          TransformMeta transformMeta = pipelineMeta.findTransform(transformName);
          if (transformMeta != null) {
            try {
              IRowMeta row = pipelineMeta.getPrevTransformFields(variables, transformMeta);

              // Remember these fields...
              for (int i = 0; i < row.size(); i++) {
                inputFields.add(row.getValueMeta(i).getName());
              }
              setComboBoxes();
            } catch (HopException e) {
              logError(BaseMessages.getString(PKG, "System.Dialog.GetFieldsFailed.Message"));
            }
          }
        };
    new Thread(runnable).start();

    FormData fdTokensComp = new FormData();
    fdTokensComp.left = new FormAttachment(0, 0);
    fdTokensComp.top = new FormAttachment(0, 0);
    fdTokensComp.right = new FormAttachment(100, 0);
    fdTokensComp.bottom = new FormAttachment(100, 0);
    wTokensComp.setLayoutData(fdTokensComp);

    wTokensComp.layout();
    wTokensTab.setControl(wTokensComp);

    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);

    // Add listeners
    wGet.addListener(SWT.Selection, e -> get());

    // Whenever something changes, set the tooltip to the expanded version:
    wInputFilename.addModifyListener(
        e -> wInputFilename.setToolTipText(variables.resolve(wInputFilename.getText())));

    // Whenever something changes, set the tooltip to the expanded version:
    wOutputFilename.addModifyListener(
        e -> wOutputFilename.setToolTipText(variables.resolve(wOutputFilename.getText())));

    wbInputFilename.addListener(
        SWT.Selection,
        e ->
            BaseDialog.presentFileDialog(
                shell,
                wInputFilename,
                variables,
                new String[] {"*"},
                new String[] {BaseMessages.getString(PKG, "System.FileType.AllFiles")},
                true));

    wbOutputFilename.addListener(
        SWT.Selection,
        e ->
            BaseDialog.presentFileDialog(
                shell,
                wOutputFilename,
                variables,
                new String[] {"*"},
                new String[] {BaseMessages.getString(PKG, "System.FileType.AllFiles")},
                true));

    lsResize =
        event -> {
          Point size = shell.getSize();
          wFields.setSize(size.x - 10, size.y - 50);
          wFields.table.setSize(size.x - 10, size.y - 50);
          wFields.redraw();
        };
    shell.addListener(SWT.Resize, lsResize);

    wTabFolder.setSelection(0);

    getData();
    input.setChanged(changed);
    updateInputType();
    updateOutputType();

    BaseDialog.defaultShellHandling(shell, c -> ok(), c -> cancel());

    return transformName;
  }