/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2016 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.shell;
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.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
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.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.util.Utils;
import org.pentaho.di.core.Props;
import org.pentaho.di.core.logging.LogLevel;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.job.entries.shell.JobEntryShell;
import org.pentaho.di.job.entry.JobEntryDialogInterface;
import org.pentaho.di.job.entry.JobEntryInterface;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.ui.core.gui.WindowProperty;
import org.pentaho.di.ui.core.widget.ColumnInfo;
import org.pentaho.di.ui.core.widget.TableView;
import org.pentaho.di.ui.core.widget.TextVar;
import org.pentaho.di.ui.job.dialog.JobDialog;
import org.pentaho.di.ui.job.entry.JobEntryDialog;
import org.pentaho.di.ui.trans.step.BaseStepDialog;
/**
* Dialog that allows you to enter the settings for a Shell job entry.
*
* @author Matt
* @since 19-06-2003
*
*/
public class JobEntryShellDialog extends JobEntryDialog implements JobEntryDialogInterface {
private static Class<?> PKG = JobEntryShell.class; // for i18n purposes, needed by Translator2!!
private static final String[] FILEFORMATS = new String[] {
BaseMessages.getString( PKG, "JobShell.Fileformat.Scripts" ),
BaseMessages.getString( PKG, "JobShell.Fileformat.All" ) };
private Label wlName;
private Text wName;
private FormData fdlName, fdName;
private Label wlFilename;
private Button wbFilename;
private TextVar wFilename;
private FormData fdlFilename, fdbFilename, fdFilename;
private Label wlWorkDirectory;
private TextVar wWorkDirectory;
private FormData fdlWorkDirectory, fdWorkDirectory;
private Group wLogging;
private FormData fdLogging;
private Label wlSetLogfile;
private Button wSetLogfile;
private FormData fdlSetLogfile, fdSetLogfile;
private Label wlLogfile;
private TextVar wLogfile;
private FormData fdlLogfile, fdLogfile;
private Label wlLogext;
private TextVar wLogext;
private FormData fdlLogext, fdLogext;
private Label wlAddDate;
private Button wAddDate;
private FormData fdlAddDate, fdAddDate;
private Label wlAddTime;
private Button wAddTime;
private FormData fdlAddTime, fdAddTime;
private Label wlLoglevel;
private CCombo wLoglevel;
private FormData fdlLoglevel, fdLoglevel;
private Label wlPrevious;
private Button wPrevious;
private FormData fdlPrevious, fdPrevious;
private Label wlEveryRow;
private Button wEveryRow;
private FormData fdlEveryRow, fdEveryRow;
private Label wlFields;
private TableView wFields;
private FormData fdlFields, fdFields;
private Button wOK, wCancel;
private Listener lsOK, lsCancel;
private Shell shell;
private SelectionAdapter lsDef;
private JobEntryShell jobEntry;
private boolean backupChanged, backupLogfile, backupDate, backupTime;
private Label wlAppendLogfile;
private Button wAppendLogfile, wInsertScript;
private FormData fdlAppendLogfile, fdAppendLogfile;
private Display display;
private CTabFolder wTabFolder;
private Composite wGeneralComp, wScriptComp;
private CTabItem wGeneralTab, wScriptTab;
private FormData fdTabFolder, fdGeneralComp, fdScriptComp;
private Label wlScript, wlInsertScript;
private Text wScript;
private FormData fdScript, fdInsertScript, fdlInsertScript;
public JobEntryShellDialog( Shell parent, JobEntryInterface jobEntryInt, Repository rep, JobMeta jobMeta ) {
super( parent, jobEntryInt, rep, jobMeta );
jobEntry = (JobEntryShell) jobEntryInt;
}
public JobEntryInterface open() {
Shell parent = getParent();
display = parent.getDisplay();
shell = new Shell( parent, props.getJobsDialogStyle() );
props.setLook( shell );
JobDialog.setShellImage( shell, jobEntry );
ModifyListener lsMod = new ModifyListener() {
public void modifyText( ModifyEvent e ) {
jobEntry.setChanged();
}
};
backupChanged = jobEntry.hasChanged();
backupLogfile = jobEntry.setLogfile;
backupDate = jobEntry.addDate;
backupTime = jobEntry.addTime;
FormLayout formLayout = new FormLayout();
formLayout.marginWidth = Const.FORM_MARGIN;
formLayout.marginHeight = Const.FORM_MARGIN;
shell.setLayout( formLayout );
shell.setText( BaseMessages.getString( PKG, "JobShell.Title" ) );
int middle = props.getMiddlePct();
int margin = Const.MARGIN;
// Name line
wlName = new Label( shell, SWT.RIGHT );
wlName.setText( BaseMessages.getString( PKG, "JobShell.Name.Label" ) );
props.setLook( wlName );
fdlName = new FormData();
fdlName.left = new FormAttachment( 0, 0 );
fdlName.top = new FormAttachment( 0, 0 );
fdlName.right = new FormAttachment( middle, 0 );
wlName.setLayoutData( fdlName );
wName = new Text( shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wName );
wName.addModifyListener( lsMod );
fdName = new FormData();
fdName.top = new FormAttachment( 0, 0 );
fdName.left = new FormAttachment( middle, 0 );
fdName.right = new FormAttachment( 100, 0 );
wName.setLayoutData( fdName );
wTabFolder = new CTabFolder( shell, SWT.BORDER );
props.setLook( wTabFolder, Props.WIDGET_STYLE_TAB );
// ////////////////////////
// START OF GENERAL TAB ///
// ////////////////////////
wGeneralTab = new CTabItem( wTabFolder, SWT.NONE );
wGeneralTab.setText( BaseMessages.getString( PKG, "JobShell.Tab.General.Label" ) );
wGeneralComp = new Composite( wTabFolder, SWT.NONE );
props.setLook( wGeneralComp );
FormLayout generalLayout = new FormLayout();
generalLayout.marginWidth = 3;
generalLayout.marginHeight = 3;
wGeneralComp.setLayout( generalLayout );
// Insert Script?
wlInsertScript = new Label( wGeneralComp, SWT.RIGHT );
wlInsertScript.setText( BaseMessages.getString( PKG, "JobShell.InsertScript.Label" ) );
props.setLook( wlInsertScript );
fdlInsertScript = new FormData();
fdlInsertScript.left = new FormAttachment( 0, 0 );
fdlInsertScript.top = new FormAttachment( wName, margin );
fdlInsertScript.right = new FormAttachment( middle, -margin );
wlInsertScript.setLayoutData( fdlInsertScript );
wInsertScript = new Button( wGeneralComp, SWT.CHECK );
wInsertScript.setToolTipText( BaseMessages.getString( PKG, "JobShell.InsertScript.Tooltip" ) );
props.setLook( wInsertScript );
fdInsertScript = new FormData();
fdInsertScript.left = new FormAttachment( middle, 0 );
fdInsertScript.top = new FormAttachment( wName, margin );
fdInsertScript.right = new FormAttachment( 100, 0 );
wInsertScript.setLayoutData( fdInsertScript );
wInsertScript.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
ActiveInsertScript();
jobEntry.setChanged();
}
} );
// /////////////////////
// Filename line
// /////////////////////
wlFilename = new Label( wGeneralComp, SWT.RIGHT );
wlFilename.setText( BaseMessages.getString( PKG, "JobShell.Filename.Label" ) );
props.setLook( wlFilename );
fdlFilename = new FormData();
fdlFilename.left = new FormAttachment( 0, 0 );
fdlFilename.top = new FormAttachment( wInsertScript, margin );
fdlFilename.right = new FormAttachment( middle, 0 );
wlFilename.setLayoutData( fdlFilename );
wbFilename = new Button( wGeneralComp, SWT.PUSH | SWT.CENTER );
props.setLook( wbFilename );
wbFilename.setText( BaseMessages.getString( PKG, "System.Button.Browse" ) );
fdbFilename = new FormData();
fdbFilename.top = new FormAttachment( wInsertScript, margin );
fdbFilename.right = new FormAttachment( 100, 0 );
wbFilename.setLayoutData( fdbFilename );
wFilename = new TextVar( jobMeta, wGeneralComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wFilename );
wFilename.addModifyListener( lsMod );
fdFilename = new FormData();
fdFilename.left = new FormAttachment( middle, 0 );
fdFilename.right = new FormAttachment( wbFilename, -margin );
fdFilename.top = new FormAttachment( wInsertScript, margin );
wFilename.setLayoutData( fdFilename );
// /////////////////////
// Working dir line
// /////////////////////
wlWorkDirectory = new Label( wGeneralComp, SWT.RIGHT );
wlWorkDirectory.setText( BaseMessages.getString( PKG, "JobShell.WorkingDirectory.Label" ) );
props.setLook( wlWorkDirectory );
fdlWorkDirectory = new FormData();
fdlWorkDirectory.left = new FormAttachment( 0, 0 );
fdlWorkDirectory.top = new FormAttachment( wFilename, margin );
fdlWorkDirectory.right = new FormAttachment( middle, 0 );
wlWorkDirectory.setLayoutData( fdlWorkDirectory );
wWorkDirectory = new TextVar( jobMeta, wGeneralComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wWorkDirectory );
wWorkDirectory.addModifyListener( lsMod );
fdWorkDirectory = new FormData();
fdWorkDirectory.left = new FormAttachment( middle, 0 );
fdWorkDirectory.right = new FormAttachment( wbFilename, -margin );
fdWorkDirectory.top = new FormAttachment( wFilename, margin );
wWorkDirectory.setLayoutData( fdWorkDirectory );
// ////////////////////////
// START OF LOGGING GROUP
//
wLogging = new Group( wGeneralComp, SWT.SHADOW_NONE );
props.setLook( wLogging );
wLogging.setText( BaseMessages.getString( PKG, "JobShell.LogSettings.Group.Label" ) );
FormLayout groupLayout = new FormLayout();
groupLayout.marginWidth = 10;
groupLayout.marginHeight = 10;
wLogging.setLayout( groupLayout );
// Set the logfile?
wlSetLogfile = new Label( wLogging, SWT.RIGHT );
wlSetLogfile.setText( BaseMessages.getString( PKG, "JobShell.Specify.Logfile.Label" ) );
props.setLook( wlSetLogfile );
fdlSetLogfile = new FormData();
fdlSetLogfile.left = new FormAttachment( 0, 0 );
fdlSetLogfile.top = new FormAttachment( 0, margin );
fdlSetLogfile.right = new FormAttachment( middle, -margin );
wlSetLogfile.setLayoutData( fdlSetLogfile );
wSetLogfile = new Button( wLogging, SWT.CHECK );
props.setLook( wSetLogfile );
fdSetLogfile = new FormData();
fdSetLogfile.left = new FormAttachment( middle, 0 );
fdSetLogfile.top = new FormAttachment( 0, margin );
fdSetLogfile.right = new FormAttachment( 100, 0 );
wSetLogfile.setLayoutData( fdSetLogfile );
wSetLogfile.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
jobEntry.setLogfile = !jobEntry.setLogfile;
jobEntry.setChanged();
setActive();
}
} );
// Append logfile?
wlAppendLogfile = new Label( wLogging, SWT.RIGHT );
wlAppendLogfile.setText( BaseMessages.getString( PKG, "JobShell.Append.Logfile.Label" ) );
props.setLook( wlAppendLogfile );
fdlAppendLogfile = new FormData();
fdlAppendLogfile.left = new FormAttachment( 0, 0 );
fdlAppendLogfile.top = new FormAttachment( wSetLogfile, margin );
fdlAppendLogfile.right = new FormAttachment( middle, -margin );
wlAppendLogfile.setLayoutData( fdlAppendLogfile );
wAppendLogfile = new Button( wLogging, SWT.CHECK );
wAppendLogfile.setToolTipText( BaseMessages.getString( PKG, "JobShell.Append.Logfile.Tooltip" ) );
props.setLook( wAppendLogfile );
fdAppendLogfile = new FormData();
fdAppendLogfile.left = new FormAttachment( middle, 0 );
fdAppendLogfile.top = new FormAttachment( wSetLogfile, margin );
fdAppendLogfile.right = new FormAttachment( 100, 0 );
wAppendLogfile.setLayoutData( fdAppendLogfile );
wAppendLogfile.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
}
} );
// Set the logfile path + base-name
wlLogfile = new Label( wLogging, SWT.RIGHT );
wlLogfile.setText( BaseMessages.getString( PKG, "JobShell.NameOfLogfile.Label" ) );
props.setLook( wlLogfile );
fdlLogfile = new FormData();
fdlLogfile.left = new FormAttachment( 0, 0 );
fdlLogfile.top = new FormAttachment( wAppendLogfile, margin );
fdlLogfile.right = new FormAttachment( middle, 0 );
wlLogfile.setLayoutData( fdlLogfile );
wLogfile = new TextVar( jobMeta, wLogging, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wLogfile.setText( "" );
props.setLook( wLogfile );
fdLogfile = new FormData();
fdLogfile.left = new FormAttachment( middle, 0 );
fdLogfile.top = new FormAttachment( wAppendLogfile, margin );
fdLogfile.right = new FormAttachment( 100, 0 );
wLogfile.setLayoutData( fdLogfile );
// Set the logfile filename extention
wlLogext = new Label( wLogging, SWT.RIGHT );
wlLogext.setText( BaseMessages.getString( PKG, "JobShell.LogfileExtension.Label" ) );
props.setLook( wlLogext );
fdlLogext = new FormData();
fdlLogext.left = new FormAttachment( 0, 0 );
fdlLogext.top = new FormAttachment( wLogfile, margin );
fdlLogext.right = new FormAttachment( middle, 0 );
wlLogext.setLayoutData( fdlLogext );
wLogext = new TextVar( jobMeta, wLogging, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wLogext.setText( "" );
props.setLook( wLogext );
fdLogext = new FormData();
fdLogext.left = new FormAttachment( middle, 0 );
fdLogext.top = new FormAttachment( wLogfile, margin );
fdLogext.right = new FormAttachment( 100, 0 );
wLogext.setLayoutData( fdLogext );
// Add date to logfile name?
wlAddDate = new Label( wLogging, SWT.RIGHT );
wlAddDate.setText( BaseMessages.getString( PKG, "JobShell.Logfile.IncludeDate.Label" ) );
props.setLook( wlAddDate );
fdlAddDate = new FormData();
fdlAddDate.left = new FormAttachment( 0, 0 );
fdlAddDate.top = new FormAttachment( wLogext, margin );
fdlAddDate.right = new FormAttachment( middle, -margin );
wlAddDate.setLayoutData( fdlAddDate );
wAddDate = new Button( wLogging, SWT.CHECK );
props.setLook( wAddDate );
fdAddDate = new FormData();
fdAddDate.left = new FormAttachment( middle, 0 );
fdAddDate.top = new FormAttachment( wLogext, margin );
fdAddDate.right = new FormAttachment( 100, 0 );
wAddDate.setLayoutData( fdAddDate );
wAddDate.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
jobEntry.addDate = !jobEntry.addDate;
jobEntry.setChanged();
}
} );
// Add time to logfile name?
wlAddTime = new Label( wLogging, SWT.RIGHT );
wlAddTime.setText( BaseMessages.getString( PKG, "JobShell.Logfile.IncludeTime.Label" ) );
props.setLook( wlAddTime );
fdlAddTime = new FormData();
fdlAddTime.left = new FormAttachment( 0, 0 );
fdlAddTime.top = new FormAttachment( wAddDate, margin );
fdlAddTime.right = new FormAttachment( middle, -margin );
wlAddTime.setLayoutData( fdlAddTime );
wAddTime = new Button( wLogging, SWT.CHECK );
props.setLook( wAddTime );
fdAddTime = new FormData();
fdAddTime.left = new FormAttachment( middle, 0 );
fdAddTime.top = new FormAttachment( wAddDate, margin );
fdAddTime.right = new FormAttachment( 100, 0 );
wAddTime.setLayoutData( fdAddTime );
wAddTime.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
jobEntry.addTime = !jobEntry.addTime;
jobEntry.setChanged();
}
} );
wlLoglevel = new Label( wLogging, SWT.RIGHT );
wlLoglevel.setText( BaseMessages.getString( PKG, "JobShell.Loglevel.Label" ) );
props.setLook( wlLoglevel );
fdlLoglevel = new FormData();
fdlLoglevel.left = new FormAttachment( 0, 0 );
fdlLoglevel.right = new FormAttachment( middle, -margin );
fdlLoglevel.top = new FormAttachment( wAddTime, margin );
wlLoglevel.setLayoutData( fdlLoglevel );
wLoglevel = new CCombo( wLogging, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER );
wLoglevel.setItems( LogLevel.getLogLevelDescriptions() );
props.setLook( wLoglevel );
fdLoglevel = new FormData();
fdLoglevel.left = new FormAttachment( middle, 0 );
fdLoglevel.top = new FormAttachment( wAddTime, margin );
fdLoglevel.right = new FormAttachment( 100, 0 );
wLoglevel.setLayoutData( fdLoglevel );
fdLogging = new FormData();
fdLogging.left = new FormAttachment( 0, margin );
fdLogging.top = new FormAttachment( wWorkDirectory, margin );
fdLogging.right = new FormAttachment( 100, -margin );
wLogging.setLayoutData( fdLogging );
// ///////////////////////////////////////////////////////////
// / END OF LOGGING GROUP
// ///////////////////////////////////////////////////////////
wlPrevious = new Label( wGeneralComp, SWT.RIGHT );
wlPrevious.setText( BaseMessages.getString( PKG, "JobShell.Previous.Label" ) );
props.setLook( wlPrevious );
fdlPrevious = new FormData();
fdlPrevious.left = new FormAttachment( 0, 0 );
fdlPrevious.top = new FormAttachment( wLogging, margin * 3 );
fdlPrevious.right = new FormAttachment( middle, -margin );
wlPrevious.setLayoutData( fdlPrevious );
wPrevious = new Button( wGeneralComp, SWT.CHECK );
props.setLook( wPrevious );
wPrevious.setSelection( jobEntry.argFromPrevious );
wPrevious.setToolTipText( BaseMessages.getString( PKG, "JobShell.Previous.Tooltip" ) );
fdPrevious = new FormData();
fdPrevious.left = new FormAttachment( middle, 0 );
fdPrevious.top = new FormAttachment( wLogging, margin * 3 );
fdPrevious.right = new FormAttachment( 100, 0 );
wPrevious.setLayoutData( fdPrevious );
wPrevious.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
jobEntry.argFromPrevious = !jobEntry.argFromPrevious;
jobEntry.setChanged();
wlFields.setEnabled( !jobEntry.argFromPrevious );
wFields.setEnabled( !jobEntry.argFromPrevious );
}
} );
wlEveryRow = new Label( wGeneralComp, SWT.RIGHT );
wlEveryRow.setText( BaseMessages.getString( PKG, "JobShell.ExecForEveryInputRow.Label" ) );
props.setLook( wlEveryRow );
fdlEveryRow = new FormData();
fdlEveryRow.left = new FormAttachment( 0, 0 );
fdlEveryRow.top = new FormAttachment( wPrevious, margin * 3 );
fdlEveryRow.right = new FormAttachment( middle, -margin );
wlEveryRow.setLayoutData( fdlEveryRow );
wEveryRow = new Button( wGeneralComp, SWT.CHECK );
props.setLook( wEveryRow );
wEveryRow.setSelection( jobEntry.execPerRow );
wEveryRow.setToolTipText( BaseMessages.getString( PKG, "JobShell.ExecForEveryInputRow.Tooltip" ) );
fdEveryRow = new FormData();
fdEveryRow.left = new FormAttachment( middle, 0 );
fdEveryRow.top = new FormAttachment( wPrevious, margin * 3 );
fdEveryRow.right = new FormAttachment( 100, 0 );
wEveryRow.setLayoutData( fdEveryRow );
wEveryRow.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
jobEntry.execPerRow = !jobEntry.execPerRow;
jobEntry.setChanged();
}
} );
wlFields = new Label( wGeneralComp, SWT.NONE );
wlFields.setText( BaseMessages.getString( PKG, "JobShell.Fields.Label" ) );
props.setLook( wlFields );
fdlFields = new FormData();
fdlFields.left = new FormAttachment( 0, 0 );
fdlFields.top = new FormAttachment( wEveryRow, margin );
wlFields.setLayoutData( fdlFields );
final int FieldsCols = 1;
int rows = jobEntry.arguments == null ? 1 : ( jobEntry.arguments.length == 0 ? 0 : jobEntry.arguments.length );
final int FieldsRows = rows;
ColumnInfo[] colinf = new ColumnInfo[FieldsCols];
colinf[0] =
new ColumnInfo(
BaseMessages.getString( PKG, "JobShell.Fields.Argument.Label" ), ColumnInfo.COLUMN_TYPE_TEXT, false );
colinf[0].setUsingVariables( true );
wFields =
new TableView(
jobMeta, wGeneralComp, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI, colinf, FieldsRows, lsMod, props );
fdFields = new FormData();
fdFields.left = new FormAttachment( 0, 0 );
fdFields.top = new FormAttachment( wlFields, margin );
fdFields.right = new FormAttachment( 100, 0 );
fdFields.bottom = new FormAttachment( 100, -margin );
wFields.setLayoutData( fdFields );
wlFields.setEnabled( !jobEntry.argFromPrevious );
wFields.setEnabled( !jobEntry.argFromPrevious );
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 );
props.setLook( wGeneralComp );
// ///////////////////////////////////////////////////////////
// / END OF GENERAL TAB
// ///////////////////////////////////////////////////////////
// ////////////////////////////////////
// START OF Script TAB ///
// ///////////////////////////////////
wScriptTab = new CTabItem( wTabFolder, SWT.NONE );
wScriptTab.setText( BaseMessages.getString( PKG, "JobShell.Tab.Script.Label" ) );
FormLayout ScriptLayout = new FormLayout();
ScriptLayout.marginWidth = 3;
ScriptLayout.marginHeight = 3;
wScriptComp = new Composite( wTabFolder, SWT.NONE );
props.setLook( wScriptComp );
wScriptComp.setLayout( ScriptLayout );
// Script line
wScript = new Text( wScriptComp, SWT.MULTI | SWT.LEFT | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL );
props.setLook( wScript );
wScript.addModifyListener( lsMod );
fdScript = new FormData();
fdScript.left = new FormAttachment( 0, margin );
fdScript.top = new FormAttachment( wlScript, margin );
fdScript.right = new FormAttachment( 100, 0 );
fdScript.bottom = new FormAttachment( 100, -margin );
wScript.setLayoutData( fdScript );
fdScriptComp = new FormData();
fdScriptComp.left = new FormAttachment( 0, 0 );
fdScriptComp.top = new FormAttachment( 0, 0 );
fdScriptComp.right = new FormAttachment( 100, 0 );
fdScriptComp.bottom = new FormAttachment( 100, 0 );
wScriptComp.setLayoutData( wScriptComp );
wScriptComp.layout();
wScriptTab.setControl( wScriptComp );
// ///////////////////////////////////////////////////////////
// / END OF Script TAB
// ///////////////////////////////////////////////////////////
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( 100, -50 );
wTabFolder.setLayoutData( fdTabFolder );
// Some buttons
wOK = new Button( shell, SWT.PUSH );
wOK.setText( BaseMessages.getString( PKG, "System.Button.OK" ) );
wCancel = new Button( shell, SWT.PUSH );
wCancel.setText( BaseMessages.getString( PKG, "System.Button.Cancel" ) );
BaseStepDialog.positionBottomButtons( shell, new Button[] { wOK, wCancel }, margin, wTabFolder );
// 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 );
wFilename.addSelectionListener( lsDef );
wbFilename.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
FileDialog dialog = new FileDialog( shell, SWT.OPEN );
dialog.setFilterExtensions( new String[] { "*.sh;*.bat;*.BAT", "*;*.*" } );
dialog.setFilterNames( FILEFORMATS );
if ( wFilename.getText() != null ) {
dialog.setFileName( wFilename.getText() );
}
if ( dialog.open() != null ) {
wFilename.setText( dialog.getFilterPath() + Const.FILE_SEPARATOR + dialog.getFileName() );
wName.setText( dialog.getFileName() );
}
}
} );
// Detect [X] or ALT-F4 or something that kills this window...
shell.addShellListener( new ShellAdapter() {
public void shellClosed( ShellEvent e ) {
cancel();
}
} );
getData();
setActive();
ActiveInsertScript();
wTabFolder.setSelection( 0 );
BaseStepDialog.setSize( shell );
shell.open();
props.setDialogSize( shell, "JobShellDialogSize" );
while ( !shell.isDisposed() ) {
if ( !display.readAndDispatch() ) {
display.sleep();
}
}
return jobEntry;
}
private void ActiveInsertScript() {
wFilename.setEnabled( !wInsertScript.getSelection() );
wlFilename.setEnabled( !wInsertScript.getSelection() );
wbFilename.setEnabled( !wInsertScript.getSelection() );
wScript.setEnabled( wInsertScript.getSelection() );
// We can not use arguments !!!
if ( wInsertScript.getSelection() ) {
wFields.clearAll( false );
wFields.setEnabled( false );
wlFields.setEnabled( false );
wPrevious.setSelection( false );
wPrevious.setEnabled( false );
wlPrevious.setEnabled( false );
wEveryRow.setSelection( false );
wEveryRow.setEnabled( false );
wlEveryRow.setEnabled( false );
} else {
wFields.setEnabled( true );
wlFields.setEnabled( true );
wPrevious.setEnabled( true );
wlPrevious.setEnabled( true );
wEveryRow.setEnabled( true );
wlEveryRow.setEnabled( true );
}
}
public void dispose() {
WindowProperty winprop = new WindowProperty( shell );
props.setScreen( winprop );
shell.dispose();
}
public void setActive() {
wlLogfile.setEnabled( jobEntry.setLogfile );
wLogfile.setEnabled( jobEntry.setLogfile );
wlLogext.setEnabled( jobEntry.setLogfile );
wLogext.setEnabled( jobEntry.setLogfile );
wlAddDate.setEnabled( jobEntry.setLogfile );
wAddDate.setEnabled( jobEntry.setLogfile );
wlAddTime.setEnabled( jobEntry.setLogfile );
wAddTime.setEnabled( jobEntry.setLogfile );
wlLoglevel.setEnabled( jobEntry.setLogfile );
wLoglevel.setEnabled( jobEntry.setLogfile );
wlAppendLogfile.setEnabled( jobEntry.setLogfile );
wAppendLogfile.setEnabled( jobEntry.setLogfile );
if ( jobEntry.setLogfile ) {
wLoglevel.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) );
} else {
wLoglevel.setForeground( display.getSystemColor( SWT.COLOR_GRAY ) );
}
}
public void getData() {
wName.setText( Const.nullToEmpty( jobEntry.getName() ) );
wFilename.setText( Const.nullToEmpty( jobEntry.getFilename() ) );
wWorkDirectory.setText( Const.nullToEmpty( jobEntry.getWorkDirectory() ) );
if ( jobEntry.arguments != null ) {
for ( int i = 0; i < jobEntry.arguments.length; i++ ) {
TableItem ti = wFields.table.getItem( i );
if ( jobEntry.arguments[i] != null ) {
ti.setText( 1, jobEntry.arguments[i] );
}
}
wFields.setRowNums();
wFields.optWidth( true );
}
wPrevious.setSelection( jobEntry.argFromPrevious );
wEveryRow.setSelection( jobEntry.execPerRow );
wSetLogfile.setSelection( jobEntry.setLogfile );
wLogfile.setText( Const.nullToEmpty( jobEntry.logfile ) );
wLogext.setText( Const.nullToEmpty( jobEntry.logext ) );
wAddDate.setSelection( jobEntry.addDate );
wAddTime.setSelection( jobEntry.addTime );
wAppendLogfile.setSelection( jobEntry.setAppendLogfile );
if ( jobEntry.logFileLevel != null ) {
wLoglevel.select( jobEntry.logFileLevel.getLevel() );
}
wInsertScript.setSelection( jobEntry.insertScript );
wScript.setText( Const.nullToEmpty( jobEntry.getScript() ) );
wName.selectAll();
wName.setFocus();
}
private void cancel() {
jobEntry.setChanged( backupChanged );
jobEntry.setLogfile = backupLogfile;
jobEntry.addDate = backupDate;
jobEntry.addTime = backupTime;
jobEntry = null;
dispose();
}
private void ok() {
if ( Utils.isEmpty( wName.getText() ) ) {
MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_ERROR );
mb.setText( BaseMessages.getString( PKG, "System.StepJobEntryNameMissing.Title" ) );
mb.setMessage( BaseMessages.getString( PKG, "System.JobEntryNameMissing.Msg" ) );
mb.open();
return;
}
jobEntry.setFileName( wFilename.getText() );
jobEntry.setName( wName.getText() );
jobEntry.setWorkDirectory( wWorkDirectory.getText() );
int nritems = wFields.nrNonEmpty();
int nr = 0;
for ( int i = 0; i < nritems; i++ ) {
String arg = wFields.getNonEmpty( i ).getText( 1 );
if ( arg != null && arg.length() != 0 ) {
nr++;
}
}
jobEntry.arguments = new String[nr];
nr = 0;
for ( int i = 0; i < nritems; i++ ) {
String arg = wFields.getNonEmpty( i ).getText( 1 );
if ( arg != null && arg.length() != 0 ) {
jobEntry.arguments[nr] = arg;
nr++;
}
}
jobEntry.logfile = wLogfile.getText();
jobEntry.logext = wLogext.getText();
if ( wLoglevel.getSelectionIndex() >= 0 ) {
jobEntry.logFileLevel = LogLevel.values()[wLoglevel.getSelectionIndex()];
} else {
jobEntry.logFileLevel = LogLevel.BASIC;
}
jobEntry.setAppendLogfile = wAppendLogfile.getSelection();
jobEntry.setScript( wScript.getText() );
jobEntry.insertScript = wInsertScript.getSelection();
dispose();
}
}