/*! ****************************************************************************** * * 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.copyfiles; import java.util.HashMap; import java.util.Map; import org.apache.commons.vfs2.FileObject; import org.apache.commons.vfs2.FileSystemException; import org.eclipse.swt.SWT; 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.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.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; 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.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.pentaho.di.core.Const; import org.pentaho.di.core.util.Utils; import org.pentaho.di.core.Props; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.exception.KettleFileException; 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.copyfiles.JobEntryCopyFiles; 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.ConstUI; import org.pentaho.di.ui.core.gui.GUIResource; 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.TextVarButtonRenderCallback; import org.pentaho.di.ui.job.dialog.JobDialog; import org.pentaho.di.ui.job.entry.JobEntryDialog; import org.pentaho.di.ui.spoon.Spoon; import org.pentaho.di.ui.trans.step.BaseStepDialog; import org.pentaho.vfs.ui.VfsFileChooserDialog; /** * This dialog allows you to edit the Copy Files job entry settings. * * @author Samatar Hassan * @since 06-05-2007 */ public class JobEntryCopyFilesDialog extends JobEntryDialog implements JobEntryDialogInterface { private static Class<?> PKG = JobEntryCopyFiles.class; // for i18n purposes, needed by Translator2!! protected static final String[] FILETYPES = new String[] { BaseMessages.getString( PKG, "JobCopyFiles.Filetype.All" ) }; public static final String LOCAL_ENVIRONMENT = "Local"; public static final String STATIC_ENVIRONMENT = "<Static>"; protected Text wName; protected Button wPrevious; protected Button wCopyEmptyFolders; protected Button wOverwriteFiles; protected Button wIncludeSubfolders; protected Button wRemoveSourceFiles; protected Button wAddFileToResult; protected Button wDestinationIsAFile; protected Button wCreateDestinationFolder; protected JobEntryCopyFiles jobEntry; protected Shell shell; protected boolean changed; private Label wlFields; protected TableView wFields; private ToolItem deleteToolItem; // Delete public JobEntryCopyFilesDialog( Shell parent, JobEntryInterface jobEntryInt, Repository rep, JobMeta jobMeta ) { super( parent, jobEntryInt, rep, jobMeta ); jobEntry = (JobEntryCopyFiles) jobEntryInt; if ( this.jobEntry.getName() == null ) { this.jobEntry.setName( BaseMessages.getString( PKG, "JobCopyFiles.Name.Default" ) ); } } protected void initUI() { Shell parent = getParent(); shell = new Shell( parent, props.getJobsDialogStyle() ); props.setLook( shell ); Button helpButton = JobDialog.setShellImage( shell, jobEntry ); ModifyListener lsMod = new ModifyListener() { public void modifyText( ModifyEvent e ) { jobEntry.setChanged(); } }; changed = jobEntry.hasChanged(); FormLayout formLayout = new FormLayout(); formLayout.marginWidth = Const.FORM_MARGIN; formLayout.marginHeight = Const.FORM_MARGIN; shell.setLayout( formLayout ); shell.setText( BaseMessages.getString( PKG, "JobCopyFiles.Title" ) ); int middle = props.getMiddlePct(); int margin = Const.MARGIN; // Filename line Label wlName = new Label( shell, SWT.LEFT ); wlName.setText( BaseMessages.getString( PKG, "JobCopyFiles.Name.Label" ) ); props.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 ); props.setLook( wName ); wName.addModifyListener( lsMod ); FormData fdName = new FormData(); fdName.left = new FormAttachment( 0, 0 ); fdName.top = new FormAttachment( wlName, margin ); fdName.right = new FormAttachment( 40, 0 ); wName.setLayoutData( fdName ); Label wlIcon = new Label( shell, SWT.RIGHT ); wlIcon.setImage( getImage() ); props.setLook( wlIcon ); FormData fdlIcon = new FormData(); fdlIcon.top = new FormAttachment( 0, margin * 3 ); fdlIcon.right = new FormAttachment( 100, -margin ); wlIcon.setLayoutData( fdlIcon ); Label lTopSeparator = new Label( shell, SWT.HORIZONTAL | SWT.SEPARATOR ); FormData fdTopSeparator = new FormData(); fdTopSeparator.top = new FormAttachment( wName, margin * 3 ); fdTopSeparator.left = new FormAttachment( 0, 0 ); fdTopSeparator.right = new FormAttachment( 100, 0 ); lTopSeparator.setLayoutData( fdTopSeparator ); CTabFolder wTabFolder = new CTabFolder( shell, SWT.BORDER ); props.setLook( wTabFolder, Props.WIDGET_STYLE_TAB ); FormData fdTabFolder = new FormData(); fdTabFolder.left = new FormAttachment( 0, 0 ); fdTabFolder.top = new FormAttachment( lTopSeparator, margin * 3 ); fdTabFolder.right = new FormAttachment( 100, 0 ); fdTabFolder.bottom = new FormAttachment( 100, -60 ); wTabFolder.setLayoutData( fdTabFolder ); // /////////////////////////////////////////////////////////// // / START OF FILES TAB // /////////////////////////////////////////////////////////// CTabItem wFilesTab = new CTabItem( wTabFolder, SWT.NONE ); wFilesTab.setText( BaseMessages.getString( PKG, "JobCopyFiles.Tab.Files.Label" ) ); Composite wFilesComp = new Composite( wTabFolder, SWT.NONE ); props.setLook( wFilesComp ); FormLayout filesLayout = new FormLayout(); filesLayout.marginWidth = 3; filesLayout.marginHeight = 3; wFilesComp.setLayout( filesLayout ); FormData fdFilesComp = new FormData(); fdFilesComp.left = new FormAttachment( 0, 0 ); fdFilesComp.top = new FormAttachment( 0, 0 ); fdFilesComp.right = new FormAttachment( 100, 0 ); fdFilesComp.bottom = new FormAttachment( 100, 0 ); wFilesComp.setLayoutData( fdFilesComp ); wFilesComp.layout(); wFilesTab.setControl( wFilesComp ); // /////////////////////////////////////////////////////////// // / END OF FILES TAB // /////////////////////////////////////////////////////////// // //////////////////////// // START OF SETTINGS TAB /// // //////////////////////// CTabItem wSettingsTab = new CTabItem( wTabFolder, SWT.NONE ); wSettingsTab.setText( BaseMessages.getString( PKG, "JobCopyFiles.Settings.Label" ) ); Composite wSettingsComp = new Composite( wTabFolder, SWT.NONE ); props.setLook( wSettingsComp ); FormLayout settingsLayout = new FormLayout(); settingsLayout.marginWidth = 3; settingsLayout.marginHeight = 3; wSettingsComp.setLayout( settingsLayout ); SelectionAdapter listener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { jobEntry.setChanged(); } }; wIncludeSubfolders = createSettingsButton( wSettingsComp, "JobCopyFiles.IncludeSubfolders.Label", "JobCopyFiles.IncludeSubfolders.Tooltip", null, listener ); wDestinationIsAFile = createSettingsButton( wSettingsComp, "JobCopyFiles.DestinationIsAFile.Label", "JobCopyFiles.DestinationIsAFile.Tooltip", wIncludeSubfolders, listener ); wCopyEmptyFolders = createSettingsButton( wSettingsComp, "JobCopyFiles.CopyEmptyFolders.Label", "JobCopyFiles.CopyEmptyFolders.Tooltip", wDestinationIsAFile, listener ); wCreateDestinationFolder = createSettingsButton( wSettingsComp, "JobCopyFiles.CreateDestinationFolder.Label", "JobCopyFiles.CreateDestinationFolder.Tooltip", wCopyEmptyFolders, listener ); wOverwriteFiles = createSettingsButton( wSettingsComp, "JobCopyFiles.OverwriteFiles.Label", "JobCopyFiles.OverwriteFiles.Tooltip", wCreateDestinationFolder, listener ); wRemoveSourceFiles = createSettingsButton( wSettingsComp, "JobCopyFiles.RemoveSourceFiles.Label", "JobCopyFiles.RemoveSourceFiles.Tooltip", wOverwriteFiles, listener ); wPrevious = createSettingsButton( wSettingsComp, "JobCopyFiles.Previous.Label", "JobCopyFiles.Previous.Tooltip", wRemoveSourceFiles, listener ); wAddFileToResult = createSettingsButton( wSettingsComp, "JobCopyFiles.AddFileToResult.Label", "JobCopyFiles.AddFileToResult.Tooltip", wPrevious, listener ); FormData fdSettingsComp = new FormData(); fdSettingsComp.left = new FormAttachment( 0, 0 ); fdSettingsComp.top = new FormAttachment( 0, 0 ); fdSettingsComp.right = new FormAttachment( 100, 0 ); fdSettingsComp.bottom = new FormAttachment( 100, 0 ); wSettingsComp.setLayoutData( fdSettingsComp ); wSettingsComp.layout(); wSettingsTab.setControl( wSettingsComp ); props.setLook( wSettingsComp ); // /////////////////////////////////////////////////////////// // / END OF SETTINGS TAB // /////////////////////////////////////////////////////////// ToolBar tb = new ToolBar( wFilesComp, SWT.HORIZONTAL | SWT.FLAT ); props.setLook( tb ); FormData fdTb = new FormData(); fdTb.right = new FormAttachment( 100, 0 ); fdTb.top = new FormAttachment( wFilesComp, margin ); tb.setLayoutData( fdTb ); deleteToolItem = new ToolItem( tb, SWT.PUSH ); deleteToolItem.setImage( GUIResource.getInstance().getImageDelete() ); deleteToolItem.setToolTipText( BaseMessages.getString( PKG, "JobCopyFiles.FilenameDelete.Tooltip" ) ); deleteToolItem.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent arg0 ) { int[] idx = wFields.getSelectionIndices(); wFields.remove( idx ); wFields.removeEmptyRows(); wFields.setRowNums(); } } ); wlFields = new Label( wFilesComp, SWT.NONE ); wlFields.setText( BaseMessages.getString( PKG, "JobCopyFiles.Fields.Label" ) ); props.setLook( wlFields ); FormData fdlFields = new FormData(); fdlFields.left = new FormAttachment( 0, margin ); fdlFields.right = new FormAttachment( middle, -margin ); fdlFields.top = new FormAttachment( wFilesComp, 15 ); wlFields.setLayoutData( fdlFields ); int rows = jobEntry.source_filefolder == null ? 1 : ( jobEntry.source_filefolder.length == 0 ? 0 : jobEntry.source_filefolder.length ); final int FieldsRows = rows; ColumnInfo[] colinf = new ColumnInfo[] { new ColumnInfo( BaseMessages.getString( PKG, "JobCopyFiles.Fields.SourceEnvironment.Label" ), ColumnInfo.COLUMN_TYPE_CCOMBO, false, true ), new ColumnInfo( BaseMessages.getString( PKG, "JobCopyFiles.Fields.SourceFileFolder.Label" ), ColumnInfo.COLUMN_TYPE_TEXT_BUTTON, false ), new ColumnInfo( BaseMessages.getString( PKG, "JobCopyFiles.Fields.Wildcard.Label" ), ColumnInfo.COLUMN_TYPE_TEXT, false ), new ColumnInfo( BaseMessages.getString( PKG, "JobCopyFiles.Fields.DestinationEnvironment.Label" ), ColumnInfo.COLUMN_TYPE_CCOMBO, false, true ), new ColumnInfo( BaseMessages.getString( PKG, "JobCopyFiles.Fields.DestinationFileFolder.Label" ), ColumnInfo.COLUMN_TYPE_TEXT_BUTTON, false ) }; setComboValues( colinf[0] ); TextVarButtonRenderCallback callback = new TextVarButtonRenderCallback() { public boolean shouldRenderButton() { String envType = wFields.getActiveTableItem().getText( wFields.getActiveTableColumn() - 1 ); return !STATIC_ENVIRONMENT.equalsIgnoreCase( envType ); } }; colinf[1].setUsingVariables( true ); colinf[1].setToolTip( BaseMessages.getString( PKG, "JobCopyFiles.Fields.SourceFileFolder.Tooltip" ) ); colinf[1].setTextVarButtonSelectionListener( getFileSelectionAdapter() ); colinf[1].setRenderTextVarButtonCallback( callback ); colinf[2].setUsingVariables( true ); colinf[2].setToolTip( BaseMessages.getString( PKG, "JobCopyFiles.Fields.Wildcard.Tooltip" ) ); setComboValues( colinf[3] ); colinf[4].setUsingVariables( true ); colinf[4].setToolTip( BaseMessages.getString( PKG, "JobCopyFiles.Fields.DestinationFileFolder.Tooltip" ) ); colinf[4].setTextVarButtonSelectionListener( getFileSelectionAdapter() ); wFields = new TableView( jobMeta, wFilesComp, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI, colinf, FieldsRows, lsMod, props ); FormData fdFields = new FormData(); fdFields.left = new FormAttachment( 0, margin ); fdFields.top = new FormAttachment( tb, margin ); fdFields.right = new FormAttachment( 100, -margin ); fdFields.bottom = new FormAttachment( 100, -margin ); wFields.setLayoutData( fdFields ); refreshArgFromPrevious(); Button wOK = new Button( shell, SWT.PUSH ); wOK.setText( BaseMessages.getString( PKG, "System.Button.OK" ) ); Button wCancel = new Button( shell, SWT.PUSH ); wCancel.setText( BaseMessages.getString( PKG, "System.Button.Cancel" ) ); Label lBottomSeparator = new Label( shell, SWT.HORIZONTAL | SWT.SEPARATOR ); FormData fdBottomSeparator = new FormData(); fdBottomSeparator.top = new FormAttachment( wTabFolder, margin * 3 ); fdBottomSeparator.left = new FormAttachment( 0, 0 ); fdBottomSeparator.right = new FormAttachment( 100, 0 ); lBottomSeparator.setLayoutData( fdBottomSeparator ); BaseStepDialog.positionBottomRightButtons( shell, new Button[] { wOK, wCancel }, margin, lBottomSeparator ); FormData fdOK = (FormData) wOK.getLayoutData(); FormData fdHelpButton = new FormData(); fdHelpButton.top = fdOK.top; fdHelpButton.left = new FormAttachment( 0, margin ); helpButton.setLayoutData( fdHelpButton ); // Add listeners Listener lsCancel = new Listener() { public void handleEvent( Event e ) { cancel(); } }; Listener lsOK = new Listener() { public void handleEvent( Event e ) { ok(); } }; wCancel.addListener( SWT.Selection, lsCancel ); wOK.addListener( SWT.Selection, lsOK ); SelectionAdapter lsDef = new SelectionAdapter() { public void widgetDefaultSelected( SelectionEvent e ) { ok(); } }; wName.addSelectionListener( lsDef ); // Detect X or ALT-F4 or something that kills this window... shell.addShellListener( new ShellAdapter() { public void shellClosed( ShellEvent e ) { cancel(); } } ); getData(); wTabFolder.setSelection( 0 ); } public JobEntryInterface open() { initUI(); BaseStepDialog.setSize( shell ); shell.open(); Display display = getParent().getDisplay(); while ( !shell.isDisposed() ) { if ( !display.readAndDispatch() ) { display.sleep(); } } return jobEntry; } protected Button createSettingsButton( Composite p, String text, String title, Control top, SelectionAdapter sa ) { Button button = new Button( p, SWT.CHECK ); button.setText( BaseMessages.getString( PKG, text ) ); button.setToolTipText( BaseMessages.getString( PKG, title ) ); props.setLook( button ); FormData fd = new FormData(); fd.left = new FormAttachment( 0, Const.MARGIN * 2 ); if ( top == null ) { fd.top = new FormAttachment( 0, 10 ); } else { fd.top = new FormAttachment( top, 5 ); } fd.right = new FormAttachment( 100, 0 ); button.setLayoutData( fd ); button.addSelectionListener( sa ); return button; } protected SelectionAdapter getFileSelectionAdapter() { return new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { FileObject selectedFile = null; try { // Get current file FileObject rootFile = null; FileObject initialFile = null; FileObject defaultInitialFile = null; String original = wFields.getActiveTableItem().getText( wFields.getActiveTableColumn() ); if ( original != null ) { String fileName = jobMeta.environmentSubstitute( original ); if ( fileName != null && !fileName.equals( "" ) ) { try { initialFile = KettleVFS.getFileObject( fileName ); } catch ( KettleException ex ) { initialFile = KettleVFS.getFileObject( "" ); } defaultInitialFile = KettleVFS.getFileObject( "file:///c:/" ); rootFile = initialFile.getFileSystem().getRoot(); } else { defaultInitialFile = KettleVFS.getFileObject( Spoon.getInstance().getLastFileOpened() ); } } if ( rootFile == null ) { rootFile = defaultInitialFile.getFileSystem().getRoot(); initialFile = defaultInitialFile; } VfsFileChooserDialog fileChooserDialog = Spoon.getInstance().getVfsFileChooserDialog( rootFile, initialFile ); fileChooserDialog.defaultInitialFile = defaultInitialFile; selectedFile = fileChooserDialog.open( shell, new String[] { "file" }, "file", true, null, new String[] { "*.*" }, FILETYPES, true, VfsFileChooserDialog.VFS_DIALOG_OPEN_FILE_OR_DIRECTORY, false, false ); if ( selectedFile != null ) { String url = selectedFile.getURL().toString(); wFields.getActiveTableItem().setText( wFields.getActiveTableColumn(), url ); } } catch ( KettleFileException ex ) { } catch ( FileSystemException ex ) { } } }; } private void refreshArgFromPrevious() { wlFields.setEnabled( !wPrevious.getSelection() ); wFields.setEnabled( !wPrevious.getSelection() ); deleteToolItem.setEnabled( !wPrevious.getSelection() ); } public void dispose() { WindowProperty winprop = new WindowProperty( shell ); props.setScreen( winprop ); shell.dispose(); } /** * Copy information from the meta-data input to the dialog fields. */ public void getData() { if ( jobEntry.getName() != null ) { wName.setText( jobEntry.getName() ); } wCopyEmptyFolders.setSelection( jobEntry.copy_empty_folders ); if ( jobEntry.source_filefolder != null ) { for ( int i = 0; i < jobEntry.source_filefolder.length; i++ ) { TableItem ti = wFields.table.getItem( i ); if ( jobEntry.source_filefolder[i] != null ) { String sourceUrl = jobEntry.source_filefolder[i]; String clusterName = jobEntry.getConfigurationBy( sourceUrl ); ti.setText( 1, STATIC_ENVIRONMENT ); if ( clusterName != null ) { clusterName = clusterName.startsWith( JobEntryCopyFiles.LOCAL_SOURCE_FILE ) ? LOCAL_ENVIRONMENT : clusterName; clusterName = clusterName.startsWith( JobEntryCopyFiles.STATIC_SOURCE_FILE ) ? STATIC_ENVIRONMENT : clusterName; ti.setText( 1, clusterName ); sourceUrl = clusterName.equals( LOCAL_ENVIRONMENT ) || clusterName.equals( STATIC_ENVIRONMENT ) ? sourceUrl : jobEntry.getUrlPath( sourceUrl ); } ti.setText( 2, sourceUrl ); } if ( jobEntry.wildcard[i] != null ) { ti.setText( 3, jobEntry.wildcard[i] ); } if ( jobEntry.destination_filefolder[i] != null && !Utils.isEmpty( jobEntry.destination_filefolder[i] ) ) { String destinationURL = jobEntry.destination_filefolder[i]; String clusterName = jobEntry.getConfigurationBy( destinationURL ); ti.setText( 4, STATIC_ENVIRONMENT ); if ( clusterName != null ) { clusterName = clusterName.startsWith( JobEntryCopyFiles.LOCAL_DEST_FILE ) ? LOCAL_ENVIRONMENT : clusterName; clusterName = clusterName.startsWith( JobEntryCopyFiles.STATIC_DEST_FILE ) ? STATIC_ENVIRONMENT : clusterName; ti.setText( 4, clusterName ); destinationURL = clusterName.equals( LOCAL_ENVIRONMENT ) || clusterName.equals( STATIC_ENVIRONMENT ) ? destinationURL : jobEntry.getUrlPath( destinationURL ); } ti.setText( 5, destinationURL ); } } wFields.setRowNums(); wFields.optWidth( true ); } wPrevious.setSelection( jobEntry.arg_from_previous ); wOverwriteFiles.setSelection( jobEntry.overwrite_files ); wIncludeSubfolders.setSelection( jobEntry.include_subfolders ); wRemoveSourceFiles.setSelection( jobEntry.remove_source_files ); wDestinationIsAFile.setSelection( jobEntry.destination_is_a_file ); wCreateDestinationFolder.setSelection( jobEntry.create_destination_folder ); wAddFileToResult.setSelection( jobEntry.add_result_filesname ); wName.selectAll(); wName.setFocus(); } private void cancel() { jobEntry.setChanged( changed ); jobEntry = null; dispose(); } protected 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.setName( wName.getText() ); jobEntry.setCopyEmptyFolders( wCopyEmptyFolders.getSelection() ); jobEntry.setoverwrite_files( wOverwriteFiles.getSelection() ); jobEntry.setIncludeSubfolders( wIncludeSubfolders.getSelection() ); jobEntry.setArgFromPrevious( wPrevious.getSelection() ); jobEntry.setRemoveSourceFiles( wRemoveSourceFiles.getSelection() ); jobEntry.setAddresultfilesname( wAddFileToResult.getSelection() ); jobEntry.setDestinationIsAFile( wDestinationIsAFile.getSelection() ); jobEntry.setCreateDestinationFolder( wCreateDestinationFolder.getSelection() ); 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++; } } Map<String, String> sourceDestinationMappings = new HashMap<String, String>(); jobEntry.source_filefolder = new String[nr]; jobEntry.destination_filefolder = new String[nr]; jobEntry.wildcard = new String[nr]; nr = 0; for ( int i = 0; i < nritems; i++ ) { String sourceNc = wFields.getNonEmpty( i ).getText( 1 ); sourceNc = sourceNc.equals( LOCAL_ENVIRONMENT ) ? JobEntryCopyFiles.LOCAL_SOURCE_FILE + i : sourceNc; sourceNc = sourceNc.equals( STATIC_ENVIRONMENT ) ? JobEntryCopyFiles.STATIC_SOURCE_FILE + i : sourceNc; String source = wFields.getNonEmpty( i ).getText( 2 ); String wild = wFields.getNonEmpty( i ).getText( 3 ); String destNc = wFields.getNonEmpty( i ).getText( 4 ); destNc = destNc.equals( LOCAL_ENVIRONMENT ) ? JobEntryCopyFiles.LOCAL_DEST_FILE + i : destNc; destNc = destNc.equals( STATIC_ENVIRONMENT ) ? JobEntryCopyFiles.STATIC_DEST_FILE + i : destNc; String dest = wFields.getNonEmpty( i ).getText( 5 ); if ( !Utils.isEmpty( source ) && jobEntry.source_filefolder.length > 0 ) { jobEntry.source_filefolder[nr] = jobEntry.loadURL( source, sourceNc, getMetaStore(), sourceDestinationMappings ); jobEntry.destination_filefolder[nr] = jobEntry.loadURL( dest, destNc, getMetaStore(), sourceDestinationMappings ); jobEntry.wildcard[nr] = wild; nr++; } } jobEntry.setConfigurationMappings( sourceDestinationMappings ); dispose(); } public boolean evaluates() { return true; } public boolean isUnconditional() { return false; } protected Image getImage() { return GUIResource.getInstance().getImage( "ui/images/CPY.svg", ConstUI.ICON_SIZE, ConstUI.ICON_SIZE ); } public boolean showFileButtons() { return true; } protected void setComboValues( ColumnInfo colInfo ) { String[] values = { LOCAL_ENVIRONMENT, STATIC_ENVIRONMENT }; colInfo.setComboValues( values ); } }