org.pentaho.di.ui.job.entries.trans.JobEntryBaseDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.pentaho.di.ui.job.entries.trans.JobEntryBaseDialog.java

Source

/*! ******************************************************************************
 *
 * Pentaho Data Integration
 *
 * Copyright (C) 2002-2017 by Pentaho : http://www.pentaho.com
 *
 *******************************************************************************
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 ******************************************************************************/

package org.pentaho.di.ui.job.entries.trans;

import org.apache.commons.vfs2.FileObject;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
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.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.pentaho.di.cluster.SlaveServer;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.ObjectLocationSpecificationMethod;
import org.pentaho.di.core.Props;
import org.pentaho.di.core.logging.LogLevel;
import org.pentaho.di.core.vfs.KettleVFS;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.job.entries.trans.JobEntryTrans;
import org.pentaho.di.job.entry.JobEntryBase;
import org.pentaho.di.job.entry.JobEntryInterface;
import org.pentaho.di.repository.ObjectId;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.ui.core.widget.ColumnInfo;
import org.pentaho.di.ui.core.widget.ColumnsResizer;
import org.pentaho.di.ui.core.widget.ComboVar;
import org.pentaho.di.ui.core.widget.TableView;
import org.pentaho.di.ui.core.widget.TextVar;
import org.pentaho.di.ui.job.entry.JobEntryDialog;

import java.io.IOException;

/**
 * Created by bmorrise on 1/6/17.
 */
public abstract class JobEntryBaseDialog extends JobEntryDialog {

    public static Class<?> PKG = JobEntryTrans.class;

    protected Label wlPath;
    protected TextVar wPath;

    protected Button wbBrowse;

    protected Composite wLocal;

    protected Composite wServer;

    protected Composite wClustered;

    protected Button wbLocal;

    protected Button wbServer;

    protected Label vSpacer;

    protected Label wlDescription;

    protected Group gLogFile;

    protected Composite typeComposite;

    protected Composite wOptions;

    protected Group gEnvironmentType;

    protected Label wlName;
    protected Text wName;
    protected FormData fdlName, fdName;

    protected TextVar wDirectory;

    protected Button wSetLogfile;

    protected Label wlLogfile;
    protected TextVar wLogfile;

    protected Button wbLogFilename;
    protected FormData fdbLogFilename;

    protected Label wlCreateParentFolder;
    protected Button wCreateParentFolder;
    protected FormData fdlCreateParentFolder, fdCreateParentFolder;

    protected Label wlLogext;
    protected TextVar wLogext;

    protected Label wlAddDate;
    protected Button wAddDate;

    protected Label wlAddTime;
    protected Button wAddTime;

    protected Label wlLoglevel;
    protected CCombo wLoglevel;

    protected Label wlPrevious;
    protected Button wPrevious;

    protected Button wPrevToParams;

    protected Button wEveryRow;

    protected Button wClearRows;

    protected Button wClearFiles;

    protected Button wCluster;

    protected Button wLogRemoteWork;

    protected TableView wFields;

    protected TableView wParameters;

    protected ComboVar wSlaveServer;

    protected Button wWaitingToFinish;

    protected Button wFollowingAbortRemotely;

    protected Group gExecution;

    protected Button wOK, wCancel;

    protected Listener lsOK, lsCancel;

    protected Shell shell;

    protected SelectionAdapter lsDef;

    protected boolean backupChanged;

    protected Button wAppendLogfile;

    protected Button wPassParams;

    protected Button wbGetParams;

    protected Display display;

    protected Text wByReference;

    protected FormData fdgExecution;

    protected ObjectId referenceObjectId;
    protected ObjectLocationSpecificationMethod specificationMethod;

    public JobEntryBaseDialog(Shell parent, JobEntryInterface jobEntryInt, Repository rep, JobMeta jobMeta) {
        super(parent, jobEntryInt, rep, jobMeta);
    }

    protected void createElements() {

        ModifyListener lsMod = new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                getJobEntry().setChanged();
            }
        };

        FormLayout formLayout = new FormLayout();
        formLayout.marginWidth = 15;
        formLayout.marginHeight = 15;

        shell.setLayout(formLayout);

        Label wicon = new Label(shell, SWT.RIGHT);
        wicon.setImage(getImage());
        FormData fdlicon = new FormData();
        fdlicon.top = new FormAttachment(0, 0);
        fdlicon.right = new FormAttachment(100, 0);
        wicon.setLayoutData(fdlicon);
        props.setLook(wicon);

        wlName = new Label(shell, SWT.LEFT);
        props.setLook(wlName);
        wlName.setText(BaseMessages.getString(PKG, "JobTrans.JobStep.Label"));
        fdlName = new FormData();
        fdlName.left = new FormAttachment(0, 0);
        fdlName.top = new FormAttachment(0, 0);
        wlName.setLayoutData(fdlName);

        wName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
        props.setLook(wName);
        fdName = new FormData();
        fdName.width = 250;
        fdName.top = new FormAttachment(wlName, 5);
        fdName.left = new FormAttachment(0, 0);
        wName.setLayoutData(fdName);

        Label spacer = new Label(shell, SWT.HORIZONTAL | SWT.SEPARATOR);
        FormData fdSpacer = new FormData();
        fdSpacer.height = 1;
        fdSpacer.left = new FormAttachment(0, 0);
        fdSpacer.top = new FormAttachment(wName, 15);
        fdSpacer.right = new FormAttachment(100, 0);
        spacer.setLayoutData(fdSpacer);

        wlPath = new Label(shell, SWT.LEFT);
        props.setLook(wlPath);
        FormData fdlTransformation = new FormData();
        fdlTransformation.left = new FormAttachment(0, 0);
        fdlTransformation.top = new FormAttachment(spacer, 20);
        fdlTransformation.right = new FormAttachment(50, 0);
        wlPath.setLayoutData(fdlTransformation);

        wPath = new TextVar(jobMeta, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
        props.setLook(wPath);
        FormData fdTransformation = new FormData();
        fdTransformation.left = new FormAttachment(0, 0);
        fdTransformation.top = new FormAttachment(wlPath, 5);
        fdTransformation.right = new FormAttachment(50, 0);
        wPath.setLayoutData(fdTransformation);

        wbBrowse = new Button(shell, SWT.PUSH);
        props.setLook(wbBrowse);
        wbBrowse.setText(BaseMessages.getString(PKG, "JobTrans.Browse.Label"));
        FormData fdBrowse = new FormData();
        fdBrowse.left = new FormAttachment(wPath, 5);
        fdBrowse.top = new FormAttachment(wlPath, 5);
        wbBrowse.setLayoutData(fdBrowse);

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

        // Options Tab Start
        CTabItem wOptionsTab = new CTabItem(wTabFolder, SWT.NONE);
        wOptionsTab.setText(BaseMessages.getString(PKG, "JobTrans.Options.Group.Label"));

        wOptions = new Composite(wTabFolder, SWT.SHADOW_NONE);
        props.setLook(wOptions);

        FormLayout specLayout = new FormLayout();
        specLayout.marginWidth = 15;
        specLayout.marginHeight = 15;
        wOptions.setLayout(specLayout);

        gEnvironmentType = new Group(wOptions, SWT.SHADOW_ETCHED_IN);
        props.setLook(gEnvironmentType);
        gEnvironmentType.setText(BaseMessages.getString(PKG, "JobTrans.EnvironmentType.Group.Label"));
        FormLayout gEnvironmentTypeLayout = new FormLayout();
        gEnvironmentTypeLayout.marginWidth = 15;
        gEnvironmentTypeLayout.marginHeight = 15;
        gEnvironmentType.setLayout(gEnvironmentTypeLayout);

        typeComposite = new Composite(gEnvironmentType, SWT.NONE);
        props.setLook(typeComposite);
        FormLayout fdCompositeLayout = new FormLayout();
        fdCompositeLayout.marginWidth = 0;
        fdCompositeLayout.marginHeight = 0;
        typeComposite.setLayout(fdCompositeLayout);

        wbLocal = new Button(typeComposite, SWT.RADIO);
        props.setLook(wbLocal);
        wbLocal.setText(BaseMessages.getString(PKG, "JobTrans.Local.Option.Label"));
        FormData fdbLocal = new FormData();
        fdbLocal.left = new FormAttachment(0, 0);
        fdbLocal.top = new FormAttachment(0, 0);
        wbLocal.setLayoutData(fdbLocal);
        wbLocal.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                setRadioButtons();
            }
        });

        wbServer = new Button(typeComposite, SWT.RADIO);
        props.setLook(wbServer);
        wbServer.setText(BaseMessages.getString(PKG, "JobTrans.Server.Option.Label"));
        FormData fdbServer = new FormData();
        fdbServer.left = new FormAttachment(0, 0);
        fdbServer.top = new FormAttachment(wbLocal, 10);
        wbServer.setLayoutData(fdbServer);
        wbServer.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                setRadioButtons();
            }
        });

        vSpacer = new Label(gEnvironmentType, SWT.VERTICAL | SWT.SEPARATOR);
        FormData fdvSpacer = new FormData();
        fdvSpacer.width = 1;
        fdvSpacer.left = new FormAttachment(typeComposite, 30);
        fdvSpacer.top = new FormAttachment(0, 0);
        fdvSpacer.bottom = new FormAttachment(100, 0);
        vSpacer.setLayoutData(fdvSpacer);

        // Start Local Section
        wLocal = new Composite(gEnvironmentType, SWT.NONE);
        props.setLook(wLocal);
        wLocal.setVisible(false);
        FormLayout flwLocal = new FormLayout();
        flwLocal.marginWidth = 0;
        flwLocal.marginHeight = 0;
        wLocal.setLayout(flwLocal);

        FormData fdwLocal = new FormData();
        fdwLocal.left = new FormAttachment(vSpacer, 30);
        fdwLocal.top = new FormAttachment(0, 0);
        wLocal.setLayoutData(fdwLocal);

        wlDescription = new Label(wLocal, SWT.LEFT);
        props.setLook(wlDescription);
        FormData fdlDescription = new FormData();
        fdlDescription.top = new FormAttachment(0, 0);
        fdlDescription.left = new FormAttachment(0, 0);
        wlDescription.setLayoutData(fdlDescription);
        // End Local Section

        // Start Server Section
        wServer = new Composite(gEnvironmentType, SWT.NONE);
        props.setLook(wServer);
        wServer.setVisible(false);
        FormLayout flwServer = new FormLayout();
        flwServer.marginWidth = 0;
        flwServer.marginHeight = 0;
        wServer.setLayout(flwServer);

        FormData fdwServer = new FormData();
        fdwServer.left = new FormAttachment(vSpacer, 30);
        fdwServer.top = new FormAttachment(0, 0);
        wServer.setLayoutData(fdwServer);

        Label wlServer = new Label(wServer, SWT.LEFT);
        props.setLook(wlServer);
        wlServer.setText(BaseMessages.getString(PKG, "JobTrans.Server.Label"));
        FormData fdlServer = new FormData();
        fdlServer.left = new FormAttachment(0, 0);
        fdlServer.top = new FormAttachment(0, 0);
        wlServer.setLayoutData(fdlServer);

        wSlaveServer = new ComboVar(jobMeta, wServer, SWT.SINGLE | SWT.BORDER);
        wSlaveServer.setItems(SlaveServer.getSlaveServerNames(jobMeta.getSlaveServers()));
        wSlaveServer.setToolTipText(BaseMessages.getString(PKG, "JobTrans.SlaveServer.ToolTip"));
        props.setLook(wSlaveServer);
        FormData fdwcServer = new FormData();
        fdwcServer.width = 200;
        fdwcServer.left = new FormAttachment(0, 0);
        fdwcServer.top = new FormAttachment(wlServer, 5);
        wSlaveServer.setLayoutData(fdwcServer);
        // End Server Section

        FormData fdgEnvironmentType = new FormData();
        fdgEnvironmentType.top = new FormAttachment(0, 0);
        fdgEnvironmentType.left = new FormAttachment(0, 0);
        fdgEnvironmentType.right = new FormAttachment(100, 0);
        gEnvironmentType.setLayoutData(fdgEnvironmentType);

        gExecution = new Group(wOptions, SWT.SHADOW_ETCHED_IN);
        props.setLook(gExecution);
        gExecution.setText(BaseMessages.getString(PKG, "JobTrans.Execution.Group.Label"));
        FormLayout gExecutionLayout = new FormLayout();
        gExecutionLayout.marginWidth = 15;
        gExecutionLayout.marginHeight = 15;
        gExecution.setLayout(gExecutionLayout);

        fdgExecution = new FormData();
        fdgExecution.top = new FormAttachment(gEnvironmentType, 10);
        fdgExecution.left = new FormAttachment(0, 0);
        fdgExecution.right = new FormAttachment(100, 0);
        gExecution.setLayoutData(fdgExecution);

        wEveryRow = new Button(gExecution, SWT.CHECK);
        props.setLook(wEveryRow);
        wEveryRow.setText(BaseMessages.getString(PKG, "JobTrans.ExecForEveryInputRow.Label"));
        FormData fdbExecute = new FormData();
        fdbExecute.left = new FormAttachment(0, 0);
        fdbExecute.top = new FormAttachment(0, 0);
        wEveryRow.setLayoutData(fdbExecute);

        wOptionsTab.setControl(wOptions);

        FormData fdOptions = new FormData();
        fdOptions.left = new FormAttachment(0, 0);
        fdOptions.top = new FormAttachment(0, 0);
        fdOptions.right = new FormAttachment(100, 0);
        fdOptions.bottom = new FormAttachment(100, 0);
        wOptions.setLayoutData(fdOptions);
        // Options Tab End

        // Logging Tab Start
        CTabItem wLoggingTab = new CTabItem(wTabFolder, SWT.NONE);
        wLoggingTab.setText(BaseMessages.getString(PKG, "JobTrans.LogSettings.Group.Label"));

        Composite wLogging = new Composite(wTabFolder, SWT.SHADOW_NONE);
        props.setLook(wLogging);

        FormLayout loggingLayout = new FormLayout();
        loggingLayout.marginWidth = 15;
        loggingLayout.marginHeight = 15;
        wLogging.setLayout(loggingLayout);

        wSetLogfile = new Button(wLogging, SWT.CHECK);
        props.setLook(wSetLogfile);
        wSetLogfile.setText(BaseMessages.getString(PKG, "JobTrans.Specify.Logfile.Label"));
        FormData fdSpecifyLogFile = new FormData();
        fdSpecifyLogFile.left = new FormAttachment(0, 0);
        fdSpecifyLogFile.top = new FormAttachment(0, 0);
        wSetLogfile.setLayoutData(fdSpecifyLogFile);

        gLogFile = new Group(wLogging, SWT.SHADOW_ETCHED_IN);
        props.setLook(gLogFile);
        gLogFile.setText(BaseMessages.getString(PKG, "JobTrans.Logfile.Group.Label"));
        FormLayout gLogFileLayout = new FormLayout();
        gLogFileLayout.marginWidth = 15;
        gLogFileLayout.marginHeight = 15;
        gLogFile.setLayout(gLogFileLayout);

        FormData fdgLogFile = new FormData();
        fdgLogFile.top = new FormAttachment(wSetLogfile, 10);
        fdgLogFile.left = new FormAttachment(0, 0);
        fdgLogFile.right = new FormAttachment(100, 0);
        gLogFile.setLayoutData(fdgLogFile);

        wlLogfile = new Label(gLogFile, SWT.LEFT);
        props.setLook(wlLogfile);
        wlLogfile.setText(BaseMessages.getString(PKG, "JobTrans.NameOfLogfile.Label"));
        FormData fdlName = new FormData();
        fdlName.left = new FormAttachment(0, 0);
        fdlName.top = new FormAttachment(0, 0);
        wlLogfile.setLayoutData(fdlName);

        wLogfile = new TextVar(jobMeta, gLogFile, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
        props.setLook(wLogfile);
        FormData fdName = new FormData();
        fdName.width = 250;
        fdName.left = new FormAttachment(0, 0);
        fdName.top = new FormAttachment(wlLogfile, 5);
        wLogfile.setLayoutData(fdName);

        wbLogFilename = new Button(gLogFile, SWT.PUSH | SWT.CENTER);
        props.setLook(wbLogFilename);
        wbLogFilename.setText(BaseMessages.getString(PKG, "JobTrans.Browse.Label"));
        fdbLogFilename = new FormData();
        fdbLogFilename.top = new FormAttachment(wlLogfile, 5);
        fdbLogFilename.left = new FormAttachment(wLogfile, 5);
        wbLogFilename.setLayoutData(fdbLogFilename);

        wlLogext = new Label(gLogFile, SWT.LEFT);
        props.setLook(wlLogext);
        wlLogext.setText(BaseMessages.getString(PKG, "JobTrans.LogfileExtension.Label"));
        FormData fdlExtension = new FormData();
        fdlExtension.left = new FormAttachment(0, 0);
        fdlExtension.top = new FormAttachment(wLogfile, 10);
        wlLogext.setLayoutData(fdlExtension);

        wLogext = new TextVar(jobMeta, gLogFile, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
        props.setLook(wLogext);
        FormData fdExtension = new FormData();
        fdExtension.width = 250;
        fdExtension.left = new FormAttachment(0, 0);
        fdExtension.top = new FormAttachment(wlLogext, 5);
        wLogext.setLayoutData(fdExtension);

        wlLoglevel = new Label(gLogFile, SWT.LEFT);
        props.setLook(wlLoglevel);
        wlLoglevel.setText(BaseMessages.getString(PKG, "JobTrans.Loglevel.Label"));
        FormData fdlLogLevel = new FormData();
        fdlLogLevel.left = new FormAttachment(0, 0);
        fdlLogLevel.top = new FormAttachment(wLogext, 10);
        wlLoglevel.setLayoutData(fdlLogLevel);

        wLoglevel = new CCombo(gLogFile, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
        wLoglevel.setItems(LogLevel.getLogLevelDescriptions());
        props.setLook(wLoglevel);
        FormData fdLogLevel = new FormData();
        fdLogLevel.width = 250;
        fdLogLevel.left = new FormAttachment(0, 0);
        fdLogLevel.top = new FormAttachment(wlLoglevel, 5);
        wLoglevel.setLayoutData(fdLogLevel);

        wAppendLogfile = new Button(gLogFile, SWT.CHECK);
        props.setLook(wAppendLogfile);
        wAppendLogfile.setText(BaseMessages.getString(PKG, "JobTrans.Append.Logfile.Label"));
        FormData fdLogFile = new FormData();
        fdLogFile.left = new FormAttachment(0, 0);
        fdLogFile.top = new FormAttachment(wLoglevel, 10);
        wAppendLogfile.setLayoutData(fdLogFile);

        wCreateParentFolder = new Button(gLogFile, SWT.CHECK);
        props.setLook(wCreateParentFolder);
        wCreateParentFolder.setText(BaseMessages.getString(PKG, "JobTrans.Logfile.CreateParentFolder.Label"));
        FormData fdCreateParent = new FormData();
        fdCreateParent.left = new FormAttachment(0, 0);
        fdCreateParent.top = new FormAttachment(wAppendLogfile, 10);
        wCreateParentFolder.setLayoutData(fdCreateParent);

        wAddDate = new Button(gLogFile, SWT.CHECK);
        props.setLook(wAddDate);
        wAddDate.setText(BaseMessages.getString(PKG, "JobTrans.Logfile.IncludeDate.Label"));
        FormData fdIncludeDate = new FormData();
        fdIncludeDate.left = new FormAttachment(0, 0);
        fdIncludeDate.top = new FormAttachment(wCreateParentFolder, 10);
        wAddDate.setLayoutData(fdIncludeDate);

        wAddTime = new Button(gLogFile, SWT.CHECK);
        props.setLook(wAddTime);
        wAddTime.setText(BaseMessages.getString(PKG, "JobTrans.Logfile.IncludeTime.Label"));
        FormData fdIncludeTime = new FormData();
        fdIncludeTime.left = new FormAttachment(0, 0);
        fdIncludeTime.top = new FormAttachment(wAddDate, 10);
        wAddTime.setLayoutData(fdIncludeTime);

        wSetLogfile.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent selectionEvent) {
                setActive();
            }
        });

        wLoggingTab.setControl(wLogging);

        FormData fdLogging = new FormData();
        fdLogging.left = new FormAttachment(0, 0);
        fdLogging.top = new FormAttachment(0, 0);
        fdLogging.right = new FormAttachment(100, 0);
        fdLogging.bottom = new FormAttachment(100, 0);
        wOptions.setLayoutData(fdLogging);
        // Logging Tab End

        CTabItem wArgumentTab = new CTabItem(wTabFolder, SWT.NONE);
        wArgumentTab.setText(BaseMessages.getString(PKG, "JobTrans.Fields.Arguments.Label"));

        FormLayout fieldLayout = new FormLayout();
        fieldLayout.marginWidth = 15;
        fieldLayout.marginHeight = 15;

        Composite wFieldComp = new Composite(wTabFolder, SWT.NONE);
        props.setLook(wFieldComp);
        wFieldComp.setLayout(fieldLayout);

        wPrevious = new Button(wFieldComp, SWT.CHECK);
        props.setLook(wPrevious);
        wPrevious.setSelection(getArgFromPrev());
        wPrevious.setText(BaseMessages.getString(PKG, "JobTrans.Previous.Label"));
        FormData fdCopyResults = new FormData();
        fdCopyResults.top = new FormAttachment(0, 0);
        fdCopyResults.left = new FormAttachment(0, 0);
        wPrevious.setLayoutData(fdCopyResults);
        wPrevious.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                wFields.setEnabled(!getArgFromPrev());
            }
        });

        final int FieldsCols = 1;
        int rows = getArguments() == null ? 1 : (getArguments().length == 0 ? 0 : getArguments().length);
        final int FieldsRows = rows;

        ColumnInfo[] colinf = new ColumnInfo[FieldsCols];
        colinf[0] = new ColumnInfo(BaseMessages.getString(PKG, "JobTrans.Arguments.Argument.Label"),
                ColumnInfo.COLUMN_TYPE_TEXT, false);
        colinf[0].setUsingVariables(true);

        wFields = new TableView(jobMeta, wFieldComp,
                SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI | SWT.NO_SCROLL | SWT.V_SCROLL, colinf, FieldsRows,
                false, lsMod, props, false);

        FormData fdFields = new FormData();
        fdFields.left = new FormAttachment(0, 0);
        fdFields.top = new FormAttachment(wPrevious, 15);
        fdFields.right = new FormAttachment(100, 0);
        fdFields.bottom = new FormAttachment(100, 0);
        wFields.setLayoutData(fdFields);
        wFields.getTable().addListener(SWT.Resize, new ColumnsResizer(0, 100));

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

        wFieldComp.layout();
        wArgumentTab.setControl(wFieldComp);

        CTabItem wParametersTab = new CTabItem(wTabFolder, SWT.NONE);
        wParametersTab.setText(BaseMessages.getString(PKG, "JobTrans.Fields.Parameters.Label"));

        fieldLayout = new FormLayout();
        fieldLayout.marginWidth = 15;
        fieldLayout.marginHeight = 15;

        Composite wParameterComp = new Composite(wTabFolder, SWT.NONE);
        props.setLook(wParameterComp);
        wParameterComp.setLayout(fieldLayout);

        wPrevToParams = new Button(wParameterComp, SWT.CHECK);
        props.setLook(wPrevToParams);
        wPrevToParams.setText(BaseMessages.getString(PKG, "JobTrans.PrevToParams.Label"));
        FormData fdCopyResultsParams = new FormData();
        fdCopyResultsParams.left = new FormAttachment(0, 0);
        fdCopyResultsParams.top = new FormAttachment(0, 0);
        wPrevToParams.setLayoutData(fdCopyResultsParams);
        wPrevToParams.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                getJobEntry().setChanged();
            }
        });

        wPassParams = new Button(wParameterComp, SWT.CHECK);
        props.setLook(wPassParams);
        FormData fdPassParams = new FormData();
        fdPassParams.left = new FormAttachment(0, 0);
        fdPassParams.top = new FormAttachment(wPrevToParams, 10);
        wPassParams.setLayoutData(fdPassParams);

        wbGetParams = new Button(wParameterComp, SWT.PUSH);
        wbGetParams.setText(BaseMessages.getString(PKG, "JobTrans.GetParameters.Button.Label"));
        FormData fdGetParams = new FormData();
        fdGetParams.bottom = new FormAttachment(100, 0);
        fdGetParams.right = new FormAttachment(100, 0);
        wbGetParams.setLayoutData(fdGetParams);

        final int parameterRows = getParamters() != null ? getParamters().length : 0;

        colinf = new ColumnInfo[] {
                new ColumnInfo(BaseMessages.getString(PKG, "JobTrans.Parameters.Parameter.Label"),
                        ColumnInfo.COLUMN_TYPE_TEXT, false),
                new ColumnInfo(BaseMessages.getString(PKG, "JobTrans.Parameters.ColumnName.Label"),
                        ColumnInfo.COLUMN_TYPE_TEXT, false),
                new ColumnInfo(BaseMessages.getString(PKG, "JobTrans.Parameters.Value.Label"),
                        ColumnInfo.COLUMN_TYPE_TEXT, false), };
        colinf[2].setUsingVariables(true);

        wParameters = new TableView(jobMeta, wParameterComp, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI, colinf,
                parameterRows, false, lsMod, props, false);
        props.setLook(wParameters);
        FormData fdParameters = new FormData();
        fdParameters.left = new FormAttachment(0, 0);
        fdParameters.top = new FormAttachment(wPassParams, 10);
        fdParameters.right = new FormAttachment(100);
        fdParameters.bottom = new FormAttachment(wbGetParams, -10);
        wParameters.setLayoutData(fdParameters);
        wParameters.getTable().addListener(SWT.Resize, new ColumnsResizer(0, 33, 33, 33));

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

        wParameterComp.layout();
        wParametersTab.setControl(wParameterComp);

        wTabFolder.setSelection(0);

        wCancel = new Button(shell, SWT.PUSH);
        wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
        FormData fdCancel = new FormData();
        fdCancel.right = new FormAttachment(100, 0);
        fdCancel.bottom = new FormAttachment(100, 0);
        wCancel.setLayoutData(fdCancel);

        wOK = new Button(shell, SWT.PUSH);
        wOK.setText(BaseMessages.getString(PKG, "System.Button.OK"));
        FormData fdOk = new FormData();
        fdOk.right = new FormAttachment(wCancel, -5);
        fdOk.bottom = new FormAttachment(100, 0);
        wOK.setLayoutData(fdOk);

        Label hSpacer = new Label(shell, SWT.HORIZONTAL | SWT.SEPARATOR);
        FormData fdhSpacer = new FormData();
        fdhSpacer.height = 1;
        fdhSpacer.left = new FormAttachment(0, 0);
        fdhSpacer.bottom = new FormAttachment(wCancel, -15);
        fdhSpacer.right = new FormAttachment(100, 0);
        hSpacer.setLayoutData(fdhSpacer);

        FormData fdTabFolder = new FormData();
        fdTabFolder.left = new FormAttachment(0, 0);
        fdTabFolder.top = new FormAttachment(wPath, 20);
        fdTabFolder.right = new FormAttachment(100, 0);
        fdTabFolder.bottom = new FormAttachment(hSpacer, -15);
        wTabFolder.setLayoutData(fdTabFolder);

        // Add listeners
        lsCancel = new Listener() {
            public void handleEvent(Event e) {
                cancel();
            }
        };
        lsOK = new Listener() {
            public void handleEvent(Event e) {
                ok();
            }
        };

        wOK.addListener(SWT.Selection, lsOK);
        wCancel.addListener(SWT.Selection, lsCancel);

        lsDef = new SelectionAdapter() {
            public void widgetDefaultSelected(SelectionEvent e) {
                ok();
            }
        };
        wName.addSelectionListener(lsDef);
        wPath.addSelectionListener(lsDef);
    }

    protected void selectLogFile(String[] filters) {
        FileDialog dialog = new FileDialog(shell, SWT.SAVE);
        dialog.setFilterExtensions(new String[] { "*.txt", "*.log", "*" });
        dialog.setFilterNames(filters);

        if (wLogfile.getText() != null) {
            dialog.setFileName(jobMeta.environmentSubstitute(wLogfile.getText()));
        }

        if (dialog.open() != null) {
            wLogfile.setText(dialog.getFilterPath() + Const.FILE_SEPARATOR + dialog.getFileName());
            String filename = dialog.getFilterPath() + Const.FILE_SEPARATOR + dialog.getFileName();
            FileObject file = null;
            try {
                file = KettleVFS.getFileObject(filename);
                // Set file extension ..
                wLogext.setText(file.getName().getExtension());
                // Set filename without extension ...
                wLogfile.setText(wLogfile.getText().substring(0,
                        wLogfile.getText().length() - wLogext.getText().length() - 1));
            } catch (Exception ex) {
                // Ignore
            }
            if (file != null) {
                try {
                    file.close();
                } catch (IOException ex) { /* Ignore */
                }
            }
        }
    }

    protected String getPath(String path) {
        String parentPath = this.jobMeta.getRepositoryDirectory().getPath();
        if (path.startsWith(parentPath)) {
            path = path.replace(parentPath, "${" + Const.INTERNAL_VARIABLE_ENTRY_CURRENT_DIRECTORY + "}");
        }
        return path;
    }

    protected void setRadioButtons() {
        wLocal.setVisible(wbLocal.getSelection());
        wServer.setVisible(wbServer.getSelection());
    }

    protected void setActive() {

        gLogFile.setEnabled(wSetLogfile.getSelection());

        wbLogFilename.setEnabled(wSetLogfile.getSelection());

        wlLogfile.setEnabled(wSetLogfile.getSelection());
        wLogfile.setEnabled(wSetLogfile.getSelection());

        wlLogext.setEnabled(wSetLogfile.getSelection());
        wLogext.setEnabled(wSetLogfile.getSelection());

        wCreateParentFolder.setEnabled(wSetLogfile.getSelection());

        wAddDate.setEnabled(wSetLogfile.getSelection());

        wAddTime.setEnabled(wSetLogfile.getSelection());

        wlLoglevel.setEnabled(wSetLogfile.getSelection());
        wLoglevel.setEnabled(wSetLogfile.getSelection());

        wAppendLogfile.setEnabled(wSetLogfile.getSelection());

        wServer.setVisible(wbServer.getSelection());
    }

    protected abstract void ok();

    protected abstract void cancel();

    protected abstract JobEntryBase getJobEntry();

    protected abstract Image getImage();

    protected abstract boolean getArgFromPrev();

    protected abstract String[] getArguments();

    protected abstract String[] getParamters();

}