/*! ******************************************************************************
*
* 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.gettablenames;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
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.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.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.Text;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.util.Utils;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.row.RowMetaInterface;
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.step.BaseStepMeta;
import org.pentaho.di.trans.step.StepDialogInterface;
import org.pentaho.di.trans.steps.gettablenames.GetTableNamesMeta;
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.widget.TextVar;
import org.pentaho.di.ui.trans.dialog.TransPreviewProgressDialog;
import org.pentaho.di.ui.trans.step.BaseStepDialog;
public class GetTableNamesDialog extends BaseStepDialog implements StepDialogInterface {
private static Class<?> PKG = GetTableNamesMeta.class; // for i18n purposes, needed by Translator2!!
private CCombo wConnection;
private Label wlTablenameField;
private Text wTablenameField;
private FormData fdlTablenameField, fdTablenameField;
private Label wlSQLCreationField;
private Text wSQLCreationField;
private FormData fdlSQLCreationField, fdSQLCreationField;
private Button wincludeTable;
private FormData fdincludeTable;
private Label wlincludeTable;
private FormData fdlincludeTable;
private Button wincludeSchema;
private FormData fdincludeSchema;
private Label wlincludeSchema;
private FormData fdlincludeSchema;
private Button wincludeCatalog;
private FormData fdincludeCatalog;
private Label wlincludeCatalog;
private FormData fdlincludeCatalog;
private Button wincludeProcedure;
private FormData fdincludeProcedure;
private Label wlincludeProcedure;
private FormData fdlincludeProcedure;
private Button wincludeSynonym;
private FormData fdincludeSynonym;
private Label wlincludeSynonym;
private FormData fdlincludeSynonym;
private Button waddSchemaInOutput;
private FormData fdaddSchemaInOutput;
private Label wladdSchemaInOutput;
private FormData fdladdSchemaInOutput;
private Button wincludeView;
private FormData fdincludeView;
private Label wlincludeView;
private FormData fdlincludeView;
private Label wlObjectTypeField;
private Text wObjectTypeField;
private FormData fdlObjectTypeField, fdObjectTypeField;
private Label wlisSystemObjectField;
private Text wisSystemObjectField;
private FormData fdlisSystemObjectField, fdisSystemObjectField;
private Label wlschemaname;
private TextVar wschemaname;
private FormData fdlschemaname, fdschemaname;
private Label wldynamicSchema;
private FormData fdldynamicSchema, fddynamicSchema;
private Button wdynamicSchema;
private Label wlSchemaField;
private FormData fdlSchemaField;
private CCombo wSchemaField;
private FormData fdSchemaField;
private GetTableNamesMeta input;
private Group wSettings;
private Group wOutputFields;
private boolean gotpreviousfields = false;
public GetTableNamesDialog( Shell parent, Object in, TransMeta transMeta, String sname ) {
super( parent, (BaseStepMeta) in, transMeta, sname );
input = (GetTableNamesMeta) in;
}
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() {
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, "GetTableNamesDialog.Shell.Title" ) );
int middle = props.getMiddlePct();
int margin = Const.MARGIN;
// Stepname line
wlStepname = new Label( shell, SWT.RIGHT );
wlStepname.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.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 );
// Connection line
wConnection = addConnectionLine( shell, wStepname, middle, margin );
if ( input.getDatabase() == null && transMeta.nrDatabases() == 1 ) {
wConnection.select( 0 );
}
wConnection.addModifyListener( lsMod );
// schemaname fieldname ...
wlschemaname = new Label( shell, SWT.RIGHT );
wlschemaname.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.schemanameName.Label" ) );
props.setLook( wlschemaname );
fdlschemaname = new FormData();
fdlschemaname.left = new FormAttachment( 0, 0 );
fdlschemaname.right = new FormAttachment( middle, -margin );
fdlschemaname.top = new FormAttachment( wConnection, 2 * margin );
wlschemaname.setLayoutData( fdlschemaname );
wschemaname = new TextVar( transMeta, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wschemaname.setToolTipText( BaseMessages.getString( PKG, "GetTableNamesDialog.schemanameName.Tooltip" ) );
props.setLook( wschemaname );
fdschemaname = new FormData();
fdschemaname.left = new FormAttachment( middle, 0 );
fdschemaname.top = new FormAttachment( wConnection, 2 * margin );
fdschemaname.right = new FormAttachment( 100, 0 );
wschemaname.setLayoutData( fdschemaname );
ModifyListener lsModSchema = new ModifyListener() {
public void modifyText( ModifyEvent e ) {
input.setChanged();
refreshIncludeCatalog();
}
};
wschemaname.addModifyListener( lsModSchema );
// Is schema name defined in a Field
wldynamicSchema = new Label( shell, SWT.RIGHT );
wldynamicSchema.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.wldynamicSchema.Label" ) );
props.setLook( wldynamicSchema );
fdldynamicSchema = new FormData();
fdldynamicSchema.left = new FormAttachment( 0, -margin );
fdldynamicSchema.top = new FormAttachment( wschemaname, margin );
fdldynamicSchema.right = new FormAttachment( middle, -margin );
wldynamicSchema.setLayoutData( fdldynamicSchema );
wdynamicSchema = new Button( shell, SWT.CHECK );
props.setLook( wdynamicSchema );
wdynamicSchema.setToolTipText( BaseMessages.getString( PKG, "GetTableNamesDialog.wdynamicSchema.Tooltip" ) );
fddynamicSchema = new FormData();
fddynamicSchema.left = new FormAttachment( middle, 0 );
fddynamicSchema.top = new FormAttachment( wschemaname, margin );
wdynamicSchema.setLayoutData( fddynamicSchema );
SelectionAdapter lsxmlstream = new SelectionAdapter() {
public void widgetSelected( SelectionEvent arg0 ) {
ActivedynamicSchema();
input.setChanged();
}
};
wdynamicSchema.addSelectionListener( lsxmlstream );
// If schema string defined in a Field
wlSchemaField = new Label( shell, SWT.RIGHT );
wlSchemaField.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.wlSchemaField.Label" ) );
props.setLook( wlSchemaField );
fdlSchemaField = new FormData();
fdlSchemaField.left = new FormAttachment( 0, -margin );
fdlSchemaField.top = new FormAttachment( wdynamicSchema, margin );
fdlSchemaField.right = new FormAttachment( middle, -margin );
wlSchemaField.setLayoutData( fdlSchemaField );
wSchemaField = new CCombo( shell, SWT.BORDER | SWT.READ_ONLY );
wSchemaField.setEditable( true );
props.setLook( wSchemaField );
wSchemaField.addModifyListener( lsMod );
fdSchemaField = new FormData();
fdSchemaField.left = new FormAttachment( middle, 0 );
fdSchemaField.top = new FormAttachment( wdynamicSchema, margin );
fdSchemaField.right = new FormAttachment( 100, -margin );
wSchemaField.setLayoutData( fdSchemaField );
wSchemaField.addFocusListener( new FocusListener() {
public void focusLost( org.eclipse.swt.events.FocusEvent e ) {
}
public void focusGained( org.eclipse.swt.events.FocusEvent e ) {
setSchemaField();
shell.setCursor( null );
}
} );
// ///////////////////////////////
// START OF SETTINGS GROUP //
// ///////////////////////////////
wSettings = new Group( shell, SWT.SHADOW_NONE );
props.setLook( wSettings );
wSettings.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.wSettings.Label" ) );
FormLayout SettingsgroupLayout = new FormLayout();
SettingsgroupLayout.marginWidth = 10;
SettingsgroupLayout.marginHeight = 10;
wSettings.setLayout( SettingsgroupLayout );
// Include Catalogs
wlincludeCatalog = new Label( wSettings, SWT.RIGHT );
wlincludeCatalog.setText( BaseMessages.getString( PKG, "GetCatalogNamesDialog.includeCatalog.Label" ) );
props.setLook( wlincludeCatalog );
fdlincludeCatalog = new FormData();
fdlincludeCatalog.left = new FormAttachment( 0, -margin );
fdlincludeCatalog.top = new FormAttachment( wSchemaField, margin );
fdlincludeCatalog.right = new FormAttachment( middle, -2 * margin );
wlincludeCatalog.setLayoutData( fdlincludeCatalog );
wincludeCatalog = new Button( wSettings, SWT.CHECK );
props.setLook( wincludeCatalog );
wincludeCatalog.setToolTipText( BaseMessages.getString( PKG, "GetCatalogNamesDialog.includeCatalog.Tooltip" ) );
fdincludeCatalog = new FormData();
fdincludeCatalog.left = new FormAttachment( middle, -margin );
fdincludeCatalog.top = new FormAttachment( wSchemaField, margin );
wincludeCatalog.setLayoutData( fdincludeCatalog );
SelectionAdapter lincludeCatalog = new SelectionAdapter() {
public void widgetSelected( SelectionEvent arg0 ) {
input.setChanged();
}
};
wincludeCatalog.addSelectionListener( lincludeCatalog );
// Include Schemas
wlincludeSchema = new Label( wSettings, SWT.RIGHT );
wlincludeSchema.setText( BaseMessages.getString( PKG, "GetSchemaNamesDialog.includeSchema.Label" ) );
props.setLook( wlincludeSchema );
fdlincludeSchema = new FormData();
fdlincludeSchema.left = new FormAttachment( 0, -margin );
fdlincludeSchema.top = new FormAttachment( wincludeCatalog, margin );
fdlincludeSchema.right = new FormAttachment( middle, -2 * margin );
wlincludeSchema.setLayoutData( fdlincludeSchema );
wincludeSchema = new Button( wSettings, SWT.CHECK );
props.setLook( wincludeSchema );
wincludeSchema.setToolTipText( BaseMessages.getString( PKG, "GetSchemaNamesDialog.includeSchema.Tooltip" ) );
fdincludeSchema = new FormData();
fdincludeSchema.left = new FormAttachment( middle, -margin );
fdincludeSchema.top = new FormAttachment( wincludeCatalog, margin );
wincludeSchema.setLayoutData( fdincludeSchema );
SelectionAdapter lincludeSchema = new SelectionAdapter() {
public void widgetSelected( SelectionEvent arg0 ) {
input.setChanged();
}
};
wincludeSchema.addSelectionListener( lincludeSchema );
// Include tables
wlincludeTable = new Label( wSettings, SWT.RIGHT );
wlincludeTable.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.includeTable.Label" ) );
props.setLook( wlincludeTable );
fdlincludeTable = new FormData();
fdlincludeTable.left = new FormAttachment( 0, -margin );
fdlincludeTable.top = new FormAttachment( wincludeSchema, margin );
fdlincludeTable.right = new FormAttachment( middle, -2 * margin );
wlincludeTable.setLayoutData( fdlincludeTable );
wincludeTable = new Button( wSettings, SWT.CHECK );
props.setLook( wincludeTable );
wincludeTable.setToolTipText( BaseMessages.getString( PKG, "GetTableNamesDialog.includeTable.Tooltip" ) );
fdincludeTable = new FormData();
fdincludeTable.left = new FormAttachment( middle, -margin );
fdincludeTable.top = new FormAttachment( wincludeSchema, margin );
wincludeTable.setLayoutData( fdincludeTable );
SelectionAdapter lincludeTable = new SelectionAdapter() {
public void widgetSelected( SelectionEvent arg0 ) {
input.setChanged();
}
};
wincludeTable.addSelectionListener( lincludeTable );
// Include views
wlincludeView = new Label( wSettings, SWT.RIGHT );
wlincludeView.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.includeView.Label" ) );
props.setLook( wlincludeView );
fdlincludeView = new FormData();
fdlincludeView.left = new FormAttachment( 0, -margin );
fdlincludeView.top = new FormAttachment( wincludeTable, margin );
fdlincludeView.right = new FormAttachment( middle, -2 * margin );
wlincludeView.setLayoutData( fdlincludeView );
wincludeView = new Button( wSettings, SWT.CHECK );
props.setLook( wincludeView );
wincludeView.setToolTipText( BaseMessages.getString( PKG, "GetTableNamesDialog.includeView.Tooltip" ) );
fdincludeView = new FormData();
fdincludeView.left = new FormAttachment( middle, -margin );
fdincludeView.top = new FormAttachment( wincludeTable, margin );
wincludeView.setLayoutData( fdincludeView );
SelectionAdapter lincludeView = new SelectionAdapter() {
public void widgetSelected( SelectionEvent arg0 ) {
input.setChanged();
}
};
wincludeView.addSelectionListener( lincludeView );
// Include procedures
wlincludeProcedure = new Label( wSettings, SWT.RIGHT );
wlincludeProcedure.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.includeProcedure.Label" ) );
props.setLook( wlincludeProcedure );
fdlincludeProcedure = new FormData();
fdlincludeProcedure.left = new FormAttachment( 0, -margin );
fdlincludeProcedure.top = new FormAttachment( wincludeView, margin );
fdlincludeProcedure.right = new FormAttachment( middle, -2 * margin );
wlincludeProcedure.setLayoutData( fdlincludeProcedure );
wincludeProcedure = new Button( wSettings, SWT.CHECK );
props.setLook( wincludeProcedure );
wincludeProcedure
.setToolTipText( BaseMessages.getString( PKG, "GetTableNamesDialog.includeProcedure.Tooltip" ) );
fdincludeProcedure = new FormData();
fdincludeProcedure.left = new FormAttachment( middle, -margin );
fdincludeProcedure.top = new FormAttachment( wincludeView, margin );
wincludeProcedure.setLayoutData( fdincludeProcedure );
SelectionAdapter lincludeProcedure = new SelectionAdapter() {
public void widgetSelected( SelectionEvent arg0 ) {
input.setChanged();
}
};
wincludeProcedure.addSelectionListener( lincludeProcedure );
// Include Synonyms
wlincludeSynonym = new Label( wSettings, SWT.RIGHT );
wlincludeSynonym.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.includeSynonym.Label" ) );
props.setLook( wlincludeSynonym );
fdlincludeSynonym = new FormData();
fdlincludeSynonym.left = new FormAttachment( 0, -margin );
fdlincludeSynonym.top = new FormAttachment( wincludeProcedure, margin );
fdlincludeSynonym.right = new FormAttachment( middle, -2 * margin );
wlincludeSynonym.setLayoutData( fdlincludeSynonym );
wincludeSynonym = new Button( wSettings, SWT.CHECK );
props.setLook( wincludeSynonym );
wincludeSynonym.setToolTipText( BaseMessages.getString( PKG, "GetTableNamesDialog.includeSynonym.Tooltip" ) );
fdincludeSynonym = new FormData();
fdincludeSynonym.left = new FormAttachment( middle, -margin );
fdincludeSynonym.top = new FormAttachment( wincludeProcedure, margin );
wincludeSynonym.setLayoutData( fdincludeSynonym );
SelectionAdapter lincludeSynonym = new SelectionAdapter() {
public void widgetSelected( SelectionEvent arg0 ) {
input.setChanged();
}
};
wincludeSynonym.addSelectionListener( lincludeSynonym );
// Add schema in output
wladdSchemaInOutput = new Label( wSettings, SWT.RIGHT );
wladdSchemaInOutput.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.addSchemaInOutput.Label" ) );
props.setLook( wladdSchemaInOutput );
fdladdSchemaInOutput = new FormData();
fdladdSchemaInOutput.left = new FormAttachment( 0, -margin );
fdladdSchemaInOutput.top = new FormAttachment( wincludeSynonym, 2 * margin );
fdladdSchemaInOutput.right = new FormAttachment( middle, -2 * margin );
wladdSchemaInOutput.setLayoutData( fdladdSchemaInOutput );
waddSchemaInOutput = new Button( wSettings, SWT.CHECK );
props.setLook( waddSchemaInOutput );
waddSchemaInOutput.setToolTipText( BaseMessages.getString(
PKG, "GetTableNamesDialog.addSchemaInOutput.Tooltip" ) );
fdaddSchemaInOutput = new FormData();
fdaddSchemaInOutput.left = new FormAttachment( middle, -margin );
fdaddSchemaInOutput.top = new FormAttachment( wincludeSynonym, 2 * margin );
waddSchemaInOutput.setLayoutData( fdaddSchemaInOutput );
SelectionAdapter laddSchemaInOutput = new SelectionAdapter() {
public void widgetSelected( SelectionEvent arg0 ) {
input.setChanged();
}
};
waddSchemaInOutput.addSelectionListener( laddSchemaInOutput );
FormData fdSettings = new FormData();
fdSettings.left = new FormAttachment( 0, margin );
fdSettings.top = new FormAttachment( wSchemaField, 2 * margin );
fdSettings.right = new FormAttachment( 100, -margin );
wSettings.setLayoutData( fdSettings );
// ///////////////////////////////////////////////////////////
// / END OF SETTINGS GROUP
// ///////////////////////////////////////////////////////////
// ///////////////////////////////
// START OF OutputFields GROUP //
// ///////////////////////////////
wOutputFields = new Group( shell, SWT.SHADOW_NONE );
props.setLook( wOutputFields );
wOutputFields.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.wOutputFields.Label" ) );
FormLayout OutputFieldsgroupLayout = new FormLayout();
OutputFieldsgroupLayout.marginWidth = 10;
OutputFieldsgroupLayout.marginHeight = 10;
wOutputFields.setLayout( OutputFieldsgroupLayout );
// TablenameField fieldname ...
wlTablenameField = new Label( wOutputFields, SWT.RIGHT );
wlTablenameField.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.TablenameFieldName.Label" ) );
props.setLook( wlTablenameField );
fdlTablenameField = new FormData();
fdlTablenameField.left = new FormAttachment( 0, 0 );
fdlTablenameField.right = new FormAttachment( middle, -margin );
fdlTablenameField.top = new FormAttachment( wSettings, margin * 2 );
wlTablenameField.setLayoutData( fdlTablenameField );
wTablenameField = new Text( wOutputFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wTablenameField
.setToolTipText( BaseMessages.getString( PKG, "GetTableNamesDialog.TablenameFieldName.Tooltip" ) );
props.setLook( wTablenameField );
wTablenameField.addModifyListener( lsMod );
fdTablenameField = new FormData();
fdTablenameField.left = new FormAttachment( middle, 0 );
fdTablenameField.top = new FormAttachment( wSettings, margin * 2 );
fdTablenameField.right = new FormAttachment( 100, 0 );
wTablenameField.setLayoutData( fdTablenameField );
// ObjectTypeField fieldname ...
wlObjectTypeField = new Label( wOutputFields, SWT.RIGHT );
wlObjectTypeField.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.ObjectTypeFieldName.Label" ) );
props.setLook( wlObjectTypeField );
fdlObjectTypeField = new FormData();
fdlObjectTypeField.left = new FormAttachment( 0, 0 );
fdlObjectTypeField.right = new FormAttachment( middle, -margin );
fdlObjectTypeField.top = new FormAttachment( wTablenameField, margin );
wlObjectTypeField.setLayoutData( fdlObjectTypeField );
wObjectTypeField = new Text( wOutputFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wObjectTypeField.setToolTipText( BaseMessages.getString(
PKG, "GetTableNamesDialog.ObjectTypeFieldName.Tooltip" ) );
props.setLook( wObjectTypeField );
wObjectTypeField.addModifyListener( lsMod );
fdObjectTypeField = new FormData();
fdObjectTypeField.left = new FormAttachment( middle, 0 );
fdObjectTypeField.top = new FormAttachment( wTablenameField, margin );
fdObjectTypeField.right = new FormAttachment( 100, 0 );
wObjectTypeField.setLayoutData( fdObjectTypeField );
// isSystemObjectField fieldname ...
wlisSystemObjectField = new Label( wOutputFields, SWT.RIGHT );
wlisSystemObjectField.setText( BaseMessages.getString(
PKG, "GetTableNamesDialog.isSystemObjectFieldName.Label" ) );
props.setLook( wlisSystemObjectField );
fdlisSystemObjectField = new FormData();
fdlisSystemObjectField.left = new FormAttachment( 0, 0 );
fdlisSystemObjectField.right = new FormAttachment( middle, -margin );
fdlisSystemObjectField.top = new FormAttachment( wObjectTypeField, margin );
wlisSystemObjectField.setLayoutData( fdlisSystemObjectField );
wisSystemObjectField = new Text( wOutputFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wisSystemObjectField.setToolTipText( BaseMessages.getString(
PKG, "GetTableNamesDialog.isSystemObjectFieldName.Tooltip" ) );
props.setLook( wisSystemObjectField );
wisSystemObjectField.addModifyListener( lsMod );
fdisSystemObjectField = new FormData();
fdisSystemObjectField.left = new FormAttachment( middle, 0 );
fdisSystemObjectField.top = new FormAttachment( wObjectTypeField, margin );
fdisSystemObjectField.right = new FormAttachment( 100, 0 );
wisSystemObjectField.setLayoutData( fdisSystemObjectField );
// CreationSQL fieldname ...
wlSQLCreationField = new Label( wOutputFields, SWT.RIGHT );
wlSQLCreationField.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.CreationSQLName.Label" ) );
props.setLook( wlSQLCreationField );
fdlSQLCreationField = new FormData();
fdlSQLCreationField.left = new FormAttachment( 0, 0 );
fdlSQLCreationField.right = new FormAttachment( middle, -margin );
fdlSQLCreationField.top = new FormAttachment( wisSystemObjectField, margin );
wlSQLCreationField.setLayoutData( fdlSQLCreationField );
wSQLCreationField = new Text( wOutputFields, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
wSQLCreationField
.setToolTipText( BaseMessages.getString( PKG, "GetTableNamesDialog.CreationSQLName.Tooltip" ) );
props.setLook( wSQLCreationField );
wSQLCreationField.addModifyListener( lsMod );
fdSQLCreationField = new FormData();
fdSQLCreationField.left = new FormAttachment( middle, 0 );
fdSQLCreationField.top = new FormAttachment( wisSystemObjectField, margin );
fdSQLCreationField.right = new FormAttachment( 100, 0 );
wSQLCreationField.setLayoutData( fdSQLCreationField );
FormData fdOutputFields = new FormData();
fdOutputFields.left = new FormAttachment( 0, margin );
fdOutputFields.top = new FormAttachment( wSettings, 2 * margin );
fdOutputFields.right = new FormAttachment( 100, -margin );
wOutputFields.setLayoutData( fdOutputFields );
// ///////////////////////////////////////////////////////////
// / END OF OutputFields GROUP
// ///////////////////////////////////////////////////////////
// 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, "GetTableNamesDialog.Preview.Button" ) );
wCancel = new Button( shell, SWT.PUSH );
wCancel.setText( BaseMessages.getString( PKG, "System.Button.Cancel" ) );
setButtonPositions( new Button[] { wOK, wPreview, wCancel }, margin, wOutputFields );
// Add listeners
lsOK = new Listener() {
public void handleEvent( Event e ) {
ok();
}
};
lsCancel = new Listener() {
public void handleEvent( Event e ) {
cancel();
}
};
lsPreview = new Listener() {
public void handleEvent( Event e ) {
preview();
}
};
wOK.addListener( SWT.Selection, lsOK );
wPreview.addListener( SWT.Selection, lsPreview );
wCancel.addListener( SWT.Selection, lsCancel );
lsDef = new SelectionAdapter() {
public void widgetDefaultSelected( SelectionEvent e ) {
ok();
}
};
wStepname.addSelectionListener( lsDef );
// Detect X or ALT-F4 or something that kills this window...
shell.addShellListener( new ShellAdapter() {
public void shellClosed( ShellEvent e ) {
cancel();
}
} );
// Set the shell size, based upon previous time...
setSize();
getData();
ActivedynamicSchema();
refreshIncludeCatalog();
input.setChanged( changed );
shell.open();
while ( !shell.isDisposed() ) {
if ( !display.readAndDispatch() ) {
display.sleep();
}
}
return stepname;
}
private void refreshIncludeCatalog() {
if ( !Utils.isEmpty( wschemaname.getText() ) ) {
wincludeCatalog.setSelection( false );
wlincludeCatalog.setEnabled( false );
wincludeCatalog.setEnabled( false );
} else {
wlincludeCatalog.setEnabled( true );
wincludeCatalog.setEnabled( true );
}
}
private void ActivedynamicSchema() {
wlSchemaField.setEnabled( wdynamicSchema.getSelection() );
wSchemaField.setEnabled( wdynamicSchema.getSelection() );
wPreview.setEnabled( !wdynamicSchema.getSelection() );
wlschemaname.setEnabled( !wdynamicSchema.getSelection() );
wschemaname.setEnabled( !wdynamicSchema.getSelection() );
if ( wdynamicSchema.getSelection() ) {
wincludeCatalog.setSelection( false );
}
wlincludeCatalog.setEnabled( !wdynamicSchema.getSelection() );
wincludeCatalog.setEnabled( !wdynamicSchema.getSelection() );
}
/**
* Copy information from the meta-data input to the dialog fields.
*/
public void getData() {
if ( isDebug() ) {
logDebug( toString(), BaseMessages.getString( PKG, "GetTableNamesDialog.Log.GettingKeyInfo" ) );
}
if ( input.getDatabase() != null ) {
wConnection.setText( input.getDatabase().getName() );
} else if ( transMeta.nrDatabases() == 1 ) {
wConnection.setText( transMeta.getDatabase( 0 ).getName() );
}
if ( input.getSchemaName() != null ) {
wschemaname.setText( input.getSchemaName() );
}
if ( input.getTablenameFieldName() != null ) {
wTablenameField.setText( input.getTablenameFieldName() );
}
if ( input.getObjectTypeFieldName() != null ) {
wObjectTypeField.setText( input.getObjectTypeFieldName() );
}
if ( input.isSystemObjectFieldName() != null ) {
wisSystemObjectField.setText( input.isSystemObjectFieldName() );
}
if ( input.getSQLCreationFieldName() != null ) {
wSQLCreationField.setText( input.getSQLCreationFieldName() );
}
wincludeCatalog.setSelection( input.isIncludeCatalog() );
wincludeSchema.setSelection( input.isIncludeSchema() );
wincludeTable.setSelection( input.isIncludeTable() );
wincludeView.setSelection( input.isIncludeView() );
wincludeProcedure.setSelection( input.isIncludeProcedure() );
wincludeSynonym.setSelection( input.isIncludeSynonym() );
waddSchemaInOutput.setSelection( input.isAddSchemaInOut() );
wdynamicSchema.setSelection( input.isDynamicSchema() );
if ( input.getSchemaFieldName() != null ) {
wSchemaField.setText( input.getSchemaFieldName() );
}
wStepname.selectAll();
wStepname.setFocus();
}
private void cancel() {
stepname = null;
input.setChanged( changed );
dispose();
}
private void setSchemaField() {
if ( !gotpreviousfields ) {
try {
String value = wSchemaField.getText();
wSchemaField.removeAll();
RowMetaInterface r = transMeta.getPrevStepFields( stepname );
if ( r != null ) {
wSchemaField.setItems( r.getFieldNames() );
}
if ( value != null ) {
wSchemaField.setText( value );
}
} catch ( KettleException ke ) {
new ErrorDialog(
shell, BaseMessages.getString( PKG, "GetTableNamesDialog.FailedToGetFields.DialogTitle" ),
BaseMessages.getString( PKG, "GetTableNamesDialog.FailedToGetFields.DialogMessage" ), ke );
}
gotpreviousfields = true;
}
}
private void ok() {
if ( Utils.isEmpty( wStepname.getText() ) ) {
return;
}
stepname = wStepname.getText(); // return value
getInfo( input );
if ( input.getDatabase() == null ) {
MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_ERROR );
mb.setMessage( BaseMessages.getString( PKG, "GetTableNamesDialog.InvalidConnection.DialogMessage" ) );
mb.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.InvalidConnection.DialogTitle" ) );
mb.open();
return;
}
dispose();
}
private void getInfo( GetTableNamesMeta info ) {
info.setDatabase( transMeta.findDatabase( wConnection.getText() ) );
info.setSchemaName( wschemaname.getText() );
info.setTablenameFieldName( wTablenameField.getText() );
info.setSQLCreationFieldName( wSQLCreationField.getText() );
info.setObjectTypeFieldName( wObjectTypeField.getText() );
info.setIsSystemObjectFieldName( wisSystemObjectField.getText() );
info.setIncludeCatalog( wincludeCatalog.getSelection() );
info.setIncludeSchema( wincludeSchema.getSelection() );
info.setIncludeTable( wincludeTable.getSelection() );
info.setIncludeView( wincludeView.getSelection() );
info.setIncludeProcedure( wincludeProcedure.getSelection() );
info.setIncludeSynonym( wincludeSynonym.getSelection() );
info.setAddSchemaInOut( waddSchemaInOutput.getSelection() );
info.setDynamicSchema( wdynamicSchema.getSelection() );
info.setSchemaFieldName( wSchemaField.getText() );
}
private boolean checkUserInput( GetTableNamesMeta meta ) {
if ( Utils.isEmpty( meta.getTablenameFieldName() ) ) {
MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_ERROR );
mb.setMessage( BaseMessages.getString( PKG, "GetTableNamesDialog.Error.TablenameFieldNameMissingMessage" ) );
mb.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.Error.TablenameFieldNameMissingTitle" ) );
mb.open();
return false;
}
return true;
}
// Preview the data
private void preview() {
GetTableNamesMeta oneMeta = new GetTableNamesMeta();
getInfo( oneMeta );
if ( oneMeta.getDatabase() == null ) {
MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_ERROR );
mb.setMessage( BaseMessages.getString( PKG, "GetTableNamesDialog.InvalidConnection.DialogMessage" ) );
mb.setText( BaseMessages.getString( PKG, "GetTableNamesDialog.InvalidConnection.DialogTitle" ) );
mb.open();
return;
}
if ( !checkUserInput( oneMeta ) ) {
return;
}
TransMeta previewMeta =
TransPreviewFactory.generatePreviewTransformation( transMeta, oneMeta, wStepname.getText() );
EnterNumberDialog numberDialog = new EnterNumberDialog( shell, props.getDefaultPreviewSize(),
BaseMessages.getString( PKG, "GetTableNamesDialog.PreviewSize.DialogTitle" ),
BaseMessages.getString( PKG, "GetTableNamesDialog.PreviewSize.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.Error.Title" ), BaseMessages
.getString( PKG, "GetTableNamesDialog.ErrorInPreview.DialogMessage" ), 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();
}
}
}
}