public IAction open()

in plugins/actions/mssqlbulkload/src/main/java/org/apache/hop/workflow/actions/mssqlbulkload/ActionMssqlBulkLoadDialog.java [147:1035]


  public IAction open() {

    shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.MIN | SWT.MAX | SWT.RESIZE);
    PropsUi.setLook(shell);
    WorkflowDialog.setShellImage(shell, action);

    ModifyListener lsMod = e -> action.setChanged();
    changed = action.hasChanged();

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

    shell.setLayout(formLayout);
    shell.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Title"));

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

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

    // Filename line
    Label wlName = new Label(shell, SWT.RIGHT);
    wlName.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Name.Label"));
    PropsUi.setLook(wlName);
    FormData fdlName = new FormData();
    fdlName.left = new FormAttachment(0, 0);
    fdlName.right = new FormAttachment(middle, -margin);
    fdlName.top = new FormAttachment(0, margin);
    wlName.setLayoutData(fdlName);
    wName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wName);
    wName.addModifyListener(lsMod);
    FormData fdName = new FormData();
    fdName.left = new FormAttachment(middle, 0);
    fdName.top = new FormAttachment(0, margin);
    fdName.right = new FormAttachment(100, 0);
    wName.setLayoutData(fdName);

    CTabFolder wTabFolder = new CTabFolder(shell, SWT.BORDER);
    PropsUi.setLook(wTabFolder, Props.WIDGET_STYLE_TAB);

    // ////////////////////////
    // START OF GENERAL TAB ///
    // ////////////////////////
    CTabItem wGeneralTab = new CTabItem(wTabFolder, SWT.NONE);
    wGeneralTab.setFont(GuiResource.getInstance().getFontDefault());
    wGeneralTab.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Tab.General.Label"));

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

    FormLayout generalLayout = new FormLayout();
    generalLayout.marginWidth = 3;
    generalLayout.marginHeight = 3;
    wGeneralComp.setLayout(generalLayout);

    // ///////////////////////////////
    // START OF ConnectionGroup GROUP///
    // /////////////////////////////////
    Group wConnectionGroup = new Group(wGeneralComp, SWT.SHADOW_NONE);
    PropsUi.setLook(wConnectionGroup);
    wConnectionGroup.setText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.ConnectionGroup.Group.Label"));

    FormLayout connectionGroupLayout = new FormLayout();
    connectionGroupLayout.marginWidth = 10;
    connectionGroupLayout.marginHeight = 10;

    wConnectionGroup.setLayout(connectionGroupLayout);

    // Connection line
    wConnection = addConnectionLine(wConnectionGroup, wName, action.getConnection(), lsMod);

    // Schema name line
    // Schema name
    Label wlSchemaname = new Label(wConnectionGroup, SWT.RIGHT);
    wlSchemaname.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Schemaname.Label"));
    PropsUi.setLook(wlSchemaname);
    FormData fdlSchemaname = new FormData();
    fdlSchemaname.left = new FormAttachment(0, 0);
    fdlSchemaname.right = new FormAttachment(middle, -margin);
    fdlSchemaname.top = new FormAttachment(wConnection, margin);
    wlSchemaname.setLayoutData(fdlSchemaname);

    wSchemaname = new TextVar(variables, wConnectionGroup, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wSchemaname);
    wSchemaname.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Schemaname.Tooltip"));
    wSchemaname.addModifyListener(lsMod);
    FormData fdSchemaname = new FormData();
    fdSchemaname.left = new FormAttachment(middle, 0);
    fdSchemaname.top = new FormAttachment(wConnection, margin);
    fdSchemaname.right = new FormAttachment(100, 0);
    wSchemaname.setLayoutData(fdSchemaname);

    // Table name line
    Label wlTablename = new Label(wConnectionGroup, SWT.RIGHT);
    wlTablename.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Tablename.Label"));
    PropsUi.setLook(wlTablename);
    FormData fdlTablename = new FormData();
    fdlTablename.left = new FormAttachment(0, 0);
    fdlTablename.right = new FormAttachment(middle, -margin);
    fdlTablename.top = new FormAttachment(wSchemaname, margin);
    wlTablename.setLayoutData(fdlTablename);

    Button wbTable = new Button(wConnectionGroup, SWT.PUSH | SWT.CENTER);
    PropsUi.setLook(wbTable);
    wbTable.setText(BaseMessages.getString(PKG, CONST_SYSTEM_BUTTON_BROWSE));
    FormData fdbTable = new FormData();
    fdbTable.right = new FormAttachment(100, 0);
    fdbTable.top = new FormAttachment(wSchemaname, margin / 2);
    wbTable.setLayoutData(fdbTable);
    wbTable.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            getTableName();
          }
        });

    wTablename = new TextVar(variables, wConnectionGroup, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wTablename);
    wTablename.setToolTipText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Tablename.Tooltip"));
    wTablename.addModifyListener(lsMod);
    FormData fdTablename = new FormData();
    fdTablename.left = new FormAttachment(middle, 0);
    fdTablename.top = new FormAttachment(wSchemaname, margin);
    fdTablename.right = new FormAttachment(wbTable, -margin);
    wTablename.setLayoutData(fdTablename);

    // Truncate table
    // Truncate table
    Label wlTruncate = new Label(wConnectionGroup, SWT.RIGHT);
    wlTruncate.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Truncate.Label"));
    PropsUi.setLook(wlTruncate);
    FormData fdlTruncate = new FormData();
    fdlTruncate.left = new FormAttachment(0, 0);
    fdlTruncate.top = new FormAttachment(wTablename, margin);
    fdlTruncate.right = new FormAttachment(middle, -margin);
    wlTruncate.setLayoutData(fdlTruncate);
    wTruncate = new Button(wConnectionGroup, SWT.CHECK);
    PropsUi.setLook(wTruncate);
    wTruncate.setToolTipText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Truncate.Tooltip"));
    FormData fdTruncate = new FormData();
    fdTruncate.left = new FormAttachment(middle, 0);
    fdTruncate.top = new FormAttachment(wlTruncate, 0, SWT.CENTER);
    fdTruncate.right = new FormAttachment(100, 0);
    wTruncate.setLayoutData(fdTruncate);
    wTruncate.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            action.setChanged();
          }
        });

    FormData fdConnectionGroup = new FormData();
    fdConnectionGroup.left = new FormAttachment(0, margin);
    fdConnectionGroup.top = new FormAttachment(wName, margin);
    fdConnectionGroup.right = new FormAttachment(100, -margin);
    wConnectionGroup.setLayoutData(fdConnectionGroup);
    // ///////////////////////////////////////////////////////////
    // / END OF ConnectionGroup GROUP
    // ///////////////////////////////////////////////////////////

    // ////////////////////////
    // START OF DataFileGroup GROUP///
    // ///////////////////////////////
    Group wDataFileGroup = new Group(wGeneralComp, SWT.SHADOW_NONE);
    PropsUi.setLook(wDataFileGroup);
    wDataFileGroup.setText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.DataFileGroup.Group.Label"));

    FormLayout dataFileGroupLayout = new FormLayout();
    dataFileGroupLayout.marginWidth = 10;
    dataFileGroupLayout.marginHeight = 10;
    wDataFileGroup.setLayout(dataFileGroupLayout);

    // Filename line
    // File
    Label wlFilename = new Label(wDataFileGroup, SWT.RIGHT);
    wlFilename.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Filename.Label"));
    PropsUi.setLook(wlFilename);
    FormData fdlFilename = new FormData();
    fdlFilename.left = new FormAttachment(0, 0);
    fdlFilename.top = new FormAttachment(wConnectionGroup, margin);
    fdlFilename.right = new FormAttachment(middle, -margin);
    wlFilename.setLayoutData(fdlFilename);

    Button wbFilename = new Button(wDataFileGroup, SWT.PUSH | SWT.CENTER);
    PropsUi.setLook(wbFilename);
    wbFilename.setText(BaseMessages.getString(PKG, CONST_SYSTEM_BUTTON_BROWSE));
    FormData fdbFilename = new FormData();
    fdbFilename.right = new FormAttachment(100, 0);
    fdbFilename.top = new FormAttachment(wConnectionGroup, 0);
    wbFilename.setLayoutData(fdbFilename);

    wFilename = new TextVar(variables, wDataFileGroup, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wFilename);
    wFilename.setToolTipText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Filename.Tooltip"));
    wFilename.addModifyListener(lsMod);
    FormData fdFilename = new FormData();
    fdFilename.left = new FormAttachment(middle, 0);
    fdFilename.top = new FormAttachment(wConnectionGroup, margin);
    fdFilename.right = new FormAttachment(wbFilename, -margin);
    wFilename.setLayoutData(fdFilename);

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

    wbFilename.addListener(
        SWT.Selection,
        e ->
            BaseDialog.presentFileDialog(
                shell,
                wFilename,
                variables,
                new String[] {"*.txt", "*.csv", "*"},
                FILETYPES,
                true));

    // Data file type
    // Data file type
    Label wlDataFiletype = new Label(wDataFileGroup, SWT.RIGHT);
    wlDataFiletype.setText(BaseMessages.getString(PKG, "ActionMysqlBulkLoad.DataFiletype.Label"));
    PropsUi.setLook(wlDataFiletype);
    FormData fdlDataFiletype = new FormData();
    fdlDataFiletype.left = new FormAttachment(0, 0);
    fdlDataFiletype.right = new FormAttachment(middle, 0);
    fdlDataFiletype.top = new FormAttachment(wFilename, margin);
    wlDataFiletype.setLayoutData(fdlDataFiletype);
    wDataFiletype = new CCombo(wDataFileGroup, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER);
    wDataFiletype.add("char");
    wDataFiletype.add("native");
    wDataFiletype.add("widechar");
    wDataFiletype.add("widenative");
    wDataFiletype.select(0); // +1: starts at -1

    PropsUi.setLook(wDataFiletype);
    FormData fdDataFiletype = new FormData();
    fdDataFiletype.left = new FormAttachment(middle, 0);
    fdDataFiletype.top = new FormAttachment(wFilename, margin);
    fdDataFiletype.right = new FormAttachment(100, 0);
    wDataFiletype.setLayoutData(fdDataFiletype);
    wDataFiletype.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            setDataType();
          }
        });

    FormData fdDataFileGroup = new FormData();
    fdDataFileGroup.left = new FormAttachment(0, margin);
    fdDataFileGroup.top = new FormAttachment(wConnectionGroup, margin);
    fdDataFileGroup.right = new FormAttachment(100, -margin);
    wDataFileGroup.setLayoutData(fdDataFileGroup);
    // ///////////////////////////////////////////////////////////
    // / END OF DataFileGroup GROUP
    // ///////////////////////////////////////////////////////////

    // FieldTerminator
    wlFieldTerminator = new Label(wGeneralComp, SWT.RIGHT);
    wlFieldTerminator.setText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.FieldTerminator.Label"));
    PropsUi.setLook(wlFieldTerminator);
    FormData fdlFieldTerminator = new FormData();
    fdlFieldTerminator.left = new FormAttachment(0, 0);
    fdlFieldTerminator.right = new FormAttachment(middle, -margin);
    fdlFieldTerminator.top = new FormAttachment(wDataFileGroup, 3 * margin);
    wlFieldTerminator.setLayoutData(fdlFieldTerminator);

    wFieldTerminator = new TextVar(variables, wGeneralComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wFieldTerminator);
    wFieldTerminator.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.FieldTerminator.Tooltip"));
    wFieldTerminator.addModifyListener(lsMod);
    FormData fdFieldTerminator = new FormData();
    fdFieldTerminator.left = new FormAttachment(middle, 0);
    fdFieldTerminator.top = new FormAttachment(wDataFileGroup, 3 * margin);
    fdFieldTerminator.right = new FormAttachment(100, 0);
    wFieldTerminator.setLayoutData(fdFieldTerminator);

    // Line terminated
    // Line terminated
    Label wlLineterminated = new Label(wGeneralComp, SWT.RIGHT);
    wlLineterminated.setText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Lineterminated.Label"));
    PropsUi.setLook(wlLineterminated);
    FormData fdlLineterminated = new FormData();
    fdlLineterminated.left = new FormAttachment(0, 0);
    fdlLineterminated.right = new FormAttachment(middle, -margin);
    fdlLineterminated.top = new FormAttachment(wFieldTerminator, margin);
    wlLineterminated.setLayoutData(fdlLineterminated);

    wLineterminated = new TextVar(variables, wGeneralComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wLineterminated);
    wLineterminated.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Lineterminated.Tooltip"));
    wLineterminated.addModifyListener(lsMod);
    FormData fdLineterminated = new FormData();
    fdLineterminated.left = new FormAttachment(middle, 0);
    fdLineterminated.top = new FormAttachment(wFieldTerminator, margin);
    fdLineterminated.right = new FormAttachment(100, 0);
    wLineterminated.setLayoutData(fdLineterminated);

    FormData fdGeneralComp = new FormData();
    fdGeneralComp.left = new FormAttachment(0, 0);
    fdGeneralComp.top = new FormAttachment(0, 0);
    fdGeneralComp.right = new FormAttachment(100, 0);
    fdGeneralComp.bottom = new FormAttachment(500, -margin);
    wGeneralComp.setLayoutData(fdGeneralComp);

    wGeneralComp.layout();
    wGeneralTab.setControl(wGeneralComp);
    PropsUi.setLook(wGeneralComp);

    // ////////////////////////
    // END OF GENERAL TAB ///
    // ////////////////////////

    // ////////////////////////////////////
    // START OF Advanced TAB ///
    // ///////////////////////////////////

    CTabItem wAdvancedTab = new CTabItem(wTabFolder, SWT.NONE);
    wAdvancedTab.setFont(GuiResource.getInstance().getFontDefault());
    wAdvancedTab.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Tab.Advanced.Label"));

    FormLayout advancedLayout = new FormLayout();
    advancedLayout.marginWidth = 3;
    advancedLayout.marginHeight = 3;

    Composite wAdvancedComp = new Composite(wTabFolder, SWT.NONE);
    PropsUi.setLook(wAdvancedComp);
    wAdvancedComp.setLayout(advancedLayout);

    // CodePage
    // CodePage
    Label wlCodePage = new Label(wAdvancedComp, SWT.RIGHT);
    wlCodePage.setText(BaseMessages.getString(PKG, "ActionMysqlBulkLoad.CodePage.Label"));
    PropsUi.setLook(wlCodePage);
    FormData fdlCodePage = new FormData();
    fdlCodePage.left = new FormAttachment(0, 0);
    fdlCodePage.right = new FormAttachment(middle, -margin);
    fdlCodePage.top = new FormAttachment(0, margin);
    wlCodePage.setLayoutData(fdlCodePage);
    wCodePage = new CCombo(wAdvancedComp, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER);
    wCodePage.add("ACP");
    wCodePage.add("OEM");
    wCodePage.add("RAW");
    wCodePage.add(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.CodePage.Specific"));
    wCodePage.select(0); // +1: starts at -1

    PropsUi.setLook(wCodePage);
    FormData fdCodePage = new FormData();
    fdCodePage.left = new FormAttachment(middle, 0);
    fdCodePage.top = new FormAttachment(0, margin);
    fdCodePage.right = new FormAttachment(100, 0);
    wCodePage.setLayoutData(fdCodePage);
    wCodePage.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            setCodeType();
          }
        });

    // Specific CodePage
    wlSpecificCodePage = new Label(wAdvancedComp, SWT.RIGHT);
    wlSpecificCodePage.setText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.SpecificCodePage.Label"));
    PropsUi.setLook(wlSpecificCodePage);
    FormData fdlSpecificCodePage = new FormData();
    fdlSpecificCodePage.left = new FormAttachment(0, 0);
    fdlSpecificCodePage.right = new FormAttachment(middle, 0);
    fdlSpecificCodePage.top = new FormAttachment(wCodePage, margin);
    wlSpecificCodePage.setLayoutData(fdlSpecificCodePage);

    wSpecificCodePage = new TextVar(variables, wAdvancedComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wSpecificCodePage);
    wSpecificCodePage.addModifyListener(lsMod);
    FormData fdSpecificCodePage = new FormData();
    fdSpecificCodePage.left = new FormAttachment(middle, 0);
    fdSpecificCodePage.top = new FormAttachment(wCodePage, margin);
    fdSpecificCodePage.right = new FormAttachment(100, 0);
    wSpecificCodePage.setLayoutData(fdSpecificCodePage);

    // FormatFilename line
    Label wlFormatFilename = new Label(wAdvancedComp, SWT.RIGHT);
    wlFormatFilename.setText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.FormatFilename.Label"));
    PropsUi.setLook(wlFormatFilename);
    FormData fdlFormatFilename = new FormData();
    fdlFormatFilename.left = new FormAttachment(0, 0);
    fdlFormatFilename.top = new FormAttachment(wSpecificCodePage, margin);
    fdlFormatFilename.right = new FormAttachment(middle, -margin);
    wlFormatFilename.setLayoutData(fdlFormatFilename);

    Button wbFormatFilename = new Button(wAdvancedComp, SWT.PUSH | SWT.CENTER);
    PropsUi.setLook(wbFormatFilename);
    wbFormatFilename.setText(BaseMessages.getString(PKG, CONST_SYSTEM_BUTTON_BROWSE));
    FormData fdbFormatFilename = new FormData();
    fdbFormatFilename.right = new FormAttachment(100, 0);
    fdbFormatFilename.top = new FormAttachment(wSpecificCodePage, 0);
    wbFormatFilename.setLayoutData(fdbFormatFilename);

    wFormatFilename = new TextVar(variables, wAdvancedComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wFormatFilename);
    wFormatFilename.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.FormatFilename.Tooltip"));
    wFormatFilename.addModifyListener(lsMod);
    FormData fdFormatFilename = new FormData();
    fdFormatFilename.left = new FormAttachment(middle, 0);
    fdFormatFilename.top = new FormAttachment(wSpecificCodePage, margin);
    fdFormatFilename.right = new FormAttachment(wbFormatFilename, -margin);
    wFormatFilename.setLayoutData(fdFormatFilename);

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

    wbFormatFilename.addListener(
        SWT.Selection,
        e ->
            BaseDialog.presentFileDialog(
                shell,
                wFormatFilename,
                variables,
                new String[] {"*.txt", "*.csv", "*"},
                FILETYPES,
                true));

    // Fire Triggers?
    //
    Label wlFireTriggers = new Label(wAdvancedComp, SWT.RIGHT);
    wlFireTriggers.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.FireTriggers.Label"));
    PropsUi.setLook(wlFireTriggers);
    FormData fdlFireTriggers = new FormData();
    fdlFireTriggers.left = new FormAttachment(0, 0);
    fdlFireTriggers.top = new FormAttachment(wFormatFilename, margin);
    fdlFireTriggers.right = new FormAttachment(middle, -margin);
    wlFireTriggers.setLayoutData(fdlFireTriggers);
    wFireTriggers = new Button(wAdvancedComp, SWT.CHECK);
    PropsUi.setLook(wFireTriggers);
    wFireTriggers.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.FireTriggers.Tooltip"));
    FormData fdFireTriggers = new FormData();
    fdFireTriggers.left = new FormAttachment(middle, 0);
    fdFireTriggers.top = new FormAttachment(wlFireTriggers, 0, SWT.CENTER);
    fdFireTriggers.right = new FormAttachment(100, 0);
    wFireTriggers.setLayoutData(fdFireTriggers);
    wFireTriggers.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            action.setChanged();
          }
        });

    // CHECK CONSTRAINTS
    // Check Constaints
    Label wlCheckConstraints = new Label(wAdvancedComp, SWT.RIGHT);
    wlCheckConstraints.setText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.CheckConstraints.Label"));
    PropsUi.setLook(wlCheckConstraints);
    FormData fdlCheckConstraints = new FormData();
    fdlCheckConstraints.left = new FormAttachment(0, 0);
    fdlCheckConstraints.top = new FormAttachment(wlFireTriggers, 2 * margin);
    fdlCheckConstraints.right = new FormAttachment(middle, -margin);
    wlCheckConstraints.setLayoutData(fdlCheckConstraints);
    wCheckConstraints = new Button(wAdvancedComp, SWT.CHECK);
    PropsUi.setLook(wCheckConstraints);
    wCheckConstraints.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.CheckConstraints.Tooltip"));
    FormData fdCheckConstraints = new FormData();
    fdCheckConstraints.left = new FormAttachment(middle, 0);
    fdCheckConstraints.top = new FormAttachment(wlCheckConstraints, 0, SWT.CENTER);
    fdCheckConstraints.right = new FormAttachment(100, 0);
    wCheckConstraints.setLayoutData(fdCheckConstraints);
    wCheckConstraints.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            action.setChanged();
          }
        });

    // Keep Nulls
    // Keep nulls
    Label wlKeepNulls = new Label(wAdvancedComp, SWT.RIGHT);
    wlKeepNulls.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.KeepNulls.Label"));
    PropsUi.setLook(wlKeepNulls);
    FormData fdlKeepNulls = new FormData();
    fdlKeepNulls.left = new FormAttachment(0, 0);
    fdlKeepNulls.top = new FormAttachment(wlCheckConstraints, 2 * margin);
    fdlKeepNulls.right = new FormAttachment(middle, -margin);
    wlKeepNulls.setLayoutData(fdlKeepNulls);
    wKeepNulls = new Button(wAdvancedComp, SWT.CHECK);
    PropsUi.setLook(wKeepNulls);
    wKeepNulls.setToolTipText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.KeepNulls.Tooltip"));
    FormData fdKeepNulls = new FormData();
    fdKeepNulls.left = new FormAttachment(middle, 0);
    fdKeepNulls.top = new FormAttachment(wlKeepNulls, 0, SWT.CENTER);
    fdKeepNulls.right = new FormAttachment(100, 0);
    wKeepNulls.setLayoutData(fdKeepNulls);
    wKeepNulls.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            action.setChanged();
          }
        });

    // Keep Identity
    // Keep Identity?
    Label wlKeepIdentity = new Label(wAdvancedComp, SWT.RIGHT);
    wlKeepIdentity.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.KeepIdentity.Label"));
    PropsUi.setLook(wlKeepIdentity);
    FormData fdlKeepIdentity = new FormData();
    fdlKeepIdentity.left = new FormAttachment(0, 0);
    fdlKeepIdentity.top = new FormAttachment(wlKeepNulls, 2 * margin);
    fdlKeepIdentity.right = new FormAttachment(middle, -margin);
    wlKeepIdentity.setLayoutData(fdlKeepIdentity);
    wKeepIdentity = new Button(wAdvancedComp, SWT.CHECK);
    PropsUi.setLook(wKeepIdentity);
    wKeepIdentity.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.KeepIdentity.Tooltip"));
    FormData fdKeepIdentity = new FormData();
    fdKeepIdentity.left = new FormAttachment(middle, 0);
    fdKeepIdentity.top = new FormAttachment(wlKeepIdentity, 0, SWT.CENTER);
    fdKeepIdentity.right = new FormAttachment(100, 0);
    wKeepIdentity.setLayoutData(fdKeepIdentity);
    wKeepIdentity.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            action.setChanged();
          }
        });

    // TABBLOCK
    //
    Label wlTablock = new Label(wAdvancedComp, SWT.RIGHT);
    wlTablock.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Tablock.Label"));
    PropsUi.setLook(wlTablock);
    FormData fdlTablock = new FormData();
    fdlTablock.left = new FormAttachment(0, 0);
    fdlTablock.top = new FormAttachment(wlKeepIdentity, 2 * margin);
    fdlTablock.right = new FormAttachment(middle, -margin);
    wlTablock.setLayoutData(fdlTablock);
    wTablock = new Button(wAdvancedComp, SWT.CHECK);
    PropsUi.setLook(wTablock);
    wTablock.setToolTipText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.Tablock.Tooltip"));
    FormData fdTablock = new FormData();
    fdTablock.left = new FormAttachment(middle, 0);
    fdTablock.top = new FormAttachment(wlTablock, 0, SWT.CENTER);
    fdTablock.right = new FormAttachment(100, 0);
    wTablock.setLayoutData(fdTablock);
    wTablock.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            action.setChanged();
          }
        });

    // Start file
    // start file at line
    Label wlStartFile = new Label(wAdvancedComp, SWT.RIGHT);
    wlStartFile.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.StartFile.Label"));
    PropsUi.setLook(wlStartFile);
    FormData fdlStartFile = new FormData();
    fdlStartFile.left = new FormAttachment(0, 0);
    fdlStartFile.right = new FormAttachment(middle, 0);
    fdlStartFile.top = new FormAttachment(wlTablock, 2 * margin);
    wlStartFile.setLayoutData(fdlStartFile);

    wStartFile = new TextVar(variables, wAdvancedComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wStartFile);
    wStartFile.setToolTipText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.StartFile.Tooltip"));
    wStartFile.addModifyListener(lsMod);
    FormData fdStartFile = new FormData();
    fdStartFile.left = new FormAttachment(middle, 0);
    fdStartFile.top = new FormAttachment(wlTablock, 2 * margin);
    fdStartFile.right = new FormAttachment(100, 0);
    wStartFile.setLayoutData(fdStartFile);

    // End file
    // End file line
    Label wlEndFile = new Label(wAdvancedComp, SWT.RIGHT);
    wlEndFile.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.EndFile.Label"));
    PropsUi.setLook(wlEndFile);
    FormData fdlEndFile = new FormData();
    fdlEndFile.left = new FormAttachment(0, 0);
    fdlEndFile.right = new FormAttachment(middle, 0);
    fdlEndFile.top = new FormAttachment(wStartFile, margin);
    wlEndFile.setLayoutData(fdlEndFile);

    wEndFile = new TextVar(variables, wAdvancedComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wEndFile);
    wEndFile.setToolTipText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.EndFile.Tooltip"));
    wEndFile.addModifyListener(lsMod);
    FormData fdEndFile = new FormData();
    fdEndFile.left = new FormAttachment(middle, 0);
    fdEndFile.top = new FormAttachment(wStartFile, margin);
    fdEndFile.right = new FormAttachment(100, 0);
    wEndFile.setLayoutData(fdEndFile);

    // Specifies how the data in the data file is sorted
    // List Columns
    Label wlOrderBy = new Label(wAdvancedComp, SWT.RIGHT);
    wlOrderBy.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.OrderBy.Label"));
    PropsUi.setLook(wlOrderBy);
    FormData fdlOrderBy = new FormData();
    fdlOrderBy.left = new FormAttachment(0, 0);
    fdlOrderBy.right = new FormAttachment(middle, -margin);
    fdlOrderBy.top = new FormAttachment(wEndFile, margin);
    wlOrderBy.setLayoutData(fdlOrderBy);

    Button wbOrderBy = new Button(wAdvancedComp, SWT.PUSH | SWT.CENTER);
    PropsUi.setLook(wbOrderBy);
    wbOrderBy.setText(BaseMessages.getString(PKG, "System.Button.Edit"));
    FormData fdbListattribut = new FormData();
    fdbListattribut.right = new FormAttachment(100, 0);
    fdbListattribut.top = new FormAttachment(wEndFile, margin);
    wbOrderBy.setLayoutData(fdbListattribut);
    wbOrderBy.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            getListColumns();
          }
        });

    wOrderBy = new TextVar(variables, wAdvancedComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wOrderBy);
    wOrderBy.setToolTipText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.OrderBy.Tooltip"));
    wOrderBy.addModifyListener(lsMod);
    FormData fdOrderBy = new FormData();
    fdOrderBy.left = new FormAttachment(middle, 0);
    fdOrderBy.top = new FormAttachment(wEndFile, margin);
    fdOrderBy.right = new FormAttachment(wbOrderBy, -margin);
    wOrderBy.setLayoutData(fdOrderBy);

    // Order Direction
    // Order Direction
    Label wlOrderDirection = new Label(wAdvancedComp, SWT.RIGHT);
    wlOrderDirection.setText(
        BaseMessages.getString(PKG, "ActionMysqlBulkLoad.OrderDirection.Label"));
    PropsUi.setLook(wlOrderDirection);
    FormData fdlOrderDirection = new FormData();
    fdlOrderDirection.left = new FormAttachment(0, 0);
    fdlOrderDirection.right = new FormAttachment(middle, 0);
    fdlOrderDirection.top = new FormAttachment(wOrderBy, margin);
    wlOrderDirection.setLayoutData(fdlOrderDirection);
    wOrderDirection = new CCombo(wAdvancedComp, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER);
    wOrderDirection.add(BaseMessages.getString(PKG, "ActionMysqlBulkLoad.OrderDirectionAsc.Label"));
    wOrderDirection.add(
        BaseMessages.getString(PKG, "ActionMysqlBulkLoad.OrderDirectionDesc.Label"));
    wOrderDirection.select(0); // +1: starts at -1

    PropsUi.setLook(wOrderDirection);
    FormData fdOrderDirection = new FormData();
    fdOrderDirection.left = new FormAttachment(middle, 0);
    fdOrderDirection.top = new FormAttachment(wOrderBy, margin);
    fdOrderDirection.right = new FormAttachment(100, 0);
    wOrderDirection.setLayoutData(fdOrderDirection);

    // ErrorFilename line
    Label wlErrorFilename = new Label(wAdvancedComp, SWT.RIGHT);
    wlErrorFilename.setText(BaseMessages.getString(PKG, "ActionMysqlBulkLoad.ErrorFilename.Label"));
    PropsUi.setLook(wlErrorFilename);
    FormData fdlErrorFilename = new FormData();
    fdlErrorFilename.left = new FormAttachment(0, 0);
    fdlErrorFilename.top = new FormAttachment(wOrderDirection, margin);
    fdlErrorFilename.right = new FormAttachment(middle, -margin);
    wlErrorFilename.setLayoutData(fdlErrorFilename);

    Button wbErrorFilename = new Button(wAdvancedComp, SWT.PUSH | SWT.CENTER);
    PropsUi.setLook(wbErrorFilename);
    wbErrorFilename.setText(BaseMessages.getString(PKG, CONST_SYSTEM_BUTTON_BROWSE));
    FormData fdbErrorFilename = new FormData();
    fdbErrorFilename.right = new FormAttachment(100, 0);
    fdbErrorFilename.top = new FormAttachment(wOrderDirection, 0);
    wbErrorFilename.setLayoutData(fdbErrorFilename);

    wErrorFilename = new TextVar(variables, wAdvancedComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wErrorFilename);
    wErrorFilename.addModifyListener(lsMod);
    wErrorFilename.setToolTipText(
        BaseMessages.getString(PKG, "ActionMysqlBulkLoad.ErrorFilename.Tooltip"));
    FormData fdErrorFilename = new FormData();
    fdErrorFilename.left = new FormAttachment(middle, 0);
    fdErrorFilename.top = new FormAttachment(wOrderDirection, margin);
    fdErrorFilename.right = new FormAttachment(wbErrorFilename, -margin);
    wErrorFilename.setLayoutData(fdErrorFilename);

    // Whenever something changes, set the tooltip to the expanded version:
    wErrorFilename.addModifyListener(
        e -> wErrorFilename.setToolTipText(variables.resolve(wErrorFilename.getText())));
    wbErrorFilename.addListener(
        SWT.Selection, e -> BaseDialog.presentDirectoryDialog(shell, wErrorFilename, variables));

    // Add Date time
    // Add Datetime
    Label wlAddDateTime = new Label(wAdvancedComp, SWT.RIGHT);
    wlAddDateTime.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.AddDateTime.Label"));
    PropsUi.setLook(wlAddDateTime);
    FormData fdlAddDateTime = new FormData();
    fdlAddDateTime.left = new FormAttachment(0, 0);
    fdlAddDateTime.top = new FormAttachment(wErrorFilename, margin);
    fdlAddDateTime.right = new FormAttachment(middle, -margin);
    wlAddDateTime.setLayoutData(fdlAddDateTime);
    wAddDateTime = new Button(wAdvancedComp, SWT.CHECK);
    PropsUi.setLook(wAddDateTime);
    wAddDateTime.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.AddDateTime.Tooltip"));
    FormData fdAddDateTime = new FormData();
    fdAddDateTime.left = new FormAttachment(middle, 0);
    fdAddDateTime.top = new FormAttachment(wlAddDateTime, 0, SWT.CENTER);
    fdAddDateTime.right = new FormAttachment(100, 0);
    wAddDateTime.setLayoutData(fdAddDateTime);
    wAddDateTime.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            action.setChanged();
          }
        });

    // Maximum errors allowed
    // Maximum Errors allowed
    Label wlMaxErrors = new Label(wAdvancedComp, SWT.RIGHT);
    wlMaxErrors.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.MaxErrors.Label"));
    PropsUi.setLook(wlMaxErrors);
    FormData fdlMaxErrors = new FormData();
    fdlMaxErrors.left = new FormAttachment(0, 0);
    fdlMaxErrors.right = new FormAttachment(middle, -margin);
    fdlMaxErrors.top = new FormAttachment(wlAddDateTime, 2 * margin);
    wlMaxErrors.setLayoutData(fdlMaxErrors);

    wMaxErrors = new TextVar(variables, wAdvancedComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wMaxErrors);
    wlMaxErrors.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.MaxErrors.Tooltip"));
    wMaxErrors.addModifyListener(lsMod);
    FormData fdMaxErrors = new FormData();
    fdMaxErrors.left = new FormAttachment(middle, 0);
    fdMaxErrors.top = new FormAttachment(wlAddDateTime, 2 * margin);
    fdMaxErrors.right = new FormAttachment(100, 0);
    wMaxErrors.setLayoutData(fdMaxErrors);

    // Batch Size
    // Batch Size
    Label wlBatchSize = new Label(wAdvancedComp, SWT.RIGHT);
    wlBatchSize.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.BatchSize.Label"));
    PropsUi.setLook(wlBatchSize);
    FormData fdlBatchSize = new FormData();
    fdlBatchSize.left = new FormAttachment(0, 0);
    fdlBatchSize.right = new FormAttachment(middle, 0);
    fdlBatchSize.top = new FormAttachment(wMaxErrors, margin);
    wlBatchSize.setLayoutData(fdlBatchSize);

    wBatchSize = new TextVar(variables, wAdvancedComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wBatchSize);
    wBatchSize.setToolTipText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.BatchSize.Tooltip"));
    wBatchSize.addModifyListener(lsMod);
    FormData fdBatchSize = new FormData();
    fdBatchSize.left = new FormAttachment(middle, 0);
    fdBatchSize.top = new FormAttachment(wMaxErrors, margin);
    fdBatchSize.right = new FormAttachment(100, 0);
    wBatchSize.setLayoutData(fdBatchSize);

    // Rows per Batch
    // Kilobytes per Batch
    Label wlRowsPerBatch = new Label(wAdvancedComp, SWT.RIGHT);
    wlRowsPerBatch.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.RowsPerBatch.Label"));
    PropsUi.setLook(wlRowsPerBatch);
    FormData fdlRowsPerBatch = new FormData();
    fdlRowsPerBatch.left = new FormAttachment(0, 0);
    fdlRowsPerBatch.right = new FormAttachment(middle, 0);
    fdlRowsPerBatch.top = new FormAttachment(wBatchSize, margin);
    wlRowsPerBatch.setLayoutData(fdlRowsPerBatch);

    wRowsPerBatch = new TextVar(variables, wAdvancedComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    PropsUi.setLook(wRowsPerBatch);
    wRowsPerBatch.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.RowsPerBatch.Label"));
    wRowsPerBatch.addModifyListener(lsMod);
    FormData fdRowsPerBatch = new FormData();
    fdRowsPerBatch.left = new FormAttachment(middle, 0);
    fdRowsPerBatch.top = new FormAttachment(wBatchSize, margin);
    fdRowsPerBatch.right = new FormAttachment(100, 0);
    wRowsPerBatch.setLayoutData(fdRowsPerBatch);

    // fileresult grouping?
    // ////////////////////////
    // START OF FILE RESULT GROUP///
    // /
    // Add File to result
    Group wFileResult = new Group(wAdvancedComp, SWT.SHADOW_NONE);
    PropsUi.setLook(wFileResult);
    wFileResult.setText(BaseMessages.getString(PKG, "ActionMssqlBulkLoad.FileResult.Group.Label"));

    FormLayout groupLayout = new FormLayout();
    groupLayout.marginWidth = 10;
    groupLayout.marginHeight = 10;

    wFileResult.setLayout(groupLayout);

    // Add file to result
    Label wlAddFileToResult = new Label(wFileResult, SWT.RIGHT);
    wlAddFileToResult.setText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.AddFileToResult.Label"));
    PropsUi.setLook(wlAddFileToResult);
    FormData fdlAddFileToResult = new FormData();
    fdlAddFileToResult.left = new FormAttachment(0, 0);
    fdlAddFileToResult.top = new FormAttachment(wRowsPerBatch, margin);
    fdlAddFileToResult.right = new FormAttachment(middle, -margin);
    wlAddFileToResult.setLayoutData(fdlAddFileToResult);
    wAddFileToResult = new Button(wFileResult, SWT.CHECK);
    PropsUi.setLook(wAddFileToResult);
    wAddFileToResult.setToolTipText(
        BaseMessages.getString(PKG, "ActionMssqlBulkLoad.AddFileToResult.Tooltip"));
    FormData fdAddFileToResult = new FormData();
    fdAddFileToResult.left = new FormAttachment(middle, 0);
    fdAddFileToResult.top = new FormAttachment(wlAddFileToResult, 0, SWT.CENTER);
    fdAddFileToResult.right = new FormAttachment(100, 0);
    wAddFileToResult.setLayoutData(fdAddFileToResult);
    wAddFileToResult.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            action.setChanged();
          }
        });

    FormData fdFileResult = new FormData();
    fdFileResult.left = new FormAttachment(0, margin);
    fdFileResult.top = new FormAttachment(wRowsPerBatch, margin);
    fdFileResult.right = new FormAttachment(100, -margin);
    wFileResult.setLayoutData(fdFileResult);
    // ///////////////////////////////////////////////////////////
    // / END OF FilesResult GROUP
    // ///////////////////////////////////////////////////////////

    FormData fdAdvancedComp = new FormData();
    fdAdvancedComp.left = new FormAttachment(0, 0);
    fdAdvancedComp.top = new FormAttachment(0, 0);
    fdAdvancedComp.right = new FormAttachment(100, 0);
    fdAdvancedComp.bottom = new FormAttachment(500, -margin);
    wAdvancedComp.setLayoutData(fdAdvancedComp);

    wAdvancedComp.layout();
    wAdvancedTab.setControl(wAdvancedComp);
    PropsUi.setLook(wAdvancedComp);

    // ////////////////////////
    // END OF Advanced TAB ///
    // ////////////////////////

    FormData fdTabFolder = new FormData();
    fdTabFolder.left = new FormAttachment(0, 0);
    fdTabFolder.top = new FormAttachment(wName, margin);
    fdTabFolder.right = new FormAttachment(100, 0);
    fdTabFolder.bottom = new FormAttachment(wOk, -2 * margin);
    wTabFolder.setLayoutData(fdTabFolder);

    getData();
    setDataType();
    setCodeType();

    wTabFolder.setSelection(0);

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

    return action;
  }