/*! ****************************************************************************** * * 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.trans.steps.mailinput; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.mail.Folder; import org.apache.commons.lang.StringUtils; 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.FocusListener; 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.SelectionListener; import org.eclipse.swt.events.ShellAdapter; import org.eclipse.swt.events.ShellEvent; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.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.Control; 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.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.pentaho.di.core.Const; import org.pentaho.di.core.util.Utils; import org.pentaho.di.core.Props; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.logging.LogChannel; import org.pentaho.di.core.row.RowMetaInterface; import org.pentaho.di.i18n.BaseMessages; import org.pentaho.di.job.entries.getpop.MailConnection; import org.pentaho.di.job.entries.getpop.MailConnectionMeta; import org.pentaho.di.trans.Trans; import org.pentaho.di.trans.TransMeta; import org.pentaho.di.trans.TransPreviewFactory; import org.pentaho.di.trans.step.BaseStepMeta; import org.pentaho.di.trans.step.StepDialogInterface; import org.pentaho.di.trans.steps.mailinput.MailInputField; import org.pentaho.di.trans.steps.mailinput.MailInputMeta; 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.gui.WindowProperty; import org.pentaho.di.ui.core.widget.ColumnInfo; import org.pentaho.di.ui.core.widget.PasswordTextVar; import org.pentaho.di.ui.core.widget.TableView; import org.pentaho.di.ui.core.widget.TextVar; import org.pentaho.di.ui.job.entries.getpop.SelectFolderDialog; import org.pentaho.di.ui.trans.dialog.TransPreviewProgressDialog; import org.pentaho.di.ui.trans.step.BaseStepDialog; public class MailInputDialog extends BaseStepDialog implements StepDialogInterface { private static Class<?> PKG = MailInputMeta.class; // for i18n purposes, needed by Translator2!! private MailInputMeta input; private Label wlServerName; private TextVar wServerName; private FormData fdlServerName, fdServerName; private Label wlSender; private TextVar wSender; private FormData fdlSender, fdSender; private Label wlReceipient; private TextVar wReceipient; private FormData fdlReceipient, fdReceipient; private Label wlSubject; private TextVar wSubject; private FormData fdlSubject, fdSubject; private Label wlUserName; private TextVar wUserName; private FormData fdlUserName, fdUserName; private Label wlIMAPFolder; private TextVar wIMAPFolder; private FormData fdlIMAPFolder, fdIMAPFolder; private Label wlPassword; private TextVar wPassword; private FormData fdlPassword, fdPassword; private Label wlUseProxy; private Button wUseProxy; private FormData fdlUseProxy, fdUseProxy; private Label wlProxyUsername; private TextVar wProxyUsername; private Label wlListmails; private CCombo wListmails; private FormData fdlListmails, fdListmails; private Label wlIMAPListmails; private CCombo wIMAPListmails; private FormData fdlIMAPListmails, fdIMAPListmails; private Label wlFirstmails; private TextVar wFirstmails; private FormData fdlFirstmails, fdFirstmails; private Label wlIMAPFirstmails; private TextVar wIMAPFirstmails; private FormData fdlIMAPFirstmails, fdIMAPFirstmails; private Label wlPort; private TextVar wPort; private FormData fdlPort, fdPort; private Label wlUseSSL; private Button wUseSSL; private FormData fdlUseSSL, fdUseSSL; private Label wlIncludeSubFolders; private Button wIncludeSubFolders; private FormData fdlIncludeSubFolders, fdIncludeSubFolders; private Button wNegateSender; private FormData fdNegateSender; private Button wNegateReceipient; private FormData fdNegateReceipient; private Button wNegateSubject; private FormData fdNegateSubject; private Button wNegateReceivedDate; private FormData fdNegateReceivedDate; private Label wlPOP3Message; private FormData fdlPOP3Message; private CTabFolder wTabFolder; private Composite wGeneralComp, wSettingsComp, wSearchComp, wFieldsComp; private CTabItem wGeneralTab, wSettingsTab, wSearchTab, wFieldsTab; private FormData fdGeneralComp, fdSettingsComp, fdSearchComp, fdFieldsComp; private FormData fdTabFolder; private Group wServerSettings, wPOP3Settings, wIMAPSettings, wReceivedDate, wHeader; private FormData fdServerSettings, fdPOP3Settings, fdIMAPSettings, fdReceivedDate, fdHeader; private Label wlLimit; private Text wLimit; private FormData fdlLimit, fdLimit; private Label wlReadFrom; private TextVar wReadFrom; private FormData fdlReadFrom, fdReadFrom; private Button open; private Label wlConditionOnReceivedDate; private CCombo wConditionOnReceivedDate; private FormData fdlConditionOnReceivedDate, fdConditionOnReceivedDate; private Label wlReadTo; private TextVar wReadTo; private FormData fdlReadTo, fdReadTo; private Button opento; private Label wlProtocol; private CCombo wProtocol; private Button wTest; private FormData fdTest; private Listener lsTest; private Button wTestIMAPFolder; private FormData fdTestIMAPFolder; private Listener lsTestIMAPFolder; private Button wSelectFolder; private FormData fdSelectFolder; private Listener lsSelectFolder; private Label wlFolderField, wldynamicFolder; private FormData fdldynamicFolder, fddynamicFolder, fdlFolderField, fdFolderField; private CCombo wFolderField; private Button wdynamicFolder; private TableView wFields; private FormData fdFields; private MailConnection mailConn = null; private boolean gotPreviousfields = false; private Button wUseBatch; private Group wBatchSettingsGroup; private Text wBatchSize; private TextVar wStartMessage; private TextVar wEndMessage; private Label wlIgnoreFieldErrors; private Button wIgnoreFieldErrors; public MailInputDialog( Shell parent, Object in, TransMeta tr, String sname ) { super( parent, (BaseStepMeta) in, tr, sname ); input = (MailInputMeta) in; } public String open() { Shell parent = getParent(); Display display = parent.getDisplay(); shell = new Shell( parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MIN | SWT.MAX ); props.setLook( shell ); setShellImage( shell, input ); ModifyListener lsMod = new ModifyListener() { public void modifyText( ModifyEvent e ) { closeMailConnection(); input.setChanged(); } }; SelectionListener lsSelection = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { input.setChanged(); closeMailConnection(); } }; 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, "MailInputdialog.Shell.Title" ) ); int middle = props.getMiddlePct(); int margin = Const.MARGIN; // Stepname line wlStepname = new Label( shell, SWT.RIGHT ); wlStepname.setText( BaseMessages.getString( PKG, "MailInputdialog.Stepname.Label" ) ); props.setLook( wlStepname ); fdlStepname = new FormData(); fdlStepname.left = new FormAttachment( 0, 0 ); fdlStepname.right = new FormAttachment( middle, -margin ); fdlStepname.top = new FormAttachment( 0, 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 GENERAL TAB /// // //////////////////////// wGeneralTab = new CTabItem( wTabFolder, SWT.NONE ); wGeneralTab.setText( BaseMessages.getString( PKG, "MailInput.Tab.General.Label" ) ); wGeneralComp = new Composite( wTabFolder, SWT.NONE ); props.setLook( wGeneralComp ); FormLayout generalLayout = new FormLayout(); generalLayout.marginWidth = 3; generalLayout.marginHeight = 3; wGeneralComp.setLayout( generalLayout ); // //////////////////////// // START OF SERVER SETTINGS GROUP/// // / wServerSettings = new Group( wGeneralComp, SWT.SHADOW_NONE ); props.setLook( wServerSettings ); wServerSettings.setText( BaseMessages.getString( PKG, "MailInput.ServerSettings.Group.Label" ) ); FormLayout ServerSettingsgroupLayout = new FormLayout(); ServerSettingsgroupLayout.marginWidth = 10; ServerSettingsgroupLayout.marginHeight = 10; wServerSettings.setLayout( ServerSettingsgroupLayout ); // ServerName line wlServerName = new Label( wServerSettings, SWT.RIGHT ); wlServerName.setText( BaseMessages.getString( PKG, "MailInput.Server.Label" ) ); props.setLook( wlServerName ); fdlServerName = new FormData(); fdlServerName.left = new FormAttachment( 0, 0 ); fdlServerName.top = new FormAttachment( 0, 2 * margin ); fdlServerName.right = new FormAttachment( middle, -margin ); wlServerName.setLayoutData( fdlServerName ); wServerName = new TextVar( transMeta, wServerSettings, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wServerName ); wServerName.addModifyListener( lsMod ); fdServerName = new FormData(); fdServerName.left = new FormAttachment( middle, 0 ); fdServerName.top = new FormAttachment( 0, 2 * margin ); fdServerName.right = new FormAttachment( 100, 0 ); wServerName.setLayoutData( fdServerName ); // USE connection with SSL wlUseSSL = new Label( wServerSettings, SWT.RIGHT ); wlUseSSL.setText( BaseMessages.getString( PKG, "MailInput.UseSSLMails.Label" ) ); props.setLook( wlUseSSL ); fdlUseSSL = new FormData(); fdlUseSSL.left = new FormAttachment( 0, 0 ); fdlUseSSL.top = new FormAttachment( wServerName, margin ); fdlUseSSL.right = new FormAttachment( middle, -margin ); wlUseSSL.setLayoutData( fdlUseSSL ); wUseSSL = new Button( wServerSettings, SWT.CHECK ); props.setLook( wUseSSL ); fdUseSSL = new FormData(); wUseSSL.setToolTipText( BaseMessages.getString( PKG, "MailInput.UseSSLMails.Tooltip" ) ); fdUseSSL.left = new FormAttachment( middle, 0 ); fdUseSSL.top = new FormAttachment( wServerName, margin ); fdUseSSL.right = new FormAttachment( 100, 0 ); wUseSSL.setLayoutData( fdUseSSL ); wUseSSL.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { closeMailConnection(); refreshPort( true ); } } ); // port wlPort = new Label( wServerSettings, SWT.RIGHT ); wlPort.setText( BaseMessages.getString( PKG, "MailInput.SSLPort.Label" ) ); props.setLook( wlPort ); fdlPort = new FormData(); fdlPort.left = new FormAttachment( 0, 0 ); fdlPort.top = new FormAttachment( wUseSSL, margin ); fdlPort.right = new FormAttachment( middle, -margin ); wlPort.setLayoutData( fdlPort ); wPort = new TextVar( transMeta, wServerSettings, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wPort ); wPort.setToolTipText( BaseMessages.getString( PKG, "MailInput.SSLPort.Tooltip" ) ); wPort.addModifyListener( lsMod ); fdPort = new FormData(); fdPort.left = new FormAttachment( middle, 0 ); fdPort.top = new FormAttachment( wUseSSL, margin ); fdPort.right = new FormAttachment( 100, 0 ); wPort.setLayoutData( fdPort ); // UserName line wlUserName = new Label( wServerSettings, SWT.RIGHT ); wlUserName.setText( BaseMessages.getString( PKG, "MailInput.Username.Label" ) ); props.setLook( wlUserName ); fdlUserName = new FormData(); fdlUserName.left = new FormAttachment( 0, 0 ); fdlUserName.top = new FormAttachment( wPort, margin ); fdlUserName.right = new FormAttachment( middle, -margin ); wlUserName.setLayoutData( fdlUserName ); wUserName = new TextVar( transMeta, wServerSettings, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wUserName ); wUserName.setToolTipText( BaseMessages.getString( PKG, "MailInput.Username.Tooltip" ) ); wUserName.addModifyListener( lsMod ); fdUserName = new FormData(); fdUserName.left = new FormAttachment( middle, 0 ); fdUserName.top = new FormAttachment( wPort, margin ); fdUserName.right = new FormAttachment( 100, 0 ); wUserName.setLayoutData( fdUserName ); // Password line wlPassword = new Label( wServerSettings, SWT.RIGHT ); wlPassword.setText( BaseMessages.getString( PKG, "MailInput.Password.Label" ) ); props.setLook( wlPassword ); fdlPassword = new FormData(); fdlPassword.left = new FormAttachment( 0, 0 ); fdlPassword.top = new FormAttachment( wUserName, margin ); fdlPassword.right = new FormAttachment( middle, -margin ); wlPassword.setLayoutData( fdlPassword ); wPassword = new PasswordTextVar( transMeta, wServerSettings, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wPassword ); wPassword.addModifyListener( lsMod ); fdPassword = new FormData(); fdPassword.left = new FormAttachment( middle, 0 ); fdPassword.top = new FormAttachment( wUserName, margin ); fdPassword.right = new FormAttachment( 100, 0 ); wPassword.setLayoutData( fdPassword ); // USE proxy wlUseProxy = new Label( wServerSettings, SWT.RIGHT ); wlUseProxy.setText( BaseMessages.getString( PKG, "MailInput.UseProxyMails.Label" ) ); props.setLook( wlUseProxy ); fdlUseProxy = new FormData(); fdlUseProxy.left = new FormAttachment( 0, 0 ); fdlUseProxy.top = new FormAttachment( wPassword, 2 * margin ); fdlUseProxy.right = new FormAttachment( middle, -margin ); wlUseProxy.setLayoutData( fdlUseProxy ); wUseProxy = new Button( wServerSettings, SWT.CHECK ); props.setLook( wUseProxy ); fdUseProxy = new FormData(); wUseProxy.setToolTipText( BaseMessages.getString( PKG, "MailInput.UseProxyMails.Tooltip" ) ); fdUseProxy.left = new FormAttachment( middle, 0 ); fdUseProxy.top = new FormAttachment( wPassword, 2 * margin ); fdUseProxy.right = new FormAttachment( 100, 0 ); wUseProxy.setLayoutData( fdUseProxy ); wUseProxy.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { setUserProxy(); input.setChanged(); } } ); // ProxyUsername line wlProxyUsername = new Label( wServerSettings, SWT.RIGHT ); wlProxyUsername.setText( BaseMessages.getString( PKG, "MailInput.ProxyUsername.Label" ) ); wProxyUsername = new TextVar( transMeta, wServerSettings, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); wProxyUsername.setToolTipText( BaseMessages.getString( PKG, "MailInput.ProxyUsername.Tooltip" ) ); wProxyUsername.addModifyListener( lsMod ); addLabelInputPairBelow( wlProxyUsername, wProxyUsername, wUseProxy ); // Use Batch label/checkbox Label wlUseBatch = new Label( wServerSettings, SWT.RIGHT ); wlUseBatch.setText( BaseMessages.getString( PKG, "MailInputDialog.UseBatch.Label" ) ); wUseBatch = new Button( wServerSettings, SWT.CHECK ); wUseBatch.setToolTipText( BaseMessages.getString( PKG, "MailInputDialog.UseBatch.Tooltip" ) ); wUseBatch.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { setBatchSettingsEnabled(); } } ); addLabelInputPairBelow( wlUseBatch, wUseBatch, wProxyUsername ); // ignore field errors wlIgnoreFieldErrors = new Label( wServerSettings, SWT.RIGHT ); wlIgnoreFieldErrors.setText( BaseMessages.getString( PKG, "MailInput.IgnoreFieldErrors.Label" ) ); wIgnoreFieldErrors = new Button( wServerSettings, SWT.CHECK ); wIgnoreFieldErrors.setToolTipText( BaseMessages.getString( PKG, "MailInput.IgnoreFieldErrors.Tooltip" ) ); addLabelInputPairBelow( wlIgnoreFieldErrors, wIgnoreFieldErrors, wUseBatch ); // Protocol wlProtocol = new Label( wServerSettings, SWT.RIGHT ); wlProtocol.setText( BaseMessages.getString( PKG, "MailInput.Protocol.Label" ) ); wProtocol = new CCombo( wServerSettings, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER ); wProtocol.setItems( MailConnectionMeta.protocolCodes ); wProtocol.select( 0 ); wProtocol.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { refreshProtocol( true ); } } ); addLabelInputPairBelow( wlProtocol, wProtocol, wIgnoreFieldErrors ); // Test connection button wTest = new Button( wServerSettings, SWT.PUSH ); wTest.setText( BaseMessages.getString( PKG, "MailInput.TestConnection.Label" ) ); props.setLook( wTest ); fdTest = new FormData(); wTest.setToolTipText( BaseMessages.getString( PKG, "MailInput.TestConnection.Tooltip" ) ); fdTest.top = new FormAttachment( wProtocol, margin ); fdTest.right = new FormAttachment( 100, 0 ); wTest.setLayoutData( fdTest ); fdServerSettings = new FormData(); fdServerSettings.left = new FormAttachment( 0, margin ); fdServerSettings.top = new FormAttachment( wProtocol, margin ); fdServerSettings.right = new FormAttachment( 100, -margin ); wServerSettings.setLayoutData( fdServerSettings ); // /////////////////////////////////////////////////////////// // / END OF SERVER SETTINGS GROUP // /////////////////////////////////////////////////////////// fdGeneralComp = new FormData(); fdGeneralComp.left = new FormAttachment( 0, 0 ); fdGeneralComp.top = new FormAttachment( wStepname, 0 ); fdGeneralComp.right = new FormAttachment( 100, 0 ); fdGeneralComp.bottom = new FormAttachment( 100, 0 ); wGeneralComp.setLayoutData( fdGeneralComp ); wGeneralComp.layout(); wGeneralTab.setControl( wGeneralComp ); props.setLook( wGeneralComp ); // /////////////////////////////////////////////////////////// // / END OF GENERAL TAB // /////////////////////////////////////////////////////////// // //////////////////////// // START OF SETTINGS TAB /// // //////////////////////// wSettingsTab = new CTabItem( wTabFolder, SWT.NONE ); wSettingsTab.setText( BaseMessages.getString( PKG, "MailInput.Tab.Pop.Label" ) ); wSettingsComp = new Composite( wTabFolder, SWT.NONE ); props.setLook( wSettingsComp ); FormLayout PopLayout = new FormLayout(); PopLayout.marginWidth = 3; PopLayout.marginHeight = 3; wSettingsComp.setLayout( PopLayout ); // Message: for POP3, only INBOX folder is available! wlPOP3Message = new Label( wSettingsComp, SWT.RIGHT ); wlPOP3Message.setText( BaseMessages.getString( PKG, "MailInput.POP3Message.Label" ) ); props.setLook( wlPOP3Message ); fdlPOP3Message = new FormData(); fdlPOP3Message.left = new FormAttachment( 0, margin ); fdlPOP3Message.top = new FormAttachment( 0, 3 * margin ); wlPOP3Message.setLayoutData( fdlPOP3Message ); wlPOP3Message.setForeground( GUIResource.getInstance().getColorOrange() ); // //////////////////////// // START OF POP3 Settings GROUP/// // / wPOP3Settings = new Group( wSettingsComp, SWT.SHADOW_NONE ); props.setLook( wPOP3Settings ); wPOP3Settings.setText( BaseMessages.getString( PKG, "MailInput.POP3Settings.Group.Label" ) ); FormLayout POP3SettingsgroupLayout = new FormLayout(); POP3SettingsgroupLayout.marginWidth = 10; POP3SettingsgroupLayout.marginHeight = 10; wPOP3Settings.setLayout( POP3SettingsgroupLayout ); // List of mails of retrieve wlListmails = new Label( wPOP3Settings, SWT.RIGHT ); wlListmails.setText( BaseMessages.getString( PKG, "MailInput.Listmails.Label" ) ); props.setLook( wlListmails ); fdlListmails = new FormData(); fdlListmails.left = new FormAttachment( 0, 0 ); fdlListmails.right = new FormAttachment( middle, 0 ); fdlListmails.top = new FormAttachment( wlPOP3Message, 2 * margin ); wlListmails.setLayoutData( fdlListmails ); wListmails = new CCombo( wPOP3Settings, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER ); wListmails.add( BaseMessages.getString( PKG, "MailInput.RetrieveAllMails.Label" ) ); // [PDI-7241] pop3 does not support retrive unread option // wListmails.add( BaseMessages.getString( PKG, "MailInput.RetrieveUnreadMails.Label" ) ); wListmails.add( BaseMessages.getString( PKG, "MailInput.RetrieveFirstMails.Label" ) ); wListmails.select( 0 ); // +1: starts at -1 props.setLook( wListmails ); fdListmails = new FormData(); fdListmails.left = new FormAttachment( middle, 0 ); fdListmails.top = new FormAttachment( wlPOP3Message, 2 * margin ); fdListmails.right = new FormAttachment( 100, 0 ); wListmails.setLayoutData( fdListmails ); wListmails.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { input.setChanged(); chooseListMails(); } } ); // Retrieve the first ... mails wlFirstmails = new Label( wPOP3Settings, SWT.RIGHT ); wlFirstmails.setText( BaseMessages.getString( PKG, "MailInput.Firstmails.Label" ) ); props.setLook( wlFirstmails ); fdlFirstmails = new FormData(); fdlFirstmails.left = new FormAttachment( 0, 0 ); fdlFirstmails.right = new FormAttachment( middle, -margin ); fdlFirstmails.top = new FormAttachment( wListmails, margin ); wlFirstmails.setLayoutData( fdlFirstmails ); wFirstmails = new TextVar( transMeta, wPOP3Settings, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wFirstmails ); wFirstmails.addModifyListener( lsMod ); fdFirstmails = new FormData(); fdFirstmails.left = new FormAttachment( middle, 0 ); fdFirstmails.top = new FormAttachment( wListmails, margin ); fdFirstmails.right = new FormAttachment( 100, 0 ); wFirstmails.setLayoutData( fdFirstmails ); fdPOP3Settings = new FormData(); fdPOP3Settings.left = new FormAttachment( 0, margin ); fdPOP3Settings.top = new FormAttachment( wlPOP3Message, 2 * margin ); fdPOP3Settings.right = new FormAttachment( 100, -margin ); wPOP3Settings.setLayoutData( fdPOP3Settings ); // /////////////////////////////////////////////////////////// // / END OF POP3 SETTINGS GROUP // /////////////////////////////////////////////////////////// // //////////////////////// // START OF IMAP Settings GROUP/// // / wIMAPSettings = new Group( wSettingsComp, SWT.SHADOW_NONE ); props.setLook( wIMAPSettings ); wIMAPSettings.setText( BaseMessages.getString( PKG, "MailInput.IMAPSettings.Groupp.Label" ) ); FormLayout IMAPSettingsgroupLayout = new FormLayout(); IMAPSettingsgroupLayout.marginWidth = 10; IMAPSettingsgroupLayout.marginHeight = 10; wIMAPSettings.setLayout( IMAPSettingsgroupLayout ); // Is folder name defined in a Field wldynamicFolder = new Label( wIMAPSettings, SWT.RIGHT ); wldynamicFolder.setText( BaseMessages.getString( PKG, "MailInput.dynamicFolder.Label" ) ); props.setLook( wldynamicFolder ); fdldynamicFolder = new FormData(); fdldynamicFolder.left = new FormAttachment( 0, 0 ); fdldynamicFolder.top = new FormAttachment( 0, margin ); fdldynamicFolder.right = new FormAttachment( middle, -margin ); wldynamicFolder.setLayoutData( fdldynamicFolder ); wdynamicFolder = new Button( wIMAPSettings, SWT.CHECK ); props.setLook( wdynamicFolder ); wdynamicFolder.setToolTipText( BaseMessages.getString( PKG, "MailInput.dynamicFolder.Tooltip" ) ); fddynamicFolder = new FormData(); fddynamicFolder.left = new FormAttachment( middle, 0 ); fddynamicFolder.top = new FormAttachment( 0, margin ); wdynamicFolder.setLayoutData( fddynamicFolder ); SelectionAdapter lsxmlstream = new SelectionAdapter() { public void widgetSelected( SelectionEvent arg0 ) { activedynamicFolder(); input.setChanged(); } }; wdynamicFolder.addSelectionListener( lsxmlstream ); // Folder field wlFolderField = new Label( wIMAPSettings, SWT.RIGHT ); wlFolderField.setText( BaseMessages.getString( PKG, "MailInput.wlFolderField.Label" ) ); props.setLook( wlFolderField ); fdlFolderField = new FormData(); fdlFolderField.left = new FormAttachment( 0, 0 ); fdlFolderField.top = new FormAttachment( wdynamicFolder, margin ); fdlFolderField.right = new FormAttachment( middle, -margin ); wlFolderField.setLayoutData( fdlFolderField ); wFolderField = new CCombo( wIMAPSettings, SWT.BORDER | SWT.READ_ONLY ); wFolderField.setEditable( true ); props.setLook( wFolderField ); wFolderField.addModifyListener( lsMod ); fdFolderField = new FormData(); fdFolderField.left = new FormAttachment( middle, 0 ); fdFolderField.top = new FormAttachment( wdynamicFolder, margin ); fdFolderField.right = new FormAttachment( 100, -margin ); wFolderField.setLayoutData( fdFolderField ); wFolderField.addFocusListener( new FocusListener() { public void focusLost( org.eclipse.swt.events.FocusEvent e ) { } public void focusGained( org.eclipse.swt.events.FocusEvent e ) { setFolderField(); } } ); // SelectFolder button wSelectFolder = new Button( wIMAPSettings, SWT.PUSH ); wSelectFolder.setImage( GUIResource.getInstance().getImageBol() ); wSelectFolder.setToolTipText( BaseMessages.getString( PKG, "MailInput.SelectFolderConnection.Label" ) ); props.setLook( wSelectFolder ); fdSelectFolder = new FormData(); wSelectFolder.setToolTipText( BaseMessages.getString( PKG, "MailInput.SelectFolderConnection.Tooltip" ) ); fdSelectFolder.top = new FormAttachment( wFolderField, margin ); fdSelectFolder.right = new FormAttachment( 100, 0 ); wSelectFolder.setLayoutData( fdSelectFolder ); // TestIMAPFolder button wTestIMAPFolder = new Button( wIMAPSettings, SWT.PUSH ); wTestIMAPFolder.setText( BaseMessages.getString( PKG, "MailInput.TestIMAPFolderConnection.Label" ) ); props.setLook( wTestIMAPFolder ); fdTestIMAPFolder = new FormData(); wTestIMAPFolder.setToolTipText( BaseMessages.getString( PKG, "MailInput.TestIMAPFolderConnection.Tooltip" ) ); fdTestIMAPFolder.top = new FormAttachment( wFolderField, margin ); fdTestIMAPFolder.right = new FormAttachment( wSelectFolder, -margin ); wTestIMAPFolder.setLayoutData( fdTestIMAPFolder ); // IMAPFolder line wlIMAPFolder = new Label( wIMAPSettings, SWT.RIGHT ); wlIMAPFolder.setText( BaseMessages.getString( PKG, "MailInput.IMAPFolder.Label" ) ); props.setLook( wlIMAPFolder ); fdlIMAPFolder = new FormData(); fdlIMAPFolder.left = new FormAttachment( 0, 0 ); fdlIMAPFolder.top = new FormAttachment( wFolderField, margin ); fdlIMAPFolder.right = new FormAttachment( middle, -margin ); wlIMAPFolder.setLayoutData( fdlIMAPFolder ); wIMAPFolder = new TextVar( transMeta, wIMAPSettings, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wIMAPFolder ); wIMAPFolder.setToolTipText( BaseMessages.getString( PKG, "MailInput.IMAPFolder.Tooltip" ) ); wIMAPFolder.addModifyListener( lsMod ); fdIMAPFolder = new FormData(); fdIMAPFolder.left = new FormAttachment( middle, 0 ); fdIMAPFolder.top = new FormAttachment( wFolderField, margin ); fdIMAPFolder.right = new FormAttachment( wTestIMAPFolder, -margin ); wIMAPFolder.setLayoutData( fdIMAPFolder ); // Include subfolders? wlIncludeSubFolders = new Label( wIMAPSettings, SWT.RIGHT ); wlIncludeSubFolders.setText( BaseMessages.getString( PKG, "MailInput.IncludeSubFoldersMails.Label" ) ); props.setLook( wlIncludeSubFolders ); fdlIncludeSubFolders = new FormData(); fdlIncludeSubFolders.left = new FormAttachment( 0, 0 ); fdlIncludeSubFolders.top = new FormAttachment( wIMAPFolder, margin ); fdlIncludeSubFolders.right = new FormAttachment( middle, -margin ); wlIncludeSubFolders.setLayoutData( fdlIncludeSubFolders ); wIncludeSubFolders = new Button( wIMAPSettings, SWT.CHECK ); props.setLook( wIncludeSubFolders ); fdIncludeSubFolders = new FormData(); wIncludeSubFolders.setToolTipText( BaseMessages.getString( PKG, "MailInput.IncludeSubFoldersMails.Tooltip" ) ); fdIncludeSubFolders.left = new FormAttachment( middle, 0 ); fdIncludeSubFolders.top = new FormAttachment( wIMAPFolder, margin ); fdIncludeSubFolders.right = new FormAttachment( 100, 0 ); wIncludeSubFolders.setLayoutData( fdIncludeSubFolders ); wIncludeSubFolders.addSelectionListener( lsSelection ); // List of mails of retrieve wlIMAPListmails = new Label( wIMAPSettings, SWT.RIGHT ); wlIMAPListmails.setText( BaseMessages.getString( PKG, "MailInput.IMAPListmails.Label" ) ); props.setLook( wlIMAPListmails ); fdlIMAPListmails = new FormData(); fdlIMAPListmails.left = new FormAttachment( 0, 0 ); fdlIMAPListmails.right = new FormAttachment( middle, -margin ); fdlIMAPListmails.top = new FormAttachment( wIncludeSubFolders, margin ); wlIMAPListmails.setLayoutData( fdlIMAPListmails ); wIMAPListmails = new CCombo( wIMAPSettings, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER ); wIMAPListmails.setItems( MailConnectionMeta.valueIMAPListDesc ); wIMAPListmails.select( 0 ); // +1: starts at -1 props.setLook( wIMAPListmails ); fdIMAPListmails = new FormData(); fdIMAPListmails.left = new FormAttachment( middle, 0 ); fdIMAPListmails.top = new FormAttachment( wIncludeSubFolders, margin ); fdIMAPListmails.right = new FormAttachment( 100, 0 ); wIMAPListmails.setLayoutData( fdIMAPListmails ); wIMAPListmails.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { // ChooseIMAPListmails(); } } ); // Retrieve the first ... mails wlIMAPFirstmails = new Label( wIMAPSettings, SWT.RIGHT ); wlIMAPFirstmails.setText( BaseMessages.getString( PKG, "MailInput.IMAPFirstmails.Label" ) ); props.setLook( wlIMAPFirstmails ); fdlIMAPFirstmails = new FormData(); fdlIMAPFirstmails.left = new FormAttachment( 0, 0 ); fdlIMAPFirstmails.right = new FormAttachment( middle, -margin ); fdlIMAPFirstmails.top = new FormAttachment( wIMAPListmails, margin ); wlIMAPFirstmails.setLayoutData( fdlIMAPFirstmails ); wIMAPFirstmails = new TextVar( transMeta, wIMAPSettings, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wIMAPFirstmails ); wIMAPFirstmails.addModifyListener( lsMod ); fdIMAPFirstmails = new FormData(); fdIMAPFirstmails.left = new FormAttachment( middle, 0 ); fdIMAPFirstmails.top = new FormAttachment( wIMAPListmails, margin ); fdIMAPFirstmails.right = new FormAttachment( 100, 0 ); wIMAPFirstmails.setLayoutData( fdIMAPFirstmails ); fdIMAPSettings = new FormData(); fdIMAPSettings.left = new FormAttachment( 0, margin ); fdIMAPSettings.top = new FormAttachment( wPOP3Settings, 2 * margin ); fdIMAPSettings.right = new FormAttachment( 100, -margin ); wIMAPSettings.setLayoutData( fdIMAPSettings ); // /////////////////////////////////////////////////////////// // / END OF IMAP SETTINGS GROUP // /////////////////////////////////////////////////////////// // //////////////////////////////// // START OF Batch Settings GROUP/// // wBatchSettingsGroup = createGroup( wSettingsComp, wIMAPSettings, BaseMessages.getString( PKG, "MailInputDialog.BatchSettingsGroup.Label" ) ); // Batch size Label wlBatchSize = new Label( wBatchSettingsGroup, SWT.RIGHT ); wlBatchSize.setText( BaseMessages.getString( PKG, "MailInputDialog.BatchSize.Label" ) ); wBatchSize = new Text( wBatchSettingsGroup, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); addLabelInputPairBelow( wlBatchSize, wBatchSize, wBatchSettingsGroup ); // Starting message Label wlStartMessage = new Label( wBatchSettingsGroup, SWT.RIGHT ); wlStartMessage.setText( BaseMessages.getString( PKG, "MailInputDialog.StartMessage.Label" ) ); wStartMessage = new TextVar( transMeta, wBatchSettingsGroup, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); addLabelInputPairBelow( wlStartMessage, wStartMessage, wBatchSize ); // Last message Label wlEndMessage = new Label( wBatchSettingsGroup, SWT.RIGHT ); wlEndMessage.setText( BaseMessages.getString( PKG, "MailInputDialog.EndMessage.Label" ) ); wEndMessage = new TextVar( transMeta, wBatchSettingsGroup, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); addLabelInputPairBelow( wlEndMessage, wEndMessage, wStartMessage ); // // / END OF Batch Settings GROUP // /////////////////////////////// fdSettingsComp = new FormData(); fdSettingsComp.left = new FormAttachment( 0, 0 ); fdSettingsComp.top = new FormAttachment( wStepname, 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 Pop TAB // /////////////////////////////////////////////////////////// // //////////////////////// // START OF SEARCH TAB /// // //////////////////////// wSearchTab = new CTabItem( wTabFolder, SWT.NONE ); wSearchTab.setText( BaseMessages.getString( PKG, "MailInput.Tab.Search.Label" ) ); wSearchComp = new Composite( wTabFolder, SWT.NONE ); props.setLook( wSearchComp ); FormLayout searchLayout = new FormLayout(); searchLayout.marginWidth = 3; searchLayout.marginHeight = 3; wSearchComp.setLayout( searchLayout ); // //////////////////////// // START OF HEADER ROUP/// // / wHeader = new Group( wSearchComp, SWT.SHADOW_NONE ); props.setLook( wHeader ); wHeader.setText( BaseMessages.getString( PKG, "MailInput.Header.Group.Label" ) ); FormLayout HeadergroupLayout = new FormLayout(); HeadergroupLayout.marginWidth = 10; HeadergroupLayout.marginHeight = 10; wHeader.setLayout( HeadergroupLayout ); wNegateSender = new Button( wHeader, SWT.CHECK ); props.setLook( wNegateSender ); fdNegateSender = new FormData(); wNegateSender.setToolTipText( BaseMessages.getString( PKG, "MailInput.NegateSender.Tooltip" ) ); fdNegateSender.top = new FormAttachment( 0, margin ); fdNegateSender.right = new FormAttachment( 100, -margin ); wNegateSender.setLayoutData( fdNegateSender ); // From line wlSender = new Label( wHeader, SWT.RIGHT ); wlSender.setText( BaseMessages.getString( PKG, "MailInput.wSender.Label" ) ); props.setLook( wlSender ); fdlSender = new FormData(); fdlSender.left = new FormAttachment( 0, 0 ); fdlSender.top = new FormAttachment( 0, margin ); fdlSender.right = new FormAttachment( middle, -margin ); wlSender.setLayoutData( fdlSender ); wSender = new TextVar( transMeta, wHeader, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wSender ); wSender.addModifyListener( lsMod ); fdSender = new FormData(); fdSender.left = new FormAttachment( middle, 0 ); fdSender.top = new FormAttachment( 0, margin ); fdSender.right = new FormAttachment( wNegateSender, -margin ); wSender.setLayoutData( fdSender ); wNegateReceipient = new Button( wHeader, SWT.CHECK ); props.setLook( wNegateReceipient ); fdNegateReceipient = new FormData(); wNegateReceipient.setToolTipText( BaseMessages.getString( PKG, "MailInput.NegateReceipient.Tooltip" ) ); fdNegateReceipient.top = new FormAttachment( wSender, margin ); fdNegateReceipient.right = new FormAttachment( 100, -margin ); wNegateReceipient.setLayoutData( fdNegateReceipient ); // Receipient line wlReceipient = new Label( wHeader, SWT.RIGHT ); wlReceipient.setText( BaseMessages.getString( PKG, "MailInput.Receipient.Label" ) ); props.setLook( wlReceipient ); fdlReceipient = new FormData(); fdlReceipient.left = new FormAttachment( 0, 0 ); fdlReceipient.top = new FormAttachment( wSender, margin ); fdlReceipient.right = new FormAttachment( middle, -margin ); wlReceipient.setLayoutData( fdlReceipient ); wReceipient = new TextVar( transMeta, wHeader, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wReceipient ); wReceipient.addModifyListener( lsMod ); fdReceipient = new FormData(); fdReceipient.left = new FormAttachment( middle, 0 ); fdReceipient.top = new FormAttachment( wSender, margin ); fdReceipient.right = new FormAttachment( wNegateReceipient, -margin ); wReceipient.setLayoutData( fdReceipient ); wNegateSubject = new Button( wHeader, SWT.CHECK ); props.setLook( wNegateSubject ); fdNegateSubject = new FormData(); wNegateSubject.setToolTipText( BaseMessages.getString( PKG, "MailInput.NegateSubject.Tooltip" ) ); fdNegateSubject.top = new FormAttachment( wReceipient, margin ); fdNegateSubject.right = new FormAttachment( 100, -margin ); wNegateSubject.setLayoutData( fdNegateSubject ); // Subject line wlSubject = new Label( wHeader, SWT.RIGHT ); wlSubject.setText( BaseMessages.getString( PKG, "MailInput.Subject.Label" ) ); props.setLook( wlSubject ); fdlSubject = new FormData(); fdlSubject.left = new FormAttachment( 0, 0 ); fdlSubject.top = new FormAttachment( wReceipient, margin ); fdlSubject.right = new FormAttachment( middle, -margin ); wlSubject.setLayoutData( fdlSubject ); wSubject = new TextVar( transMeta, wHeader, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); props.setLook( wSubject ); wSubject.addModifyListener( lsMod ); fdSubject = new FormData(); fdSubject.left = new FormAttachment( middle, 0 ); fdSubject.top = new FormAttachment( wReceipient, margin ); fdSubject.right = new FormAttachment( wNegateSubject, -margin ); wSubject.setLayoutData( fdSubject ); fdHeader = new FormData(); fdHeader.left = new FormAttachment( 0, margin ); fdHeader.top = new FormAttachment( wReceipient, 2 * margin ); fdHeader.right = new FormAttachment( 100, -margin ); wHeader.setLayoutData( fdHeader ); // /////////////////////////////////////////////////////////// // / END OF HEADER GROUP // /////////////////////////////////////////////////////////// // //////////////////////// // START OF RECEIVED DATE ROUP/// // / wReceivedDate = new Group( wSearchComp, SWT.SHADOW_NONE ); props.setLook( wReceivedDate ); wReceivedDate.setText( BaseMessages.getString( PKG, "MailInput.ReceivedDate.Group.Label" ) ); FormLayout ReceivedDategroupLayout = new FormLayout(); ReceivedDategroupLayout.marginWidth = 10; ReceivedDategroupLayout.marginHeight = 10; wReceivedDate.setLayout( ReceivedDategroupLayout ); wNegateReceivedDate = new Button( wReceivedDate, SWT.CHECK ); props.setLook( wNegateReceivedDate ); fdNegateReceivedDate = new FormData(); wNegateReceivedDate.setToolTipText( BaseMessages.getString( PKG, "MailInput.NegateReceivedDate.Tooltip" ) ); fdNegateReceivedDate.top = new FormAttachment( wHeader, margin ); fdNegateReceivedDate.right = new FormAttachment( 100, -margin ); wNegateReceivedDate.setLayoutData( fdNegateReceivedDate ); // Received Date Condition wlConditionOnReceivedDate = new Label( wReceivedDate, SWT.RIGHT ); wlConditionOnReceivedDate.setText( BaseMessages.getString( PKG, "MailInput.ConditionOnReceivedDate.Label" ) ); props.setLook( wlConditionOnReceivedDate ); fdlConditionOnReceivedDate = new FormData(); fdlConditionOnReceivedDate.left = new FormAttachment( 0, 0 ); fdlConditionOnReceivedDate.right = new FormAttachment( middle, -margin ); fdlConditionOnReceivedDate.top = new FormAttachment( wHeader, margin ); wlConditionOnReceivedDate.setLayoutData( fdlConditionOnReceivedDate ); wConditionOnReceivedDate = new CCombo( wReceivedDate, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER ); wConditionOnReceivedDate.setItems( MailConnectionMeta.conditionDateDesc ); wConditionOnReceivedDate.select( 0 ); // +1: starts at -1 props.setLook( wConditionOnReceivedDate ); fdConditionOnReceivedDate = new FormData(); fdConditionOnReceivedDate.left = new FormAttachment( middle, 0 ); fdConditionOnReceivedDate.top = new FormAttachment( wHeader, margin ); fdConditionOnReceivedDate.right = new FormAttachment( wNegateReceivedDate, -margin ); wConditionOnReceivedDate.setLayoutData( fdConditionOnReceivedDate ); wConditionOnReceivedDate.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { conditionReceivedDate(); input.setChanged(); } } ); open = new Button( wReceivedDate, SWT.PUSH ); open.setImage( GUIResource.getInstance().getImageCalendar() ); open.setToolTipText( BaseMessages.getString( PKG, "MailInput.OpenCalendar" ) ); FormData fdlButton = new FormData(); fdlButton.top = new FormAttachment( wConditionOnReceivedDate, margin ); fdlButton.right = new FormAttachment( 100, 0 ); open.setLayoutData( fdlButton ); open.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { final Shell dialog = new Shell( shell, SWT.DIALOG_TRIM ); dialog.setText( BaseMessages.getString( PKG, "MailInput.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() { public void widgetSelected( SelectionEvent e ) { Calendar cal = Calendar.getInstance(); cal.set( Calendar.YEAR, calendar.getYear() ); cal.set( Calendar.MONTH, calendar.getMonth() ); cal.set( Calendar.DAY_OF_MONTH, calendar.getDay() ); cal.set( Calendar.HOUR_OF_DAY, time.getHours() ); cal.set( Calendar.MINUTE, time.getMinutes() ); cal.set( Calendar.SECOND, time.getSeconds() ); wReadFrom.setText( new SimpleDateFormat( MailInputMeta.DATE_PATTERN ).format( cal.getTime() ) ); dialog.close(); } } ); dialog.setDefaultButton( ok ); dialog.pack(); dialog.open(); } } ); wlReadFrom = new Label( wReceivedDate, SWT.RIGHT ); wlReadFrom.setText( BaseMessages.getString( PKG, "MailInput.ReadFrom.Label" ) ); props.setLook( wlReadFrom ); fdlReadFrom = new FormData(); fdlReadFrom.left = new FormAttachment( 0, 0 ); fdlReadFrom.top = new FormAttachment( wConditionOnReceivedDate, margin ); fdlReadFrom.right = new FormAttachment( middle, -margin ); wlReadFrom.setLayoutData( fdlReadFrom ); wReadFrom = new TextVar( transMeta, wReceivedDate, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); wReadFrom.setToolTipText( BaseMessages.getString( PKG, "MailInput.ReadFrom.Tooltip" ) ); props.setLook( wReadFrom ); wReadFrom.addModifyListener( lsMod ); fdReadFrom = new FormData(); fdReadFrom.left = new FormAttachment( middle, 0 ); fdReadFrom.top = new FormAttachment( wConditionOnReceivedDate, margin ); fdReadFrom.right = new FormAttachment( open, -margin ); wReadFrom.setLayoutData( fdReadFrom ); opento = new Button( wReceivedDate, SWT.PUSH ); opento.setImage( GUIResource.getInstance().getImageCalendar() ); opento.setToolTipText( BaseMessages.getString( PKG, "MailInput.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() { public void widgetSelected( SelectionEvent e ) { final Shell dialogto = new Shell( shell, SWT.DIALOG_TRIM ); dialogto.setText( BaseMessages.getString( PKG, "MailInput.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() { public void widgetSelected( SelectionEvent e ) { Calendar cal = Calendar.getInstance(); cal.set( Calendar.YEAR, calendarto.getYear() ); cal.set( Calendar.MONTH, calendarto.getMonth() ); cal.set( Calendar.DAY_OF_MONTH, calendarto.getDay() ); cal.set( Calendar.HOUR_OF_DAY, timeto.getHours() ); cal.set( Calendar.MINUTE, timeto.getMinutes() ); cal.set( Calendar.SECOND, timeto.getSeconds() ); wReadTo.setText( new SimpleDateFormat( MailInputMeta.DATE_PATTERN ).format( cal.getTime() ) ); dialogto.close(); } } ); dialogto.setDefaultButton( okto ); dialogto.pack(); dialogto.open(); } } ); wlReadTo = new Label( wReceivedDate, SWT.RIGHT ); wlReadTo.setText( BaseMessages.getString( PKG, "MailInput.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, wReceivedDate, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); wReadTo.setToolTipText( BaseMessages.getString( PKG, "MailInput.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 ); fdReceivedDate = new FormData(); fdReceivedDate.left = new FormAttachment( 0, margin ); fdReceivedDate.top = new FormAttachment( wHeader, margin ); fdReceivedDate.right = new FormAttachment( 100, -margin ); wReceivedDate.setLayoutData( fdReceivedDate ); // /////////////////////////////////////////////////////////// // / END OF RECEIVED DATE GROUP // /////////////////////////////////////////////////////////// wlLimit = new Label( wSearchComp, SWT.RIGHT ); wlLimit.setText( BaseMessages.getString( PKG, "MailInput.Limit.Label" ) ); props.setLook( wlLimit ); fdlLimit = new FormData(); fdlLimit.left = new FormAttachment( 0, 0 ); fdlLimit.top = new FormAttachment( wReceivedDate, 2 * margin ); fdlLimit.right = new FormAttachment( middle, -margin ); wlLimit.setLayoutData( fdlLimit ); wLimit = new Text( wSearchComp, 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( wReceivedDate, 2 * margin ); fdLimit.right = new FormAttachment( 100, 0 ); wLimit.setLayoutData( fdLimit ); fdSearchComp = new FormData(); fdSearchComp.left = new FormAttachment( 0, 0 ); fdSearchComp.top = new FormAttachment( wStepname, 0 ); fdSearchComp.right = new FormAttachment( 100, 0 ); fdSearchComp.bottom = new FormAttachment( 100, 0 ); wSearchComp.setLayoutData( fdSearchComp ); wSearchComp.layout(); wSearchTab.setControl( wSearchComp ); props.setLook( wSearchComp ); // //////////////////////////////// // / END OF SEARCH TAB // //////////////////////////////// // Fields tab... // wFieldsTab = new CTabItem( wTabFolder, SWT.NONE ); wFieldsTab.setText( BaseMessages.getString( PKG, "MailInputdialog.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, "MailInputdialog.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; ColumnInfo[] colinf = new ColumnInfo[] { new ColumnInfo( BaseMessages.getString( PKG, "MailInputdialog.FieldsTable.Name.Column" ), ColumnInfo.COLUMN_TYPE_TEXT, false ), new ColumnInfo( BaseMessages.getString( PKG, "MailInputdialog.FieldsTable.Column.Column" ), ColumnInfo.COLUMN_TYPE_CCOMBO, MailInputField.ColumnDesc, true ), }; colinf[0].setUsingVariables( true ); colinf[0].setToolTip( BaseMessages.getString( PKG, "MailInputdialog.FieldsTable.Name.Column.Tooltip" ) ); colinf[1].setToolTip( BaseMessages.getString( PKG, "MailInputdialog.FieldsTable.Column.Column.Tooltip" ) ); 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 ); wOK = new Button( shell, SWT.PUSH ); wOK.setText( BaseMessages.getString( PKG, "System.Button.OK" ) ); wCancel = new Button( shell, SWT.PUSH ); wPreview = new Button( shell, SWT.PUSH ); wPreview.setText( BaseMessages.getString( PKG, "MailInputDialog.Preview" ) ); wCancel.setText( BaseMessages.getString( PKG, "System.Button.Cancel" ) ); BaseStepDialog.positionBottomButtons( shell, new Button[] { wOK, wPreview, wCancel }, margin, wTabFolder ); lsGet = new Listener() { public void handleEvent( Event e ) { getFields(); } }; // Add listeners lsCancel = new Listener() { public void handleEvent( Event e ) { cancel(); } }; lsOK = new Listener() { public void handleEvent( Event e ) { ok(); } }; lsPreview = new Listener() { public void handleEvent( Event e ) { preview(); } }; wCancel.addListener( SWT.Selection, lsCancel ); wOK.addListener( SWT.Selection, lsOK ); lsDef = new SelectionAdapter() { public void widgetDefaultSelected( SelectionEvent e ) { ok(); } }; lsTest = new Listener() { public void handleEvent( Event e ) { test(); } }; wTest.addListener( SWT.Selection, lsTest ); wPreview.addListener( SWT.Selection, lsPreview ); wGet.addListener( SWT.Selection, lsGet ); lsTestIMAPFolder = new Listener() { public void handleEvent( Event e ) { checkFolder( transMeta.environmentSubstitute( wIMAPFolder.getText() ) ); } }; wTestIMAPFolder.addListener( SWT.Selection, lsTestIMAPFolder ); lsSelectFolder = new Listener() { public void handleEvent( Event e ) { selectFolder( wIMAPFolder ); } }; wSelectFolder.addListener( SWT.Selection, lsSelectFolder ); wStepname.addSelectionListener( lsDef ); wServerName.addSelectionListener( lsDef ); // Detect X or ALT-F4 or something that kills this window... shell.addShellListener( new ShellAdapter() { public void shellClosed( ShellEvent e ) { cancel(); } } ); getData(); setUserProxy(); chooseListMails(); refreshProtocol( false ); conditionReceivedDate(); wTabFolder.setSelection( 0 ); BaseStepDialog.setSize( shell ); shell.open(); shell.open(); while ( !shell.isDisposed() ) { if ( !display.readAndDispatch() ) { display.sleep(); } } return stepname; } private void activedynamicFolder() { wlFolderField.setEnabled( wdynamicFolder.getSelection() ); wFolderField.setEnabled( wdynamicFolder.getSelection() ); wlIMAPFolder.setEnabled( !wdynamicFolder.getSelection() ); wIMAPFolder.setEnabled( !wdynamicFolder.getSelection() ); wPreview.setEnabled( !wdynamicFolder.getSelection() ); if ( wdynamicFolder.getSelection() ) { wLimit.setText( "0" ); } wlLimit.setEnabled( !wdynamicFolder.getSelection() ); wLimit.setEnabled( !wdynamicFolder.getSelection() ); boolean activePOP3 = wProtocol.getText().equals( MailConnectionMeta.PROTOCOL_STRING_POP3 ); wlIMAPFolder.setEnabled( !wdynamicFolder.getSelection() && !activePOP3 ); wIMAPFolder.setEnabled( !wdynamicFolder.getSelection() && !activePOP3 ); wTestIMAPFolder.setEnabled( !wdynamicFolder.getSelection() && !activePOP3 ); wSelectFolder.setEnabled( !wdynamicFolder.getSelection() && !activePOP3 ); } /** * Copy information from the meta-data input to the dialog fields. */ public void getData() { if ( input.getServerName() != null ) { wServerName.setText( input.getServerName() ); } if ( input.getUserName() != null ) { wUserName.setText( input.getUserName() ); } if ( input.getPassword() != null ) { wPassword.setText( input.getPassword() ); } wUseSSL.setSelection( input.isUseSSL() ); if ( input.getPort() != null ) { wPort.setText( input.getPort() ); } String protocol = input.getProtocol(); boolean isPop3 = StringUtils.equals( protocol, MailConnectionMeta.PROTOCOL_STRING_POP3 ); wProtocol.setText( protocol ); int iRet = input.getRetrievemails(); // [PDI-7241] POP3 does not support retrieve email flags. // if anyone already used 'unread' for POP3 in transformation or 'retrieve... first' // now they realize that all this time it was 'retrieve all mails'. if ( iRet > 0 ) { if ( isPop3 ) { wListmails.select( iRet - 1 ); } else { wListmails.select( iRet ); } } else { wListmails.select( 0 ); // Retrieve All Mails } if ( input.getFirstMails() != null ) { wFirstmails.setText( input.getFirstMails() ); } wIMAPListmails.setText( MailConnectionMeta.getValueImapListDesc( input.getValueImapList() ) ); if ( input.getFirstIMAPMails() != null ) { wIMAPFirstmails.setText( input.getFirstIMAPMails() ); } if ( input.getIMAPFolder() != null ) { wIMAPFolder.setText( input.getIMAPFolder() ); } // search term if ( input.getSenderSearchTerm() != null ) { wSender.setText( input.getSenderSearchTerm() ); } wNegateSender.setSelection( input.isNotTermSenderSearch() ); if ( input.getRecipientSearch() != null ) { wReceipient.setText( input.getRecipientSearch() ); } wNegateReceipient.setSelection( input.isNotTermRecipientSearch() ); if ( input.getSubjectSearch() != null ) { wSubject.setText( input.getSubjectSearch() ); } wNegateSubject.setSelection( input.isNotTermSubjectSearch() ); wConditionOnReceivedDate .setText( MailConnectionMeta.getConditionDateDesc( input.getConditionOnReceivedDate() ) ); wNegateReceivedDate.setSelection( input.isNotTermReceivedDateSearch() ); if ( input.getReceivedDate1() != null ) { wReadFrom.setText( input.getReceivedDate1() ); } if ( input.getReceivedDate2() != null ) { wReadTo.setText( input.getReceivedDate2() ); } wIncludeSubFolders.setSelection( input.isIncludeSubFolders() ); wUseProxy.setSelection( input.isUseProxy() ); if ( input.getProxyUsername() != null ) { wProxyUsername.setText( input.getProxyUsername() ); } wdynamicFolder.setSelection( input.isDynamicFolder() ); if ( input.getFolderField() != null ) { wFolderField.setText( input.getFolderField() ); } wLimit.setText( Const.NVL( input.getRowLimit(), "0" ) ); for ( int i = 0; i < input.getInputFields().length; i++ ) { MailInputField field = input.getInputFields()[i]; if ( field != null ) { TableItem item = wFields.table.getItem( i ); String name = field.getName(); String column = field.getColumnDesc(); if ( name != null ) { item.setText( 1, name ); } if ( column != null ) { item.setText( 2, column ); } } } wFields.removeEmptyRows(); wFields.setRowNums(); wFields.optWidth( true ); wUseBatch.setSelection( input.isUseBatch() ); wBatchSize.setText( input.getBatchSize() == null ? String.valueOf( MailInputMeta.DEFAULT_BATCH_SIZE ) : input.getBatchSize().toString() ); wStartMessage.setText( input.getStart() == null ? "" : input.getStart().toString() ); wEndMessage.setText( input.getEnd() == null ? "" : input.getEnd().toString() ); wIgnoreFieldErrors.setSelection( input.isStopOnError() ); setBatchSettingsEnabled(); wStepname.selectAll(); wStepname.setFocus(); } private void cancel() { stepname = null; input.setChanged( changed ); dispose(); } private void ok() { if ( Utils.isEmpty( wStepname.getText() ) ) { return; } try { getInfo( input ); } catch ( KettleException e ) { new ErrorDialog( shell, BaseMessages.getString( PKG, "MailInputDialog.ErrorParsingData.DialogTitle" ), BaseMessages .getString( PKG, "MailInputDialog.ErrorParsingData.DialogMessage" ), e ); } dispose(); } private void getInfo( MailInputMeta in ) throws KettleException { stepname = wStepname.getText(); // return value in.setServerName( wServerName.getText() ); in.setUserName( wUserName.getText() ); in.setPassword( wPassword.getText() ); in.setUseSSL( wUseSSL.getSelection() ); in.setPort( wPort.getText() ); // [PDI-7241] Option 'retrieve unread' is removed and there is only 2 options. // for backward compatibility: 0 is 'retrieve all', 2 is 'retrieve first...' int actualIndex = wListmails.getSelectionIndex(); in.setRetrievemails( actualIndex > 0 ? 2 : 0 ); //Set first... emails for POP3 in.setFirstMails( wFirstmails.getText() ); in.setProtocol( wProtocol.getText() ); in.setValueImapList( MailConnectionMeta.getValueImapListByDesc( wIMAPListmails.getText() ) ); //Set first... emails for IMAP in.setFirstIMAPMails( wIMAPFirstmails.getText() ); in.setIMAPFolder( wIMAPFolder.getText() ); // search term in.setSenderSearchTerm( wSender.getText() ); in.setNotTermSenderSearch( wNegateSender.getSelection() ); in.setRecipientSearch( wReceipient.getText() ); in.setNotTermRecipientSearch( wNegateReceipient.getSelection() ); in.setSubjectSearch( wSubject.getText() ); in.setNotTermSubjectSearch( wNegateSubject.getSelection() ); in.setConditionOnReceivedDate( MailConnectionMeta.getConditionDateByDesc( wConditionOnReceivedDate.getText() ) ); in.setNotTermReceivedDateSearch( wNegateReceivedDate.getSelection() ); in.setReceivedDate1( wReadFrom.getText() ); in.setReceivedDate2( wReadTo.getText() ); in.setIncludeSubFolders( wIncludeSubFolders.getSelection() ); in.setUseProxy( wUseProxy.getSelection() ); in.setProxyUsername( wProxyUsername.getText() ); in.setDynamicFolder( wdynamicFolder.getSelection() ); in.setFolderField( wFolderField.getText() ); in.setRowLimit( wLimit.getText() ); int nrFields = wFields.nrNonEmpty(); in.allocate( nrFields ); for ( int i = 0; i < nrFields; i++ ) { MailInputField field = new MailInputField(); TableItem item = wFields.getNonEmpty( i ); field.setName( item.getText( 1 ) ); field.setColumn( MailInputField.getColumnByDesc( item.getText( 2 ) ) ); //CHECKSTYLE:Indentation:OFF in.getInputFields()[i] = field; } in.setUseBatch( wUseBatch.getSelection() ); Integer batchSize = getInteger( wBatchSize.getText() ); in.setBatchSize( batchSize == null ? MailInputMeta.DEFAULT_BATCH_SIZE : batchSize ); in.setStart( wStartMessage.getText() ); in.setEnd( wEndMessage.getText() ); in.setStopOnError( wIgnoreFieldErrors.getSelection() ); } private void setFolderField() { if ( !gotPreviousfields ) { try { String field = wFolderField.getText(); wFolderField.removeAll(); RowMetaInterface r = transMeta.getPrevStepFields( stepname ); if ( r != null ) { wFolderField.setItems( r.getFieldNames() ); } if ( field != null ) { wFolderField.setText( field ); } } catch ( KettleException ke ) { new ErrorDialog( shell, BaseMessages.getString( PKG, "MailInput.FailedToGetFields.DialogTitle" ), BaseMessages .getString( PKG, "MailInput.FailedToGetFields.DialogMessage" ), ke ); } gotPreviousfields = true; } } private void closeMailConnection() { try { if ( mailConn != null ) { mailConn.disconnect(); mailConn = null; } } catch ( Exception e ) { /* Ignore */ } } private void conditionReceivedDate() { boolean activeReceivedDate = !( MailConnectionMeta.getConditionDateByDesc( wConditionOnReceivedDate.getText() ) == MailConnectionMeta.CONDITION_DATE_IGNORE ); boolean useBetween = ( MailConnectionMeta.getConditionDateByDesc( wConditionOnReceivedDate.getText() ) == MailConnectionMeta.CONDITION_DATE_BETWEEN ); wlReadFrom.setVisible( activeReceivedDate ); wReadFrom.setVisible( activeReceivedDate ); open.setVisible( activeReceivedDate ); wlReadTo.setVisible( activeReceivedDate && useBetween ); wReadTo.setVisible( activeReceivedDate && useBetween ); opento.setVisible( activeReceivedDate && useBetween ); if ( !activeReceivedDate ) { wReadFrom.setText( "" ); wReadTo.setText( "" ); wNegateReceivedDate.setSelection( false ); } } private void refreshPort( boolean refreshport ) { if ( refreshport ) { if ( wProtocol.getText().equals( MailConnectionMeta.PROTOCOL_STRING_POP3 ) ) { if ( wUseSSL.getSelection() ) { if ( Utils.isEmpty( wPort.getText() ) || wPort.getText().equals( "" + MailConnectionMeta.DEFAULT_SSL_IMAP_PORT ) ) { wPort.setText( "" + MailConnectionMeta.DEFAULT_SSL_POP3_PORT ); } } else { if ( Utils.isEmpty( wPort.getText() ) || wPort.getText().equals( MailConnectionMeta.DEFAULT_IMAP_PORT ) ) { wPort.setText( "" + MailConnectionMeta.DEFAULT_POP3_PORT ); } } } else if ( wProtocol.getText().equals( MailConnectionMeta.PROTOCOL_STRING_IMAP ) ) { if ( wUseSSL.getSelection() ) { if ( Utils.isEmpty( wPort.getText() ) || wPort.getText().equals( "" + MailConnectionMeta.DEFAULT_SSL_POP3_PORT ) ) { wPort.setText( "" + MailConnectionMeta.DEFAULT_SSL_IMAP_PORT ); } } else { if ( Utils.isEmpty( wPort.getText() ) || wPort.getText().equals( MailConnectionMeta.DEFAULT_POP3_PORT ) ) { wPort.setText( "" + MailConnectionMeta.DEFAULT_IMAP_PORT ); } } } else { wPort.setText( "" ); } } } private void refreshProtocol( boolean refreshport ) { boolean activePOP3 = wProtocol.getText().equals( MailConnectionMeta.PROTOCOL_STRING_POP3 ); boolean activeIMAP = wProtocol.getText().equals( MailConnectionMeta.PROTOCOL_STRING_IMAP ); wlPOP3Message.setEnabled( activePOP3 ); wlListmails.setEnabled( activePOP3 ); wListmails.setEnabled( activePOP3 ); wlFirstmails.setEnabled( activePOP3 ); wlIMAPFirstmails.setEnabled( activeIMAP ); wIMAPFirstmails.setEnabled( activeIMAP ); wlIncludeSubFolders.setEnabled( !activePOP3 ); wIncludeSubFolders.setEnabled( !activePOP3 ); wlIMAPListmails.setEnabled( activeIMAP ); wIMAPListmails.setEnabled( activeIMAP ); if ( activePOP3 && wdynamicFolder.getSelection() ) { wdynamicFolder.setSelection( false ); } wldynamicFolder.setEnabled( !activePOP3 ); wdynamicFolder.setEnabled( !activePOP3 ); if ( activePOP3 ) { // clear out selections wConditionOnReceivedDate.select( 0 ); conditionReceivedDate(); } // POP3/MBOX protocols do not provide information about when a message was received wConditionOnReceivedDate.setEnabled( activeIMAP ); wNegateReceivedDate.setEnabled( activeIMAP ); wlConditionOnReceivedDate.setEnabled( activeIMAP ); setRemoteOptionsEnabled( activePOP3 || activeIMAP ); activedynamicFolder(); chooseListMails(); refreshPort( refreshport ); } private void setRemoteOptionsEnabled( boolean enableRemoteOpts ) { wlUserName.setEnabled( enableRemoteOpts ); wUserName.setEnabled( enableRemoteOpts ); wPort.setEnabled( enableRemoteOpts ); wlPort.setEnabled( enableRemoteOpts ); wPassword.setEnabled( enableRemoteOpts ); wlPassword.setEnabled( enableRemoteOpts ); if ( !enableRemoteOpts && wUseProxy.getSelection() ) { wUseProxy.setSelection( false ); setUserProxy(); } wUseProxy.setEnabled( enableRemoteOpts ); wlUseProxy.setEnabled( enableRemoteOpts ); wUseSSL.setEnabled( enableRemoteOpts ); wlUseSSL.setEnabled( enableRemoteOpts ); } public void dispose() { closeMailConnection(); WindowProperty winprop = new WindowProperty( shell ); props.setScreen( winprop ); shell.dispose(); } public void chooseListMails() { boolean ok = ( wProtocol.getText().equals( MailConnectionMeta.PROTOCOL_STRING_POP3 ) && wListmails.getSelectionIndex() == 1 ); wlFirstmails.setEnabled( ok ); wFirstmails.setEnabled( ok ); } private void selectFolder( TextVar input ) { if ( connect() ) { try { Folder folder = mailConn.getStore().getDefaultFolder(); SelectFolderDialog s = new SelectFolderDialog( shell, SWT.NONE, folder ); String foldername = s.open(); if ( foldername != null ) { input.setText( foldername ); } } catch ( Exception e ) { // Ignore errors } } } private boolean connect() { String errordescription = null; boolean retval = false; if ( mailConn != null && mailConn.isConnected() ) { retval = mailConn.isConnected(); } if ( !retval ) { String realserver = transMeta.environmentSubstitute( wServerName.getText() ); String realuser = transMeta.environmentSubstitute( wUserName.getText() ); String realpass = Utils.resolvePassword( transMeta, wPassword.getText() ); String realProxyUsername = transMeta.environmentSubstitute( wProxyUsername.getText() ); int realport = Const.toInt( transMeta.environmentSubstitute( wPort.getText() ), -1 ); try { mailConn = new MailConnection( LogChannel.UI, MailConnectionMeta.getProtocolFromString( wProtocol.getText(), MailConnectionMeta.PROTOCOL_IMAP ), realserver, realport, realuser, realpass, wUseSSL.getSelection(), wUseProxy.getSelection(), realProxyUsername ); mailConn.connect(); retval = true; } catch ( Exception e ) { errordescription = e.getMessage(); } } if ( !retval ) { MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_ERROR ); mb.setMessage( BaseMessages.getString( PKG, "MailInput.Connected.NOK.ConnectionBad", wServerName.getText() ) + Const.CR + Const.NVL( errordescription, "" ) ); mb.setText( BaseMessages.getString( PKG, "MailInput.Connected.Title.Bad" ) ); mb.open(); } return ( mailConn.isConnected() ); } private void test() { if ( connect() ) { MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_INFORMATION ); mb.setMessage( BaseMessages.getString( PKG, "MailInput.Connected.OK", wServerName.getText() ) + Const.CR ); mb.setText( BaseMessages.getString( PKG, "MailInput.Connected.Title.Ok" ) ); mb.open(); } } private void checkFolder( String foldername ) { if ( !Utils.isEmpty( foldername ) ) { if ( connect() ) { // check folder if ( mailConn.folderExists( foldername ) ) { MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_INFORMATION ); mb.setMessage( BaseMessages.getString( PKG, "MailInput.IMAPFolderExists.OK", foldername ) + Const.CR ); mb.setText( BaseMessages.getString( PKG, "MailInput.IMAPFolderExists.Title.Ok" ) ); mb.open(); } else { MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_ERROR ); mb.setMessage( BaseMessages.getString( PKG, "MailInput.Connected.NOK.IMAPFolderExists", foldername ) + Const.CR ); mb.setText( BaseMessages.getString( PKG, "MailInput.IMAPFolderExists.Title.Bad" ) ); mb.open(); } } } } // Preview the data private void preview() { try { MailInputMeta oneMeta = new MailInputMeta(); getInfo( oneMeta ); TransMeta previewMeta = TransPreviewFactory.generatePreviewTransformation( transMeta, oneMeta, wStepname.getText() ); EnterNumberDialog numberDialog = new EnterNumberDialog( shell, props.getDefaultPreviewSize(), BaseMessages.getString( PKG, "MailInputDialog.NumberRows.DialogTitle" ), BaseMessages.getString( PKG, "MailInputDialog.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, "MailInputDialog.ErrorPreviewingData.DialogTitle" ), BaseMessages .getString( PKG, "MailInputDialog.ErrorPreviewingData.DialogMessage" ), e ); } } private void setUserProxy() { wlProxyUsername.setEnabled( wUseProxy.getSelection() ); wProxyUsername.setEnabled( wUseProxy.getSelection() ); } private void getFields() { // Clear Fields Grid wFields.removeAll(); for ( int i = 0; i < MailInputField.ColumnDesc.length; i++ ) { wFields.add( new String[] { MailInputField.ColumnDesc[i], MailInputField.ColumnDesc[i] } ); } wFields.removeEmptyRows(); wFields.setRowNums(); wFields.optWidth( true ); } private void setBatchSettingsEnabled() { boolean enabled = wUseBatch.getSelection(); wBatchSize.setEnabled( enabled ); wStartMessage.setEnabled( enabled ); wEndMessage.setEnabled( enabled ); } private Group createGroup( Composite parentTab, Control top, String label ) { Group group = new Group( parentTab, SWT.SHADOW_NONE ); props.setLook( group ); group.setText( label ); FormLayout groupLayout = new FormLayout(); groupLayout.marginWidth = 10; groupLayout.marginHeight = 10; group.setLayout( groupLayout ); FormData fdGroup = new FormData(); fdGroup.left = new FormAttachment( 0, Const.MARGIN ); fdGroup.top = new FormAttachment( top, Const.MARGIN ); fdGroup.right = new FormAttachment( 100, -Const.MARGIN ); group.setLayoutData( fdGroup ); return group; } private void addLabelInputPairBelow( Control label, Control input, Control widgetAbove ) { addLabelBelow( label, widgetAbove ); addControlBelow( input, widgetAbove ); } private void addLabelBelow( Control label, Control widgetAbove ) { props.setLook( label ); FormData fData = new FormData(); fData.top = new FormAttachment( widgetAbove, Const.MARGIN ); fData.right = new FormAttachment( Const.MIDDLE_PCT, -Const.MARGIN ); label.setLayoutData( fData ); } private void addControlBelow( Control control, Control widgetAbove ) { props.setLook( control ); FormData fData = new FormData(); fData.top = new FormAttachment( widgetAbove, Const.MARGIN ); fData.left = new FormAttachment( Const.MIDDLE_PCT, Const.MARGIN ); fData.right = new FormAttachment( 100, -Const.MARGIN ); control.setLayoutData( fData ); } private Integer getInteger( String toParse ) { if ( Utils.isEmpty( toParse ) ) { return null; } try { return new Integer( toParse ); } catch ( NumberFormatException e ) { return null; } } }