/*! ******************************************************************************
*
* 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.trans.steps.salesforceinput;
import java.util.HashSet;
import java.util.Set;
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.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
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.Cursor;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
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.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.exception.KettleException;
import org.pentaho.di.core.row.ValueMetaInterface;
import org.pentaho.di.core.row.value.ValueMetaFactory;
import org.pentaho.di.core.util.StringUtil;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.trans.TransPreviewFactory;
import org.pentaho.di.trans.steps.salesforce.SOQLValuesHighlight;
import org.pentaho.di.trans.steps.salesforce.SalesforceConnection;
import org.pentaho.di.trans.steps.salesforce.SalesforceConnectionUtils;
import org.pentaho.di.trans.steps.salesforce.SalesforceStepMeta;
import org.pentaho.di.trans.steps.salesforceinput.SalesforceInputField;
import org.pentaho.di.trans.steps.salesforceinput.SalesforceInputMeta;
import org.pentaho.di.ui.core.dialog.EnterNumberDialog;
import org.pentaho.di.ui.core.dialog.EnterTextDialog;
import org.pentaho.di.ui.core.dialog.ErrorDialog;
import org.pentaho.di.ui.core.dialog.PreviewRowsDialog;
import org.pentaho.di.ui.core.gui.GUIResource;
import org.pentaho.di.ui.core.widget.ColumnInfo;
import org.pentaho.di.ui.core.widget.ComboVar;
import org.pentaho.di.ui.core.widget.LabelTextVar;
import org.pentaho.di.ui.core.widget.StyledTextComp;
import org.pentaho.di.ui.core.widget.TableView;
import org.pentaho.di.ui.core.widget.TextVar;
import org.pentaho.di.ui.trans.dialog.TransPreviewProgressDialog;
import org.pentaho.di.ui.trans.steps.salesforce.SalesforceStepDialog;
import com.sforce.soap.partner.Field;
import com.sforce.soap.partner.sobject.SObject;
import com.sforce.ws.bind.XmlObject;
public class SalesforceInputDialog extends SalesforceStepDialog {
private static Class<?> PKG = SalesforceInputMeta.class; // for i18n purposes, needed by Translator2!!
private String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'.000'XXX";
private String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
private CTabFolder wTabFolder;
private CTabItem wFileTab, wContentTab, wFieldsTab;
private Composite wFileComp, wContentComp, wFieldsComp;
private FormData fdTabFolder, fdFileComp, fdContentComp, fdFieldsComp, fdlInclURLField;
private FormData fdInclURLField, fdlInclModuleField, fdlInclRownumField, fdlModule, fdModule;
private FormData fdInclModuleField, fdlInclModule, fdlInclURL, fdInclURL, fdlLimit, fdLimit;
private FormData fdlTimeOut, fdTimeOut, fdFields, fdUserName, fdURL, fdPassword, fdCondition;
private Button wInclURL, wInclModule, wInclRownum, wUseCompression, wQueryAll;
private FormData fdInclSQLField;
private FormData fdInclTimestampField;
private Label wlInclURL, wlInclURLField, wlInclModule, wlInclRownum, wlInclRownumField;
private Label wlInclModuleField, wlLimit, wlTimeOut, wlCondition, wlModule, wlInclSQLField, wlInclSQL;
private Group wConnectionGroup, wSettingsGroup;
private Label wlInclTimestampField, wlInclTimestamp, wlUseCompression;
private Label wlQueryAll, wlInclDeletionDateField, wlInclDeletionDate;
private FormData fdlInclSQL, fdInclSQL, fdlInclSQLField, fdlInclDeletionDateField, fdlInclDeletionDate;
private FormData fdlInclTimestamp, fdInclTimestamp, fdlInclTimestampField, fdInclDeletionDateField, fdDeletionDate;
private Button wInclSQL;
private TextVar wInclURLField, wInclModuleField, wInclRownumField, wInclSQLField, wInclDeletionDateField;
private Button wInclTimestamp, wInclDeletionDate;
private TextVar wInclTimestampField;
private TableView wFields;
private SalesforceInputMeta input;
private LabelTextVar wUserName, wURL, wPassword;
private StyledTextComp wCondition;
private Label wlPosition;
private FormData fdlPosition;
private Button wspecifyQuery;
private FormData fdspecifyQuery;
private Label wlspecifyQuery;
private FormData fdlspecifyQuery;
private StyledTextComp wQuery;
private FormData fdQuery;
private Label wlQuery;
private FormData fdlQuery;
private TextVar wTimeOut, wLimit;
private ComboVar wModule;
private Group wAdditionalFields, wAdvancedGroup;
private FormData fdAdditionalFields, fdAdvancedGroup;
private Label wlRecordsFilter;
private CCombo wRecordsFilter;
private FormData fdlRecordsFilter;
private FormData fdRecordsFilter;
private Label wlReadFrom;
private TextVar wReadFrom;
private FormData fdlReadFrom, fdReadFrom;
private Button open;
private Label wlReadTo;
private TextVar wReadTo;
private FormData fdlReadTo, fdReadTo;
private Button opento;
private Button wTest;
private FormData fdTest;
private Listener lsTest;
private boolean gotModule = false;
private boolean getModulesListError = false; /* True if error getting modules list */
private ColumnInfo[] colinf;
public SalesforceInputDialog( Shell parent, Object in, TransMeta transMeta, String sname ) {
super( parent, in, transMeta, sname );
input = (SalesforceInputMeta) in;
}
@Override
public String open() {
Shell parent = getParent();
Display display = parent.getDisplay();
shell = new Shell( parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX | SWT.MIN );
props.setLook( shell );
setShellImage( shell, input );
ModifyListener lsMod = new ModifyListener() {
@Override
public void modifyText( ModifyEvent e ) {
input.setChanged();
}
};
changed = input.hasChanged();
FormLayout formLayout = new FormLayout();
formLayout.marginWidth = Const.FORM_MARGIN;
formLayout.marginHeight = Const.FORM_MARGIN;
shell.setLayout( formLayout );
shell.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.DialogTitle" ) );
int middle = props.getMiddlePct();
int margin = Const.MARGIN;
// Stepname line
wlStepname = new Label( shell, SWT.RIGHT );
wlStepname.setText( BaseMessages.getString( PKG, "System.Label.StepName" ) );
props.setLook( wlStepname );
fdlStepname = new FormData();
fdlStepname.left = new FormAttachment( 0, 0 );
fdlStepname.top = new FormAttachment( 0, margin );
fdlStepname.right = new FormAttachment( middle, -margin );
wlStepname.setLayoutData( fdlStepname );
wStepname = new Text( shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wStepname.setText( stepname );
props.setLook( wStepname );
wStepname.addModifyListener( lsMod );
fdStepname = new FormData();
fdStepname.left = new FormAttachment( middle, 0 );
fdStepname.top = new FormAttachment( 0, margin );
fdStepname.right = new FormAttachment( 100, 0 );
wStepname.setLayoutData( fdStepname );
wTabFolder = new CTabFolder( shell, SWT.BORDER );
props.setLook( wTabFolder, Props.WIDGET_STYLE_TAB );
// ////////////////////////
// START OF FILE TAB ///
// ////////////////////////
wFileTab = new CTabItem( wTabFolder, SWT.NONE );
wFileTab.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.File.Tab" ) );
wFileComp = new Composite( wTabFolder, SWT.NONE );
props.setLook( wFileComp );
FormLayout fileLayout = new FormLayout();
fileLayout.marginWidth = 3;
fileLayout.marginHeight = 3;
wFileComp.setLayout( fileLayout );
// ////////////////////////
// START CONNECTION GROUP
wConnectionGroup = new Group( wFileComp, SWT.SHADOW_ETCHED_IN );
wConnectionGroup.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.ConnectionGroup.Label" ) );
FormLayout fconnLayout = new FormLayout();
fconnLayout.marginWidth = 3;
fconnLayout.marginHeight = 3;
wConnectionGroup.setLayout( fconnLayout );
props.setLook( wConnectionGroup );
// Webservice URL
wURL = new LabelTextVar( transMeta, wConnectionGroup,
BaseMessages.getString( PKG, "SalesforceInputDialog.URL.Label" ),
BaseMessages.getString( PKG, "SalesforceInputDialog.URL.Tooltip" ) );
props.setLook( wURL );
wURL.addModifyListener( lsMod );
fdURL = new FormData();
fdURL.left = new FormAttachment( 0, 0 );
fdURL.top = new FormAttachment( 0, margin );
fdURL.right = new FormAttachment( 100, 0 );
wURL.setLayoutData( fdURL );
// UserName line
wUserName = new LabelTextVar( transMeta, wConnectionGroup,
BaseMessages.getString( PKG, "SalesforceInputDialog.User.Label" ),
BaseMessages.getString( PKG, "SalesforceInputDialog.User.Tooltip" ) );
props.setLook( wUserName );
wUserName.addModifyListener( lsMod );
fdUserName = new FormData();
fdUserName.left = new FormAttachment( 0, 0 );
fdUserName.top = new FormAttachment( wURL, margin );
fdUserName.right = new FormAttachment( 100, 0 );
wUserName.setLayoutData( fdUserName );
// Password line
wPassword = new LabelTextVar( transMeta, wConnectionGroup,
BaseMessages.getString( PKG, "SalesforceInputDialog.Password.Label" ),
BaseMessages.getString( PKG, "SalesforceInputDialog.Password.Tooltip" ), true );
props.setLook( wPassword );
wPassword.addModifyListener( lsMod );
fdPassword = new FormData();
fdPassword.left = new FormAttachment( 0, 0 );
fdPassword.top = new FormAttachment( wUserName, margin );
fdPassword.right = new FormAttachment( 100, 0 );
wPassword.setLayoutData( fdPassword );
// Test Salesforce connection button
wTest = new Button( wConnectionGroup, SWT.PUSH );
wTest.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.TestConnection.Label" ) );
props.setLook( wTest );
fdTest = new FormData();
wTest.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.TestConnection.Tooltip" ) );
// fdTest.left = new FormAttachment(middle, 0);
fdTest.top = new FormAttachment( wPassword, margin );
fdTest.right = new FormAttachment( 100, 0 );
wTest.setLayoutData( fdTest );
FormData fdConnectionGroup = new FormData();
fdConnectionGroup.left = new FormAttachment( 0, 0 );
fdConnectionGroup.right = new FormAttachment( 100, 0 );
fdConnectionGroup.top = new FormAttachment( 0, margin );
wConnectionGroup.setLayoutData( fdConnectionGroup );
// END CONNECTION GROUP
// ////////////////////////
// ////////////////////////
// START SETTINGS GROUP
wSettingsGroup = new Group( wFileComp, SWT.SHADOW_ETCHED_IN );
wSettingsGroup.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.HttpAuthGroup.Label" ) );
FormLayout fsettingsLayout = new FormLayout();
fsettingsLayout.marginWidth = 3;
fsettingsLayout.marginHeight = 3;
wSettingsGroup.setLayout( fsettingsLayout );
props.setLook( wSettingsGroup );
wlspecifyQuery = new Label( wSettingsGroup, SWT.RIGHT );
wlspecifyQuery.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.specifyQuery.Label" ) );
props.setLook( wlspecifyQuery );
fdlspecifyQuery = new FormData();
fdlspecifyQuery.left = new FormAttachment( 0, 0 );
fdlspecifyQuery.top = new FormAttachment( wConnectionGroup, 2 * margin );
fdlspecifyQuery.right = new FormAttachment( middle, -margin );
wlspecifyQuery.setLayoutData( fdlspecifyQuery );
wspecifyQuery = new Button( wSettingsGroup, SWT.CHECK );
props.setLook( wspecifyQuery );
wspecifyQuery.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.specifyQuery.Tooltip" ) );
fdspecifyQuery = new FormData();
fdspecifyQuery.left = new FormAttachment( middle, 0 );
fdspecifyQuery.top = new FormAttachment( wConnectionGroup, 2 * margin );
wspecifyQuery.setLayoutData( fdspecifyQuery );
wspecifyQuery.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
setEnableQuery();
}
} );
// Module
wlModule = new Label( wSettingsGroup, SWT.RIGHT );
wlModule.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.Module.Label" ) );
props.setLook( wlModule );
fdlModule = new FormData();
fdlModule.left = new FormAttachment( 0, 0 );
fdlModule.top = new FormAttachment( wspecifyQuery, margin );
fdlModule.right = new FormAttachment( middle, -margin );
wlModule.setLayoutData( fdlModule );
wModule = new ComboVar( transMeta, wSettingsGroup, SWT.BORDER | SWT.READ_ONLY );
wModule.setEditable( true );
props.setLook( wModule );
wModule.addModifyListener( lsMod );
fdModule = new FormData();
fdModule.left = new FormAttachment( middle, margin );
fdModule.top = new FormAttachment( wspecifyQuery, margin );
fdModule.right = new FormAttachment( 100, -margin );
wModule.setLayoutData( fdModule );
wModule.addFocusListener( new FocusListener() {
@Override
public void focusLost( org.eclipse.swt.events.FocusEvent e ) {
getModulesListError = false;
}
@Override
public void focusGained( org.eclipse.swt.events.FocusEvent e ) {
// check if the URL and login credentials passed and not just had error
if ( Utils.isEmpty( wURL.getText() )
|| Utils.isEmpty( wUserName.getText() ) || Utils.isEmpty( wPassword.getText() )
|| ( getModulesListError ) ) {
return;
}
getModulesList();
}
} );
wlPosition = new Label( wSettingsGroup, SWT.NONE );
props.setLook( wlPosition );
fdlPosition = new FormData();
fdlPosition.left = new FormAttachment( middle, 0 );
fdlPosition.right = new FormAttachment( 100, 0 );
fdlPosition.bottom = new FormAttachment( 100, -margin );
wlPosition.setLayoutData( fdlPosition );
// condition
wlCondition = new Label( wSettingsGroup, SWT.RIGHT );
wlCondition.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.Condition.Label" ) );
props.setLook( wlCondition );
FormData fdlCondition = new FormData();
fdlCondition.left = new FormAttachment( 0, -margin );
fdlCondition.top = new FormAttachment( wModule, margin );
fdlCondition.right = new FormAttachment( middle, -margin );
wlCondition.setLayoutData( fdlCondition );
wCondition =
new StyledTextComp( transMeta, wSettingsGroup, SWT.MULTI
| SWT.LEFT | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL, "" );
wCondition.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.Condition.Tooltip" ) );
props.setLook( wCondition, Props.WIDGET_STYLE_FIXED );
wCondition.addModifyListener( lsMod );
fdCondition = new FormData();
fdCondition.left = new FormAttachment( middle, margin );
fdCondition.top = new FormAttachment( wModule, margin );
fdCondition.right = new FormAttachment( 100, -2 * margin );
fdCondition.bottom = new FormAttachment( wlPosition, -margin );
wCondition.setLayoutData( fdCondition );
wCondition.addModifyListener( new ModifyListener() {
@Override
public void modifyText( ModifyEvent arg0 ) {
setQueryToolTip();
setPosition();
}
} );
wCondition.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed( KeyEvent e ) {
setPosition();
}
@Override
public void keyReleased( KeyEvent e ) {
setPosition();
}
} );
wCondition.addFocusListener( new FocusAdapter() {
@Override
public void focusGained( FocusEvent e ) {
setPosition();
}
@Override
public void focusLost( FocusEvent e ) {
setPosition();
}
} );
wCondition.addMouseListener( new MouseAdapter() {
@Override
public void mouseDoubleClick( MouseEvent e ) {
setPosition();
}
@Override
public void mouseDown( MouseEvent e ) {
setPosition();
}
@Override
public void mouseUp( MouseEvent e ) {
setPosition();
}
} );
// Text Higlighting
wCondition.addLineStyleListener( new SOQLValuesHighlight() );
// Query
wlQuery = new Label( wSettingsGroup, SWT.RIGHT );
wlQuery.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.Query.Label" ) );
props.setLook( wlQuery );
fdlQuery = new FormData();
fdlQuery.left = new FormAttachment( 0, -margin );
fdlQuery.top = new FormAttachment( wspecifyQuery, margin );
fdlQuery.right = new FormAttachment( middle, -margin );
wlQuery.setLayoutData( fdlQuery );
wQuery =
new StyledTextComp( transMeta, wSettingsGroup, SWT.MULTI
| SWT.LEFT | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL, "" );
props.setLook( wQuery, Props.WIDGET_STYLE_FIXED );
wQuery.addModifyListener( lsMod );
fdQuery = new FormData();
fdQuery.left = new FormAttachment( middle, 0 );
fdQuery.top = new FormAttachment( wspecifyQuery, margin );
fdQuery.right = new FormAttachment( 100, -2 * margin );
fdQuery.bottom = new FormAttachment( wlPosition, -margin );
wQuery.setLayoutData( fdQuery );
wQuery.addModifyListener( new ModifyListener() {
@Override
public void modifyText( ModifyEvent arg0 ) {
setQueryToolTip();
}
} );
wQuery.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed( KeyEvent e ) {
setPosition();
}
@Override
public void keyReleased( KeyEvent e ) {
setPosition();
}
} );
wQuery.addFocusListener( new FocusAdapter() {
@Override
public void focusGained( FocusEvent e ) {
setPosition();
}
@Override
public void focusLost( FocusEvent e ) {
setPosition();
}
} );
wQuery.addMouseListener( new MouseAdapter() {
@Override
public void mouseDoubleClick( MouseEvent e ) {
setPosition();
}
@Override
public void mouseDown( MouseEvent e ) {
setPosition();
}
@Override
public void mouseUp( MouseEvent e ) {
setPosition();
}
} );
// Text Higlighting
wQuery.addLineStyleListener( new SOQLValuesHighlight() );
FormData fdSettingsGroup = new FormData();
fdSettingsGroup.left = new FormAttachment( 0, 0 );
fdSettingsGroup.right = new FormAttachment( 100, 0 );
fdSettingsGroup.bottom = new FormAttachment( 100, 0 );
fdSettingsGroup.top = new FormAttachment( wConnectionGroup, margin );
wSettingsGroup.setLayoutData( fdSettingsGroup );
// END SETTINGS GROUP
// ////////////////////////
fdFileComp = new FormData();
fdFileComp.left = new FormAttachment( 0, 0 );
fdFileComp.top = new FormAttachment( 0, 0 );
fdFileComp.right = new FormAttachment( 100, 0 );
fdFileComp.bottom = new FormAttachment( 100, 0 );
wFileComp.setLayoutData( fdFileComp );
wFileComp.layout();
wFileTab.setControl( wFileComp );
// ///////////////////////////////////////////////////////////
// / END OF FILE TAB
// ///////////////////////////////////////////////////////////
// ////////////////////////
// START OF CONTENT TAB///
// /
wContentTab = new CTabItem( wTabFolder, SWT.NONE );
wContentTab.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.Content.Tab" ) );
FormLayout contentLayout = new FormLayout();
contentLayout.marginWidth = 3;
contentLayout.marginHeight = 3;
wContentComp = new Composite( wTabFolder, SWT.NONE );
props.setLook( wContentComp );
wContentComp.setLayout( contentLayout );
// ///////////////////////////////
// START OF Advanced GROUP //
// ///////////////////////////////
wAdvancedGroup = new Group( wContentComp, SWT.SHADOW_NONE );
props.setLook( wAdvancedGroup );
wAdvancedGroup.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.AdvancedGroup.Label" ) );
FormLayout advancedgroupLayout = new FormLayout();
advancedgroupLayout.marginWidth = 10;
advancedgroupLayout.marginHeight = 10;
wAdvancedGroup.setLayout( advancedgroupLayout );
// RecordsFilter
wlRecordsFilter = new Label( wAdvancedGroup, SWT.RIGHT );
wlRecordsFilter.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.RecordsFilter.Label" ) );
props.setLook( wlRecordsFilter );
fdlRecordsFilter = new FormData();
fdlRecordsFilter.left = new FormAttachment( 0, 0 );
fdlRecordsFilter.right = new FormAttachment( middle, -margin );
fdlRecordsFilter.top = new FormAttachment( 0, 2 * margin );
wlRecordsFilter.setLayoutData( fdlRecordsFilter );
wRecordsFilter = new CCombo( wAdvancedGroup, SWT.BORDER | SWT.READ_ONLY );
props.setLook( wRecordsFilter );
wRecordsFilter.addModifyListener( lsMod );
fdRecordsFilter = new FormData();
fdRecordsFilter.left = new FormAttachment( middle, 0 );
fdRecordsFilter.top = new FormAttachment( 0, 2 * margin );
fdRecordsFilter.right = new FormAttachment( 100, -margin );
wRecordsFilter.setLayoutData( fdRecordsFilter );
wRecordsFilter.setItems( SalesforceConnectionUtils.recordsFilterDesc );
wRecordsFilter.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
updateRecordsFilter();
}
} );
// Query All?
wlQueryAll = new Label( wAdvancedGroup, SWT.RIGHT );
wlQueryAll.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.QueryAll.Label" ) );
props.setLook( wlQueryAll );
FormData fdlQueryAll = new FormData();
fdlQueryAll.left = new FormAttachment( 0, 0 );
fdlQueryAll.top = new FormAttachment( wRecordsFilter, margin );
fdlQueryAll.right = new FormAttachment( middle, -margin );
wlQueryAll.setLayoutData( fdlQueryAll );
wQueryAll = new Button( wAdvancedGroup, SWT.CHECK );
props.setLook( wQueryAll );
wQueryAll.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.QueryAll.Tooltip" ) );
FormData fdQueryAll = new FormData();
fdQueryAll.left = new FormAttachment( middle, 0 );
fdQueryAll.top = new FormAttachment( wRecordsFilter, margin );
wQueryAll.setLayoutData( fdQueryAll );
open = new Button( wAdvancedGroup, SWT.PUSH );
open.setImage( GUIResource.getInstance().getImageCalendar() );
open.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.OpenCalendar" ) );
FormData fdlButton = new FormData();
fdlButton.top = new FormAttachment( wQueryAll, margin );
fdlButton.right = new FormAttachment( 100, 0 );
open.setLayoutData( fdlButton );
open.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
final Shell dialog = new Shell( shell, SWT.DIALOG_TRIM );
dialog.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.SelectDate" ) );
dialog.setImage( GUIResource.getInstance().getImageSpoon() );
dialog.setLayout( new GridLayout( 3, false ) );
final DateTime calendar = new DateTime( dialog, SWT.CALENDAR );
final DateTime time = new DateTime( dialog, SWT.TIME | SWT.TIME );
new Label( dialog, SWT.NONE );
new Label( dialog, SWT.NONE );
Button ok = new Button( dialog, SWT.PUSH );
ok.setText( BaseMessages.getString( PKG, "System.Button.OK" ) );
ok.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
ok.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
wReadFrom.setText( calendar.getYear()
+ "-"
+ ( ( calendar.getMonth() + 1 ) < 10
? "0" + ( calendar.getMonth() + 1 ) : ( calendar.getMonth() + 1 ) ) + "-"
+ ( calendar.getDay() < 10 ? "0" + calendar.getDay() : calendar.getDay() ) + " "
+ ( time.getHours() < 10 ? "0" + time.getHours() : time.getHours() ) + ":"
+ ( time.getMinutes() < 10 ? "0" + time.getMinutes() : time.getMinutes() ) + ":"
+ ( time.getMinutes() < 10 ? "0" + time.getMinutes() : time.getMinutes() ) );
dialog.close();
}
} );
dialog.setDefaultButton( ok );
dialog.pack();
dialog.open();
}
} );
wlReadFrom = new Label( wAdvancedGroup, SWT.RIGHT );
wlReadFrom.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.ReadFrom.Label" ) );
props.setLook( wlReadFrom );
fdlReadFrom = new FormData();
fdlReadFrom.left = new FormAttachment( 0, 0 );
fdlReadFrom.top = new FormAttachment( wQueryAll, margin );
fdlReadFrom.right = new FormAttachment( middle, -margin );
wlReadFrom.setLayoutData( fdlReadFrom );
wReadFrom = new TextVar( transMeta, wAdvancedGroup, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wReadFrom.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.ReadFrom.Tooltip" ) );
props.setLook( wReadFrom );
wReadFrom.addModifyListener( lsMod );
fdReadFrom = new FormData();
fdReadFrom.left = new FormAttachment( middle, 0 );
fdReadFrom.top = new FormAttachment( wQueryAll, margin );
fdReadFrom.right = new FormAttachment( open, -margin );
wReadFrom.setLayoutData( fdReadFrom );
opento = new Button( wAdvancedGroup, SWT.PUSH );
opento.setImage( GUIResource.getInstance().getImageCalendar() );
opento.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.OpenCalendar" ) );
FormData fdlButtonto = new FormData();
fdlButtonto.top = new FormAttachment( wReadFrom, 2 * margin );
fdlButtonto.right = new FormAttachment( 100, 0 );
opento.setLayoutData( fdlButtonto );
opento.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
final Shell dialogto = new Shell( shell, SWT.DIALOG_TRIM );
dialogto.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.SelectDate" ) );
dialogto.setImage( GUIResource.getInstance().getImageSpoon() );
dialogto.setLayout( new GridLayout( 3, false ) );
final DateTime calendarto = new DateTime( dialogto, SWT.CALENDAR | SWT.BORDER );
final DateTime timeto = new DateTime( dialogto, SWT.TIME | SWT.TIME );
new Label( dialogto, SWT.NONE );
new Label( dialogto, SWT.NONE );
Button okto = new Button( dialogto, SWT.PUSH );
okto.setText( BaseMessages.getString( PKG, "System.Button.OK" ) );
okto.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
okto.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
wReadTo.setText( calendarto.getYear()
+ "-"
+ ( ( calendarto.getMonth() + 1 ) < 10 ? "0" + ( calendarto.getMonth() + 1 ) : ( calendarto
.getMonth() + 1 ) ) + "-"
+ ( calendarto.getDay() < 10 ? "0" + calendarto.getDay() : calendarto.getDay() ) + " "
+ ( timeto.getHours() < 10 ? "0" + timeto.getHours() : timeto.getHours() ) + ":"
+ ( timeto.getMinutes() < 10 ? "0" + timeto.getMinutes() : timeto.getMinutes() ) + ":"
+ ( timeto.getSeconds() < 10 ? "0" + timeto.getSeconds() : timeto.getSeconds() ) );
dialogto.close();
}
} );
dialogto.setDefaultButton( okto );
dialogto.pack();
dialogto.open();
}
} );
wlReadTo = new Label( wAdvancedGroup, SWT.RIGHT );
wlReadTo.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.ReadTo.Label" ) );
props.setLook( wlReadTo );
fdlReadTo = new FormData();
fdlReadTo.left = new FormAttachment( 0, 0 );
fdlReadTo.top = new FormAttachment( wReadFrom, 2 * margin );
fdlReadTo.right = new FormAttachment( middle, -margin );
wlReadTo.setLayoutData( fdlReadTo );
wReadTo = new TextVar( transMeta, wAdvancedGroup, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wReadTo.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.ReadTo.Tooltip" ) );
props.setLook( wReadTo );
wReadTo.addModifyListener( lsMod );
fdReadTo = new FormData();
fdReadTo.left = new FormAttachment( middle, 0 );
fdReadTo.top = new FormAttachment( wReadFrom, 2 * margin );
fdReadTo.right = new FormAttachment( opento, -margin );
wReadTo.setLayoutData( fdReadTo );
fdAdvancedGroup = new FormData();
fdAdvancedGroup.left = new FormAttachment( 0, margin );
fdAdvancedGroup.top = new FormAttachment( 0, 2 * margin );
fdAdvancedGroup.right = new FormAttachment( 100, -margin );
wAdvancedGroup.setLayoutData( fdAdvancedGroup );
// ///////////////////////////////////////////////////////////
// / END OF Advanced GROUP
// ///////////////////////////////////////////////////////////
// ///////////////////////////////
// START OF Additional Fields GROUP //
// ///////////////////////////////
wAdditionalFields = new Group( wContentComp, SWT.SHADOW_NONE );
props.setLook( wAdditionalFields );
wAdditionalFields.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.wAdditionalFields.Label" ) );
FormLayout AdditionalFieldsgroupLayout = new FormLayout();
AdditionalFieldsgroupLayout.marginWidth = 10;
AdditionalFieldsgroupLayout.marginHeight = 10;
wAdditionalFields.setLayout( AdditionalFieldsgroupLayout );
// Add Salesforce URL in the output stream ?
wlInclURL = new Label( wAdditionalFields, SWT.RIGHT );
wlInclURL.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclURL.Label" ) );
props.setLook( wlInclURL );
fdlInclURL = new FormData();
fdlInclURL.left = new FormAttachment( 0, 0 );
fdlInclURL.top = new FormAttachment( wAdvancedGroup, margin );
fdlInclURL.right = new FormAttachment( middle, -margin );
wlInclURL.setLayoutData( fdlInclURL );
wInclURL = new Button( wAdditionalFields, SWT.CHECK );
props.setLook( wInclURL );
wInclURL.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclURL.Tooltip" ) );
fdInclURL = new FormData();
fdInclURL.left = new FormAttachment( middle, 0 );
fdInclURL.top = new FormAttachment( wAdvancedGroup, margin );
wInclURL.setLayoutData( fdInclURL );
wInclURL.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
setEnableInclTargetURL();
}
} );
wlInclURLField = new Label( wAdditionalFields, SWT.LEFT );
wlInclURLField.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclURLField.Label" ) );
props.setLook( wlInclURLField );
fdlInclURLField = new FormData();
fdlInclURLField.left = new FormAttachment( wInclURL, margin );
fdlInclURLField.top = new FormAttachment( wAdvancedGroup, margin );
wlInclURLField.setLayoutData( fdlInclURLField );
wInclURLField = new TextVar( transMeta, wAdditionalFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wlInclURLField );
wInclURLField.addModifyListener( lsMod );
fdInclURLField = new FormData();
fdInclURLField.left = new FormAttachment( wlInclURLField, margin );
fdInclURLField.top = new FormAttachment( wAdvancedGroup, margin );
fdInclURLField.right = new FormAttachment( 100, 0 );
wInclURLField.setLayoutData( fdInclURLField );
// Add module in the output stream ?
wlInclModule = new Label( wAdditionalFields, SWT.RIGHT );
wlInclModule.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclModule.Label" ) );
props.setLook( wlInclModule );
fdlInclModule = new FormData();
fdlInclModule.left = new FormAttachment( 0, 0 );
fdlInclModule.top = new FormAttachment( wInclURLField, margin );
fdlInclModule.right = new FormAttachment( middle, -margin );
wlInclModule.setLayoutData( fdlInclModule );
wInclModule = new Button( wAdditionalFields, SWT.CHECK );
props.setLook( wInclModule );
wInclModule.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclModule.Tooltip" ) );
fdModule = new FormData();
fdModule.left = new FormAttachment( middle, 0 );
fdModule.top = new FormAttachment( wInclURLField, margin );
wInclModule.setLayoutData( fdModule );
wInclModule.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
setEnableInclModule();
}
} );
wlInclModuleField = new Label( wAdditionalFields, SWT.RIGHT );
wlInclModuleField.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclModuleField.Label" ) );
props.setLook( wlInclModuleField );
fdlInclModuleField = new FormData();
fdlInclModuleField.left = new FormAttachment( wInclModule, margin );
fdlInclModuleField.top = new FormAttachment( wInclURLField, margin );
wlInclModuleField.setLayoutData( fdlInclModuleField );
wInclModuleField = new TextVar( transMeta, wAdditionalFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wInclModuleField );
wInclModuleField.addModifyListener( lsMod );
fdInclModuleField = new FormData();
fdInclModuleField.left = new FormAttachment( wlInclModuleField, margin );
fdInclModuleField.top = new FormAttachment( wInclURLField, margin );
fdInclModuleField.right = new FormAttachment( 100, 0 );
wInclModuleField.setLayoutData( fdInclModuleField );
// Add SQL in the output stream ?
wlInclSQL = new Label( wAdditionalFields, SWT.RIGHT );
wlInclSQL.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclSQL.Label" ) );
props.setLook( wlInclSQL );
fdlInclSQL = new FormData();
fdlInclSQL.left = new FormAttachment( 0, 0 );
fdlInclSQL.top = new FormAttachment( wInclModuleField, margin );
fdlInclSQL.right = new FormAttachment( middle, -margin );
wlInclSQL.setLayoutData( fdlInclSQL );
wInclSQL = new Button( wAdditionalFields, SWT.CHECK );
props.setLook( wInclSQL );
wInclSQL.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclSQL.Tooltip" ) );
fdInclSQL = new FormData();
fdInclSQL.left = new FormAttachment( middle, 0 );
fdInclSQL.top = new FormAttachment( wInclModuleField, margin );
wInclSQL.setLayoutData( fdInclSQL );
wInclSQL.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
setEnableInclSQL();
}
} );
wlInclSQLField = new Label( wAdditionalFields, SWT.LEFT );
wlInclSQLField.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclSQLField.Label" ) );
props.setLook( wlInclSQLField );
fdlInclSQLField = new FormData();
fdlInclSQLField.left = new FormAttachment( wInclSQL, margin );
fdlInclSQLField.top = new FormAttachment( wInclModuleField, margin );
wlInclSQLField.setLayoutData( fdlInclSQLField );
wInclSQLField = new TextVar( transMeta, wAdditionalFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wlInclSQLField );
wInclSQLField.addModifyListener( lsMod );
fdInclSQLField = new FormData();
fdInclSQLField.left = new FormAttachment( wlInclSQLField, margin );
fdInclSQLField.top = new FormAttachment( wInclModuleField, margin );
fdInclSQLField.right = new FormAttachment( 100, 0 );
wInclSQLField.setLayoutData( fdInclSQLField );
// Add Timestamp in the output stream ?
wlInclTimestamp = new Label( wAdditionalFields, SWT.RIGHT );
wlInclTimestamp.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclTimestamp.Label" ) );
props.setLook( wlInclTimestamp );
fdlInclTimestamp = new FormData();
fdlInclTimestamp.left = new FormAttachment( 0, 0 );
fdlInclTimestamp.top = new FormAttachment( wInclSQLField, margin );
fdlInclTimestamp.right = new FormAttachment( middle, -margin );
wlInclTimestamp.setLayoutData( fdlInclTimestamp );
wInclTimestamp = new Button( wAdditionalFields, SWT.CHECK );
props.setLook( wInclTimestamp );
wInclTimestamp.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclTimestamp.Tooltip" ) );
fdInclTimestamp = new FormData();
fdInclTimestamp.left = new FormAttachment( middle, 0 );
fdInclTimestamp.top = new FormAttachment( wInclSQLField, margin );
wInclTimestamp.setLayoutData( fdInclTimestamp );
wInclTimestamp.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
setEnableInclTimestamp();
}
} );
wlInclTimestampField = new Label( wAdditionalFields, SWT.LEFT );
wlInclTimestampField.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclTimestampField.Label" ) );
props.setLook( wlInclTimestampField );
fdlInclTimestampField = new FormData();
fdlInclTimestampField.left = new FormAttachment( wInclTimestamp, margin );
fdlInclTimestampField.top = new FormAttachment( wInclSQLField, margin );
wlInclTimestampField.setLayoutData( fdlInclTimestampField );
wInclTimestampField = new TextVar( transMeta, wAdditionalFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wlInclTimestampField );
wInclTimestampField.addModifyListener( lsMod );
fdInclTimestampField = new FormData();
fdInclTimestampField.left = new FormAttachment( wlInclTimestampField, margin );
fdInclTimestampField.top = new FormAttachment( wInclSQLField, margin );
fdInclTimestampField.right = new FormAttachment( 100, 0 );
wInclTimestampField.setLayoutData( fdInclTimestampField );
// Include Rownum in output stream?
wlInclRownum = new Label( wAdditionalFields, SWT.RIGHT );
wlInclRownum.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclRownum.Label" ) );
props.setLook( wlInclRownum );
FormData fdlInclRownum = new FormData();
fdlInclRownum.left = new FormAttachment( 0, 0 );
fdlInclRownum.top = new FormAttachment( wInclTimestampField, margin );
fdlInclRownum.right = new FormAttachment( middle, -margin );
wlInclRownum.setLayoutData( fdlInclRownum );
wInclRownum = new Button( wAdditionalFields, SWT.CHECK );
props.setLook( wInclRownum );
wInclRownum.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclRownum.Tooltip" ) );
FormData fdRownum = new FormData();
fdRownum.left = new FormAttachment( middle, 0 );
fdRownum.top = new FormAttachment( wInclTimestampField, margin );
wInclRownum.setLayoutData( fdRownum );
wInclRownum.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
setEnableInclRownum();
}
} );
wlInclRownumField = new Label( wAdditionalFields, SWT.RIGHT );
wlInclRownumField.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclRownumField.Label" ) );
props.setLook( wlInclRownumField );
fdlInclRownumField = new FormData();
fdlInclRownumField.left = new FormAttachment( wInclRownum, margin );
fdlInclRownumField.top = new FormAttachment( wInclTimestampField, margin );
wlInclRownumField.setLayoutData( fdlInclRownumField );
wInclRownumField = new TextVar( transMeta, wAdditionalFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wInclRownumField );
wInclRownumField.addModifyListener( lsMod );
FormData fdInclRownumField = new FormData();
fdInclRownumField.left = new FormAttachment( wlInclRownumField, margin );
fdInclRownumField.top = new FormAttachment( wInclTimestampField, margin );
fdInclRownumField.right = new FormAttachment( 100, 0 );
wInclRownumField.setLayoutData( fdInclRownumField );
// Include DeletionDate in output stream?
wlInclDeletionDate = new Label( wAdditionalFields, SWT.RIGHT );
wlInclDeletionDate.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.InclDeletionDate.Label" ) );
props.setLook( wlInclDeletionDate );
fdlInclDeletionDate = new FormData();
fdlInclDeletionDate.left = new FormAttachment( 0, 0 );
fdlInclDeletionDate.top = new FormAttachment( wInclRownumField, margin );
fdlInclDeletionDate.right = new FormAttachment( middle, -margin );
wlInclDeletionDate.setLayoutData( fdlInclDeletionDate );
wInclDeletionDate = new Button( wAdditionalFields, SWT.CHECK );
props.setLook( wInclDeletionDate );
wInclDeletionDate.setToolTipText( BaseMessages.getString(
PKG, "SalesforceInputDialog.InclDeletionDate.Tooltip" ) );
fdDeletionDate = new FormData();
fdDeletionDate.left = new FormAttachment( middle, 0 );
fdDeletionDate.top = new FormAttachment( wInclRownumField, margin );
wInclDeletionDate.setLayoutData( fdDeletionDate );
wInclDeletionDate.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
setEnableInclDeletionDate();
}
} );
wlInclDeletionDateField = new Label( wAdditionalFields, SWT.RIGHT );
wlInclDeletionDateField.setText( BaseMessages.getString(
PKG, "SalesforceInputDialog.InclDeletionDateField.Label" ) );
props.setLook( wlInclDeletionDateField );
fdlInclDeletionDateField = new FormData();
fdlInclDeletionDateField.left = new FormAttachment( wInclDeletionDate, margin );
fdlInclDeletionDateField.top = new FormAttachment( wInclRownumField, margin );
wlInclDeletionDateField.setLayoutData( fdlInclDeletionDateField );
wInclDeletionDateField = new TextVar( transMeta, wAdditionalFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wInclDeletionDateField );
wInclDeletionDateField.addModifyListener( lsMod );
fdInclDeletionDateField = new FormData();
fdInclDeletionDateField.left = new FormAttachment( wlInclDeletionDateField, margin );
fdInclDeletionDateField.top = new FormAttachment( wInclRownumField, margin );
fdInclDeletionDateField.right = new FormAttachment( 100, 0 );
wInclDeletionDateField.setLayoutData( fdInclDeletionDateField );
fdAdditionalFields = new FormData();
fdAdditionalFields.left = new FormAttachment( 0, margin );
fdAdditionalFields.top = new FormAttachment( wAdvancedGroup, margin );
fdAdditionalFields.right = new FormAttachment( 100, -margin );
wAdditionalFields.setLayoutData( fdAdditionalFields );
// ///////////////////////////////////////////////////////////
// / END OF Additional Fields GROUP
// ///////////////////////////////////////////////////////////
// Timeout
wlTimeOut = new Label( wContentComp, SWT.RIGHT );
wlTimeOut.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.TimeOut.Label" ) );
props.setLook( wlTimeOut );
fdlTimeOut = new FormData();
fdlTimeOut.left = new FormAttachment( 0, 0 );
fdlTimeOut.top = new FormAttachment( wAdditionalFields, 2 * margin );
fdlTimeOut.right = new FormAttachment( middle, -margin );
wlTimeOut.setLayoutData( fdlTimeOut );
wTimeOut = new TextVar( transMeta, wContentComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wTimeOut );
wTimeOut.addModifyListener( lsMod );
fdTimeOut = new FormData();
fdTimeOut.left = new FormAttachment( middle, 0 );
fdTimeOut.top = new FormAttachment( wAdditionalFields, 2 * margin );
fdTimeOut.right = new FormAttachment( 100, 0 );
wTimeOut.setLayoutData( fdTimeOut );
// Use compression?
wlUseCompression = new Label( wContentComp, SWT.RIGHT );
wlUseCompression.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.UseCompression.Label" ) );
props.setLook( wlUseCompression );
FormData fdlUseCompression = new FormData();
fdlUseCompression.left = new FormAttachment( 0, 0 );
fdlUseCompression.top = new FormAttachment( wTimeOut, margin );
fdlUseCompression.right = new FormAttachment( middle, -margin );
wlUseCompression.setLayoutData( fdlUseCompression );
wUseCompression = new Button( wContentComp, SWT.CHECK );
props.setLook( wUseCompression );
wUseCompression.setToolTipText( BaseMessages.getString( PKG, "SalesforceInputDialog.UseCompression.Tooltip" ) );
FormData fdUseCompression = new FormData();
fdUseCompression.left = new FormAttachment( middle, 0 );
fdUseCompression.top = new FormAttachment( wTimeOut, margin );
wUseCompression.setLayoutData( fdUseCompression );
// Limit rows
wlLimit = new Label( wContentComp, SWT.RIGHT );
wlLimit.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.Limit.Label" ) );
props.setLook( wlLimit );
fdlLimit = new FormData();
fdlLimit.left = new FormAttachment( 0, 0 );
fdlLimit.top = new FormAttachment( wUseCompression, margin );
fdlLimit.right = new FormAttachment( middle, -margin );
wlLimit.setLayoutData( fdlLimit );
wLimit = new TextVar( transMeta, wContentComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wLimit );
wLimit.addModifyListener( lsMod );
fdLimit = new FormData();
fdLimit.left = new FormAttachment( middle, 0 );
fdLimit.top = new FormAttachment( wUseCompression, margin );
fdLimit.right = new FormAttachment( 100, 0 );
wLimit.setLayoutData( fdLimit );
fdContentComp = new FormData();
fdContentComp.left = new FormAttachment( 0, 0 );
fdContentComp.top = new FormAttachment( 0, 0 );
fdContentComp.right = new FormAttachment( 100, 0 );
fdContentComp.bottom = new FormAttachment( 100, 0 );
wContentComp.setLayoutData( fdContentComp );
wContentComp.layout();
wContentTab.setControl( wContentComp );
// ///////////////////////////////////////////////////////////
// / END OF CONTENT TAB
// ///////////////////////////////////////////////////////////
// Fields tab...
//
wFieldsTab = new CTabItem( wTabFolder, SWT.NONE );
wFieldsTab.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.Fields.Tab" ) );
FormLayout fieldsLayout = new FormLayout();
fieldsLayout.marginWidth = Const.FORM_MARGIN;
fieldsLayout.marginHeight = Const.FORM_MARGIN;
wFieldsComp = new Composite( wTabFolder, SWT.NONE );
wFieldsComp.setLayout( fieldsLayout );
props.setLook( wFieldsComp );
wGet = new Button( wFieldsComp, SWT.PUSH );
wGet.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.GetFields.Button" ) );
fdGet = new FormData();
fdGet.left = new FormAttachment( 50, 0 );
fdGet.bottom = new FormAttachment( 100, 0 );
wGet.setLayoutData( fdGet );
final int FieldsRows = input.getInputFields().length;
colinf =
new ColumnInfo[] {
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Name.Column" ),
ColumnInfo.COLUMN_TYPE_TEXT, false ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Field.Column" ),
ColumnInfo.COLUMN_TYPE_CCOMBO, new String[] { "" }, false ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.IsIdLookup.Column" ),
ColumnInfo.COLUMN_TYPE_CCOMBO, new String[] {
BaseMessages.getString( PKG, "System.Combo.Yes" ),
BaseMessages.getString( PKG, "System.Combo.No" ) }, true ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Type.Column" ),
ColumnInfo.COLUMN_TYPE_CCOMBO, ValueMetaFactory.getValueMetaNames(), true ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Format.Column" ),
ColumnInfo.COLUMN_TYPE_FORMAT, 3 ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Length.Column" ),
ColumnInfo.COLUMN_TYPE_TEXT, false ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Precision.Column" ),
ColumnInfo.COLUMN_TYPE_TEXT, false ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Currency.Column" ),
ColumnInfo.COLUMN_TYPE_TEXT, false ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Decimal.Column" ),
ColumnInfo.COLUMN_TYPE_TEXT, false ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Group.Column" ),
ColumnInfo.COLUMN_TYPE_TEXT, false ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.TrimType.Column" ),
ColumnInfo.COLUMN_TYPE_CCOMBO, SalesforceInputField.trimTypeDesc, true ),
new ColumnInfo(
BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Repeat.Column" ),
ColumnInfo.COLUMN_TYPE_CCOMBO, new String[] {
BaseMessages.getString( PKG, "System.Combo.Yes" ),
BaseMessages.getString( PKG, "System.Combo.No" ) }, true ),
};
colinf[0].setUsingVariables( true );
colinf[0].setToolTip( BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Name.Column.Tooltip" ) );
colinf[1].setUsingVariables( true );
colinf[1].setToolTip( BaseMessages.getString( PKG, "SalesforceInputDialog.FieldsTable.Field.Column.Tooltip" ) );
colinf[2].setReadOnly( true );
wFields =
new TableView( transMeta, wFieldsComp, SWT.FULL_SELECTION | SWT.MULTI, colinf, FieldsRows, lsMod, props );
fdFields = new FormData();
fdFields.left = new FormAttachment( 0, 0 );
fdFields.top = new FormAttachment( 0, 0 );
fdFields.right = new FormAttachment( 100, 0 );
fdFields.bottom = new FormAttachment( wGet, -margin );
wFields.setLayoutData( fdFields );
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 );
wFieldsComp.setLayoutData( fdFieldsComp );
wFieldsComp.layout();
wFieldsTab.setControl( wFieldsComp );
fdTabFolder = new FormData();
fdTabFolder.left = new FormAttachment( 0, 0 );
fdTabFolder.top = new FormAttachment( wStepname, margin );
fdTabFolder.right = new FormAttachment( 100, 0 );
fdTabFolder.bottom = new FormAttachment( 100, -50 );
wTabFolder.setLayoutData( fdTabFolder );
// THE BUTTONS
wOK = new Button( shell, SWT.PUSH );
wOK.setText( BaseMessages.getString( PKG, "System.Button.OK" ) );
wPreview = new Button( shell, SWT.PUSH );
wPreview.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.Button.PreviewRows" ) );
wCancel = new Button( shell, SWT.PUSH );
wCancel.setText( BaseMessages.getString( PKG, "System.Button.Cancel" ) );
setButtonPositions( new Button[] { wOK, wPreview, wCancel }, margin, wTabFolder );
// Add listeners
lsOK = new Listener() {
@Override
public void handleEvent( Event e ) {
ok();
}
};
lsTest = new Listener() {
@Override
public void handleEvent( Event e ) {
test();
}
};
lsGet = new Listener() {
@Override
public void handleEvent( Event e ) {
Cursor busy = new Cursor( shell.getDisplay(), SWT.CURSOR_WAIT );
shell.setCursor( busy );
get();
shell.setCursor( null );
busy.dispose();
}
};
lsPreview = new Listener() {
@Override
public void handleEvent( Event e ) {
preview();
}
};
lsCancel = new Listener() {
@Override
public void handleEvent( Event e ) {
cancel();
}
};
wOK.addListener( SWT.Selection, lsOK );
wGet.addListener( SWT.Selection, lsGet );
wTest.addListener( SWT.Selection, lsTest );
wPreview.addListener( SWT.Selection, lsPreview );
wCancel.addListener( SWT.Selection, lsCancel );
lsDef = new SelectionAdapter() {
@Override
public void widgetDefaultSelected( SelectionEvent e ) {
ok();
}
};
wStepname.addSelectionListener( lsDef );
wLimit.addSelectionListener( lsDef );
wInclModuleField.addSelectionListener( lsDef );
wInclURLField.addSelectionListener( lsDef );
// Detect X or ALT-F4 or something that kills this window...
shell.addShellListener( new ShellAdapter() {
@Override
public void shellClosed( ShellEvent e ) {
cancel();
}
} );
wTabFolder.setSelection( 0 );
// Set the shell size, based upon previous time...
setSize();
getData( input );
setEnableInclTargetURL();
setEnableInclSQL();
setEnableInclTimestamp();
setEnableInclModule();
setEnableInclRownum();
setEnableInclDeletionDate();
setEnableQuery();
input.setChanged( changed );
shell.open();
while ( !shell.isDisposed() ) {
if ( !display.readAndDispatch() ) {
display.sleep();
}
}
return stepname;
}
private void setEnableInclTargetURL() {
wInclURLField.setEnabled( wInclURL.getSelection() );
wlInclURLField.setEnabled( wInclURL.getSelection() );
}
private void setEnableQuery() {
wQuery.setVisible( wspecifyQuery.getSelection() );
wlCondition.setVisible( !wspecifyQuery.getSelection() );
wCondition.setVisible( !wspecifyQuery.getSelection() );
wlModule.setVisible( !wspecifyQuery.getSelection() );
wModule.setVisible( !wspecifyQuery.getSelection() );
if ( wspecifyQuery.getSelection() ) {
if ( wInclModule.getSelection() ) {
wInclModule.setSelection( false );
}
wRecordsFilter.setText( SalesforceConnectionUtils
.getRecordsFilterDesc( SalesforceConnectionUtils.RECORDS_FILTER_ALL ) );
}
wlInclModule.setEnabled( !wspecifyQuery.getSelection() );
wInclModule.setEnabled( !wspecifyQuery.getSelection() );
setEnableInclModule();
wlRecordsFilter.setEnabled( !wspecifyQuery.getSelection() );
wRecordsFilter.setEnabled( !wspecifyQuery.getSelection() );
updateRecordsFilter();
enableCondition();
}
private void setEnableInclSQL() {
wInclSQLField.setEnabled( wInclSQL.getSelection() );
wlInclSQLField.setEnabled( wInclSQL.getSelection() );
}
private void setEnableInclTimestamp() {
wInclTimestampField.setEnabled( wInclTimestamp.getSelection() );
wlInclTimestampField.setEnabled( wInclTimestamp.getSelection() );
}
private void setEnableInclModule() {
wInclModuleField.setEnabled( wInclModule.getSelection() && !wspecifyQuery.getSelection() );
wlInclModuleField.setEnabled( wInclModule.getSelection() && !wspecifyQuery.getSelection() );
}
private void setEnableInclRownum() {
wInclRownumField.setEnabled( wInclRownum.getSelection() );
wlInclRownumField.setEnabled( wInclRownum.getSelection() );
}
private void setEnableInclDeletionDate() {
wInclDeletionDateField.setEnabled( wInclDeletionDate.getSelection() );
wlInclDeletionDateField.setEnabled( wInclDeletionDate.getSelection() );
}
private void get() {
SalesforceConnection connection = null;
try {
SalesforceInputMeta meta = new SalesforceInputMeta();
getInfo( meta );
// Clear Fields Grid
wFields.removeAll();
// get real values
String realModule = transMeta.environmentSubstitute( meta.getModule() );
String realURL = transMeta.environmentSubstitute( meta.getTargetURL() );
String realUsername = transMeta.environmentSubstitute( meta.getUsername() );
String realPassword = Utils.resolvePassword( transMeta, meta.getPassword() );
int realTimeOut = Const.toInt( transMeta.environmentSubstitute( meta.getTimeout() ), 0 );
connection = new SalesforceConnection( log, realURL, realUsername, realPassword );
connection.setTimeOut( realTimeOut );
String[] fieldsName = null;
if ( meta.isSpecifyQuery() ) {
// Free hand SOQL
String realQuery = transMeta.environmentSubstitute( meta.getQuery() );
connection.setSQL( realQuery );
connection.connect();
// We are connected, so let's query
XmlObject[] fields = connection.getElements();
int nrFields = fields.length;
Set<String> fieldNames = new HashSet<>();
for ( int i = 0; i < nrFields; i++ ) {
addFields( "", fieldNames, fields[i] );
}
fieldsName = fieldNames.toArray( new String[fieldNames.size()] );
} else {
connection.connect();
Field[] fields = connection.getObjectFields( realModule );
fieldsName = new String[fields.length];
for ( int i = 0; i < fields.length; i++ ) {
Field field = fields[i];
fieldsName[i] = field.getName();
addField( field );
}
}
if ( fieldsName != null ) {
colinf[1].setComboValues( fieldsName );
}
wFields.removeEmptyRows();
wFields.setRowNums();
wFields.optWidth( true );
} catch ( KettleException e ) {
new ErrorDialog(
shell, BaseMessages.getString( PKG, "SalesforceInputMeta.ErrorRetrieveData.DialogTitle" ), BaseMessages
.getString( PKG, "SalesforceInputMeta.ErrorRetrieveData.DialogMessage" ), e );
} catch ( Exception e ) {
new ErrorDialog(
shell, BaseMessages.getString( PKG, "SalesforceInputMeta.ErrorRetrieveData.DialogTitle" ), BaseMessages
.getString( PKG, "SalesforceInputMeta.ErrorRetrieveData.DialogMessage" ), e );
} finally {
if ( connection != null ) {
try {
connection.close();
} catch ( Exception e ) {
// Ignore errors
}
}
}
}
void addFields( String prefix, Set<String> fieldNames, XmlObject field ) {
//Salesforce SOAP Api sends IDs always in the response, even if we don't request it in SOQL query and
//the id's value is null in this case. So, do not add this Id to the fields list
if ( isNullIdField( field ) ) {
return;
}
String fieldname = prefix + field.getName().getLocalPart();
if ( field instanceof SObject ) {
SObject sobject = (SObject) field;
for ( XmlObject element : SalesforceConnection.getChildren( sobject ) ) {
addFields( fieldname + ".", fieldNames, element );
}
} else {
addField( fieldname, fieldNames, (String) field.getValue() );
}
}
private boolean isNullIdField( XmlObject field ) {
return field.getName().getLocalPart().equalsIgnoreCase( "ID" ) && field.getValue() == null;
}
private void addField( Field field ) {
String fieldType = field.getType().toString();
String fieldLength = null;
String fieldPrecision = null;
if ( !fieldType.equals( "boolean" ) && !fieldType.equals( "datetime" ) && !fieldType.equals( "date" ) ) {
fieldLength = Integer.toString( field.getLength() );
fieldPrecision = Integer.toString( field.getPrecision() );
}
addFieldToTable(
field.getLabel(), field.getName(), field.isIdLookup(), field.getType().toString(), fieldLength,
fieldPrecision );
}
private void addField( String fieldName, Set<String> fieldNames, String firstValue ) {
//no duplicates allowed
if ( !fieldNames.add( fieldName ) ) {
return;
}
// Try to guess field type
// I know it's not clean (see up)
final String fieldType;
String fieldLength = null;
String fieldPrecision = null;
if ( Const.NVL( firstValue, "null" ).equals( "null" ) ) {
fieldType = "string";
} else {
if ( StringUtil.IsDate( firstValue, DEFAULT_DATE_TIME_FORMAT ) ) {
fieldType = "datetime";
} else if ( StringUtil.IsDate( firstValue, DEFAULT_DATE_FORMAT ) ) {
fieldType = "date";
} else if ( StringUtil.IsInteger( firstValue ) ) {
fieldType = "int";
fieldLength = Integer.toString( ValueMetaInterface.DEFAULT_INTEGER_LENGTH );
} else if ( StringUtil.IsNumber( firstValue ) ) {
fieldType = "double";
} else if ( firstValue.equals( "true" ) || firstValue.equals( "false" ) ) {
fieldType = "boolean";
} else {
fieldType = "string";
}
}
addFieldToTable( fieldName, fieldName, false, fieldType, fieldLength, fieldPrecision );
}
void addFieldToTable( String fieldLabel, String fieldName, boolean fieldIdIsLookup, String fieldType,
String fieldLength, String fieldPrecision ) {
TableItem item = new TableItem( wFields.table, SWT.NONE );
item.setText( 1, fieldLabel );
item.setText( 2, fieldName );
item.setText( 3, fieldIdIsLookup ? BaseMessages.getString( PKG, "System.Combo.Yes" ) : BaseMessages.getString(
PKG, "System.Combo.No" ) );
// Try to get the Type
if ( fieldType.equals( "boolean" ) ) {
item.setText( 4, "Boolean" );
} else if ( fieldType.equals( "date" ) ) {
item.setText( 4, "Date" );
item.setText( 5, DEFAULT_DATE_FORMAT );
} else if ( fieldType.equals( "datetime" ) ) {
item.setText( 4, "Date" );
item.setText( 5, DEFAULT_DATE_TIME_FORMAT );
} else if ( fieldType.equals( "double" ) ) {
item.setText( 4, "Number" );
} else if ( fieldType.equals( "int" ) ) {
item.setText( 4, "Integer" );
} else {
item.setText( 4, "String" );
}
if ( fieldLength != null ) {
item.setText( 6, fieldLength );
}
// Get precision
if ( fieldPrecision != null ) {
item.setText( 7, fieldPrecision );
}
}
private void updateRecordsFilter() {
boolean activeFilter =
( !wspecifyQuery.getSelection() && SalesforceConnectionUtils.getRecordsFilterByDesc( wRecordsFilter
.getText() ) != SalesforceConnectionUtils.RECORDS_FILTER_ALL );
wlReadFrom.setEnabled( activeFilter );
wReadFrom.setEnabled( activeFilter );
open.setEnabled( activeFilter );
wlReadTo.setEnabled( activeFilter );
wReadTo.setEnabled( activeFilter );
opento.setEnabled( activeFilter );
wlQueryAll.setEnabled( !activeFilter );
wQueryAll.setEnabled( !activeFilter );
enableCondition();
boolean activateDeletionDate =
SalesforceConnectionUtils.getRecordsFilterByDesc( wRecordsFilter.getText() )
== SalesforceConnectionUtils.RECORDS_FILTER_DELETED;
if ( !activateDeletionDate ) {
wInclDeletionDate.setSelection( false );
}
wlInclDeletionDate.setEnabled( activateDeletionDate );
wInclDeletionDate.setEnabled( activateDeletionDate );
wlInclDeletionDateField.setEnabled( activateDeletionDate );
wInclDeletionDateField.setEnabled( activateDeletionDate );
}
/**
* Read the data from the TextFileInputMeta object and show it in this dialog.
*
* @param in
* The SalesforceInputMeta object to obtain the data from.
*/
public void getData( SalesforceInputMeta in ) {
wURL.setText( Const.NVL( in.getTargetURL(), "" ) );
wUserName.setText( Const.NVL( in.getUsername(), "" ) );
wPassword.setText( Const.NVL( in.getPassword(), "" ) );
wModule.setText( Const.NVL( in.getModule(), "Account" ) );
wCondition.setText( Const.NVL( in.getCondition(), "" ) );
wspecifyQuery.setSelection( in.isSpecifyQuery() );
wQuery.setText( Const.NVL( in.getQuery(), "" ) );
wRecordsFilter.setText( SalesforceConnectionUtils.getRecordsFilterDesc( input.getRecordsFilter() ) );
wInclURLField.setText( Const.NVL( in.getTargetURLField(), "" ) );
wInclURL.setSelection( in.includeTargetURL() );
wInclSQLField.setText( Const.NVL( in.getSQLField(), "" ) );
wInclSQL.setSelection( in.includeSQL() );
wInclTimestampField.setText( Const.NVL( in.getTimestampField(), "" ) );
wInclTimestamp.setSelection( in.includeTimestamp() );
wInclDeletionDateField.setText( Const.NVL( in.getDeletionDateField(), "" ) );
wInclDeletionDate.setSelection( in.includeDeletionDate() );
wInclModuleField.setText( Const.NVL( in.getModuleField(), "" ) );
wInclModule.setSelection( in.includeModule() );
wInclRownumField.setText( Const.NVL( in.getRowNumberField(), "" ) );
wInclRownum.setSelection( in.includeRowNumber() );
wTimeOut.setText( Const.NVL( in.getTimeout(), SalesforceConnectionUtils.DEFAULT_TIMEOUT ) );
wUseCompression.setSelection( in.isCompression() );
wQueryAll.setSelection( in.isQueryAll() );
wLimit.setText( "" + in.getRowLimit() );
wReadFrom.setText( Const.NVL( in.getReadFrom(), "" ) );
wReadTo.setText( Const.NVL( in.getReadTo(), "" ) );
if ( log.isDebug() ) {
logDebug( BaseMessages.getString( PKG, "SalesforceInputDialog.Log.GettingFieldsInfo" ) );
}
for ( int i = 0; i < in.getInputFields().length; i++ ) {
SalesforceInputField field = in.getInputFields()[i];
if ( field != null ) {
TableItem item = wFields.table.getItem( i );
String name = field.getName();
String path = field.getField();
String isidlookup =
field.isIdLookup() ? BaseMessages.getString( PKG, "System.Combo.Yes" ) : BaseMessages.getString(
PKG, "System.Combo.No" );
String type = field.getTypeDesc();
String format = field.getFormat();
String length = "" + field.getLength();
String prec = "" + field.getPrecision();
String curr = field.getCurrencySymbol();
String group = field.getGroupSymbol();
String decim = field.getDecimalSymbol();
String trim = field.getTrimTypeDesc();
String rep =
field.isRepeated() ? BaseMessages.getString( PKG, "System.Combo.Yes" ) : BaseMessages.getString(
PKG, "System.Combo.No" );
if ( name != null ) {
item.setText( 1, name );
}
if ( path != null ) {
item.setText( 2, path );
}
if ( isidlookup != null ) {
item.setText( 3, isidlookup );
}
if ( type != null ) {
item.setText( 4, type );
}
if ( format != null ) {
item.setText( 5, format );
}
if ( length != null && !"-1".equals( length ) ) {
item.setText( 6, length );
}
if ( prec != null && !"-1".equals( prec ) ) {
item.setText( 7, prec );
}
if ( curr != null ) {
item.setText( 8, curr );
}
if ( decim != null ) {
item.setText( 9, decim );
}
if ( group != null ) {
item.setText( 10, group );
}
if ( trim != null ) {
item.setText( 11, trim );
}
if ( rep != null ) {
item.setText( 12, rep );
}
}
}
wFields.removeEmptyRows();
wFields.setRowNums();
wFields.optWidth( true );
wStepname.selectAll();
wStepname.setFocus();
}
private void cancel() {
stepname = null;
input.setChanged( changed );
dispose();
}
private void ok() {
if ( Utils.isEmpty( wStepname.getText() ) ) {
return;
}
stepname = wStepname.getText();
try {
getInfo( input );
} catch ( KettleException e ) {
new ErrorDialog(
shell, BaseMessages.getString( PKG, "SalesforceInputDialog.ErrorValidateData.DialogTitle" ),
BaseMessages.getString( PKG, "SalesforceInputDialog.ErrorValidateData.DialogMessage" ), e );
}
dispose();
}
@Override
protected void getInfo( SalesforceStepMeta in ) throws KettleException {
SalesforceInputMeta meta = (SalesforceInputMeta) in;
stepname = wStepname.getText(); // return value
// copy info to SalesforceInputMeta class (input)
meta.setTargetURL( Const.NVL( wURL.getText(), SalesforceConnectionUtils.TARGET_DEFAULT_URL ) );
meta.setUsername( Const.NVL( wUserName.getText(), "" ) );
meta.setPassword( Const.NVL( wPassword.getText(), "" ) );
meta.setModule( Const.NVL( wModule.getText(), "Account" ) );
meta.setCondition( Const.NVL( wCondition.getText(), "" ) );
meta.setSpecifyQuery( wspecifyQuery.getSelection() );
meta.setQuery( Const.NVL( wQuery.getText(), "" ) );
meta.setCompression( wUseCompression.getSelection() );
meta.setQueryAll( wQueryAll.getSelection() );
meta.setTimeout( Const.NVL( wTimeOut.getText(), "0" ) );
meta.setRowLimit( Const.NVL( wLimit.getText(), "0" ) );
meta.setTargetURLField( Const.NVL( wInclURLField.getText(), "" ) );
meta.setSQLField( Const.NVL( wInclSQLField.getText(), "" ) );
meta.setTimestampField( Const.NVL( wInclTimestampField.getText(), "" ) );
meta.setModuleField( Const.NVL( wInclModuleField.getText(), "" ) );
meta.setRowNumberField( Const.NVL( wInclRownumField.getText(), "" ) );
meta.setRecordsFilter( SalesforceConnectionUtils.getRecordsFilterByDesc( wRecordsFilter.getText() ) );
meta.setIncludeTargetURL( wInclURL.getSelection() );
meta.setIncludeSQL( wInclSQL.getSelection() );
meta.setIncludeTimestamp( wInclTimestamp.getSelection() );
meta.setIncludeModule( wInclModule.getSelection() );
meta.setIncludeRowNumber( wInclRownum.getSelection() );
meta.setReadFrom( wReadFrom.getText() );
meta.setReadTo( wReadTo.getText() );
meta.setDeletionDateField( Const.NVL( wInclDeletionDateField.getText(), "" ) );
meta.setIncludeDeletionDate( wInclDeletionDate.getSelection() );
int nrFields = wFields.nrNonEmpty();
meta.allocate( nrFields );
for ( int i = 0; i < nrFields; i++ ) {
SalesforceInputField field = new SalesforceInputField();
TableItem item = wFields.getNonEmpty( i );
field.setName( item.getText( 1 ) );
field.setField( item.getText( 2 ) );
field.setIdLookup( BaseMessages.getString( PKG, "System.Combo.Yes" ).equalsIgnoreCase( item.getText( 3 ) ) );
field.setType( ValueMetaFactory.getIdForValueMeta( item.getText( 4 ) ) );
field.setFormat( item.getText( 5 ) );
field.setLength( Const.toInt( item.getText( 6 ), -1 ) );
field.setPrecision( Const.toInt( item.getText( 7 ), -1 ) );
field.setCurrencySymbol( item.getText( 8 ) );
field.setDecimalSymbol( item.getText( 9 ) );
field.setGroupSymbol( item.getText( 10 ) );
field.setTrimType( SalesforceInputField.getTrimTypeByDesc( item.getText( 11 ) ) );
field.setRepeated( BaseMessages.getString( PKG, "System.Combo.Yes" ).equalsIgnoreCase( item.getText( 12 ) ) );
//CHECKSTYLE:Indentation:OFF
meta.getInputFields()[i] = field;
}
}
// Preview the data
private void preview() {
try {
SalesforceInputMeta oneMeta = new SalesforceInputMeta();
getInfo( oneMeta );
// check if the path is given
TransMeta previewMeta =
TransPreviewFactory.generatePreviewTransformation( transMeta, oneMeta, wStepname.getText() );
EnterNumberDialog numberDialog = new EnterNumberDialog( shell, props.getDefaultPreviewSize(),
BaseMessages.getString( PKG, "SalesforceInputDialog.NumberRows.DialogTitle" ),
BaseMessages.getString( PKG, "SalesforceInputDialog.NumberRows.DialogMessage" ) );
int previewSize = numberDialog.open();
if ( previewSize > 0 ) {
TransPreviewProgressDialog progressDialog =
new TransPreviewProgressDialog(
shell, previewMeta, new String[] { wStepname.getText() }, new int[] { previewSize } );
progressDialog.open();
if ( !progressDialog.isCancelled() ) {
Trans trans = progressDialog.getTrans();
String loggingText = progressDialog.getLoggingText();
if ( trans.getResult() != null && trans.getResult().getNrErrors() > 0 ) {
EnterTextDialog etd =
new EnterTextDialog(
shell, BaseMessages.getString( PKG, "System.Dialog.PreviewError.Title" ), BaseMessages
.getString( PKG, "System.Dialog.PreviewError.Message" ), loggingText, true );
etd.setReadOnly();
etd.open();
}
PreviewRowsDialog prd =
new PreviewRowsDialog(
shell, transMeta, SWT.NONE, wStepname.getText(), progressDialog.getPreviewRowsMeta( wStepname
.getText() ), progressDialog.getPreviewRows( wStepname.getText() ), loggingText );
prd.open();
}
}
} catch ( KettleException e ) {
new ErrorDialog( shell, BaseMessages
.getString( PKG, "SalesforceInputDialog.ErrorPreviewingData.DialogTitle" ), BaseMessages.getString(
PKG, "SalesforceInputDialog.ErrorPreviewingData.DialogMessage" ), e );
}
}
private void getModulesList() {
if ( !gotModule ) {
SalesforceConnection connection = null;
String selectedField = wModule.getText();
wModule.removeAll();
try {
SalesforceInputMeta meta = new SalesforceInputMeta();
getInfo( meta );
String url = transMeta.environmentSubstitute( meta.getTargetURL() );
// Define a new Salesforce connection
connection =
new SalesforceConnection( log, url, transMeta.environmentSubstitute( meta.getUsername() ),
Utils.resolvePassword( transMeta, meta.getPassword() ) );
// connect to Salesforce
connection.connect();
// retrieve modules list
String[] modules = connection.getAllAvailableObjects( true );
if ( modules != null && modules.length > 0 ) {
// populate Combo
wModule.setItems( modules );
}
gotModule = true;
getModulesListError = false;
} catch ( Exception e ) {
new ErrorDialog( shell, BaseMessages.getString(
PKG, "SalesforceInputDialog.ErrorRetrieveModules.DialogTitle" ), BaseMessages.getString(
PKG, "SalesforceInputDialog.ErrorRetrieveData.ErrorRetrieveModules" ), e );
getModulesListError = true;
} finally {
if ( !Utils.isEmpty( selectedField ) ) {
wModule.setText( selectedField );
}
if ( connection != null ) {
try {
connection.close();
} catch ( Exception e ) { /* Ignore */
}
}
}
}
}
protected void setQueryToolTip() {
StyledTextComp control = wCondition;
if ( wspecifyQuery.getSelection() ) {
control = wQuery;
}
control.setToolTipText( transMeta.environmentSubstitute( control.getText() ) );
}
public void setPosition() {
StyledTextComp control = wCondition;
if ( wspecifyQuery.getSelection() ) {
control = wQuery;
}
String scr = control.getText();
int linenr = control.getLineAtOffset( control.getCaretOffset() ) + 1;
int posnr = control.getCaretOffset();
// Go back from position to last CR: how many positions?
int colnr = 0;
while ( posnr > 0 && scr.charAt( posnr - 1 ) != '\n' && scr.charAt( posnr - 1 ) != '\r' ) {
posnr--;
colnr++;
}
wlPosition.setText( BaseMessages.getString( PKG, "SalesforceInputDialog.Position.Label", "" + linenr, ""
+ colnr ) );
}
private void enableCondition() {
boolean enableCondition =
!wspecifyQuery.getSelection()
&& SalesforceConnectionUtils.getRecordsFilterByDesc( wRecordsFilter.getText() )
== SalesforceConnectionUtils.RECORDS_FILTER_ALL;
wlCondition.setVisible( enableCondition );
wCondition.setVisible( enableCondition );
wlPosition.setVisible( enableCondition );
}
}