/*! ******************************************************************************
*
* 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();
}