/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.transformation.ui.wizards.sqlbuilder;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.TextViewer;
import org.eclipse.jface.text.source.VerticalRuler;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.teiid.core.designer.util.CoreStringUtil;
import org.teiid.designer.query.sql.ISQLConstants;
import org.teiid.designer.transformation.ui.Messages;
import org.teiid.designer.transformation.ui.UiConstants.Images;
import org.teiid.designer.transformation.ui.UiPlugin;
import org.teiid.designer.transformation.ui.editors.sqleditor.SqlTextViewer;
import org.teiid.designer.ui.common.graphics.ColorManager;
import org.teiid.designer.ui.common.util.WidgetFactory;
import org.teiid.designer.ui.common.widget.ScrollableTitleAreaDialog;
/**
* SQLTemplateDialog - Display the relevant SQL Templates for Tables or Procedures, so that user can choose some SQL
* to start editing.
*
* @since 8.0
*/
public class SQLTemplateDialog extends ScrollableTitleAreaDialog {
public static int TABLE_TEMPLATES = 1;
public static int PROC_TEMPLATES = 2;
public static int ALL_TEMPLATES = 3;
//=============================================================
// Instance variables
//=============================================================
TextViewer sqlTextViewer;
IDocument sqlDocument;
int templatesToShow = -1;
TabFolder tabFolder;
TabItem selectTemplatesTab;
TabItem procedureTemplatesTab;
Button selectRB, selectJoinRB, unionRB, flatFileSourceRB;
Button xmlFileLocalSourceRB, xmlFileUrlSourceRB, selectObjectTableRB;
Button simpleDefaultProcRB, insertDefaultProcRB, updateDefaultProcRB, deleteDefaultProcRB,
soapCreateProcRB, soapExtractProcRB, restProcedureRB;
Button replaceSQL_RB, insertAtBeginning_RB, insertAtCursor_RB, insertAtEnd_RB;
int insertOptionValue = 0;
//=============================================================
// Constructors
//=============================================================
/**
* SQLTemplateDialog constructor.
*
* @param parent parent of this dialog
* @param templatesToShow flag to determine which types of Templates to display (TABLE_TEMPLATES, PROC_TEMPLATES or
* ALL_TEMPLATES)
*/
public SQLTemplateDialog( Shell parent,
int templatesToShow ) {
super(parent, 2);
this.templatesToShow = templatesToShow;
}
@Override
protected void configureShell( Shell shell ) {
super.configureShell(shell);
shell.setText(Messages.sqlTemplateDialogTitle);
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#setShellStyle(int)
*/
@Override
protected void setShellStyle( int newShellStyle ) {
super.setShellStyle(newShellStyle | SWT.RESIZE | SWT.MAX);
}
//=============================================================
// Instance methods
//=============================================================
@Override
protected Control createDialogArea(Composite parent) {
setTitle(Messages.sqlTemplateDialogTitle);
setTitleImage(UiPlugin.getDefault().getImage(Images.IMPORT_TEIID_METADATA));
setMessage(Messages.sqlTemplateDialogTitleMessage);
Composite composite = (Composite)super.createDialogArea(parent);
//------------------------------
// Set layout for the Composite
//------------------------------
((GridData)composite.getLayoutData()).grabExcessHorizontalSpace = true;
((GridData)composite.getLayoutData()).widthHint = 500;
// Create the RadioButton Group for Template selection
createSqlTemplateOptionsGroup(composite);
// Create the SQL Text area for the SQL display
createSqlGroup(composite);
// Init SQL Text area with selection
setSQLTemplateArea();
sizeScrolledPanel();
return composite;
}
/*
* Create the Group of Radio Buttons for template type selection
*/
private void createSqlTemplateOptionsGroup( Composite parent ) {
Group theGroup = WidgetFactory.createGroup(parent, Messages.sqlTemplateDialogOptionsGroup, SWT.NONE, 1, 1);
GridLayout gridLayout = new GridLayout();
theGroup.setLayout(gridLayout);
gridLayout.numColumns = 1;
theGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
// **********************************
// SQL Template Options
// **********************************
tabFolder = new TabFolder(theGroup, SWT.TOP);
tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
if (templatesToShow == TABLE_TEMPLATES || templatesToShow == ALL_TEMPLATES) {
createSelectTemplatesTab(tabFolder);
}
if (templatesToShow == PROC_TEMPLATES || templatesToShow == ALL_TEMPLATES) {
createProcedureTemplatesTab(tabFolder);
}
tabFolder.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected( SelectionEvent e ) {
setSQLTemplateArea();
}
@Override
public void widgetDefaultSelected( SelectionEvent e ) {
widgetSelected(e);
}
});
Group optionsGroup = WidgetFactory.createGroup(parent, Messages.sqlTemplateInsertTextOptionsTitle, SWT.NONE, 1, 1);
optionsGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
// Simple SELECT Query
this.replaceSQL_RB = WidgetFactory.createRadioButton(optionsGroup, Messages.sqlTemplateReplaceAllOptionLabel, SWT.NONE, 1, true);
this.replaceSQL_RB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
updateInsertOption();
}
});
this.insertAtBeginning_RB = WidgetFactory.createRadioButton(optionsGroup, Messages.sqlTemplateInsertAtBeginningOptionLabel, SWT.NONE, 1, false);
this.insertAtBeginning_RB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
updateInsertOption();
}
});
this.insertAtCursor_RB = WidgetFactory.createRadioButton(optionsGroup, Messages.sqlTemplateInsertAtCursorOptionLabel, SWT.NONE, 1, false);
this.insertAtCursor_RB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
updateInsertOption();
}
});
this.insertAtEnd_RB = WidgetFactory.createRadioButton(optionsGroup, Messages.sqlTemplateInsertAtEndOptionLabel, SWT.NONE, 1, false);
this.insertAtEnd_RB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
updateInsertOption();
}
});
}
void updateInsertOption() {
this.insertOptionValue = ISQLConstants.INSERT_OPTIONS.REPLACE_ALL;
if( insertAtCursor_RB.getSelection() ) {
this.insertOptionValue = ISQLConstants.INSERT_OPTIONS.INSERT_AT_CURSOR;
} else if( insertAtEnd_RB.getSelection() ) {
this.insertOptionValue = ISQLConstants.INSERT_OPTIONS.INSERT_AT_END;
} else if( insertAtBeginning_RB.getSelection() ) {
this.insertOptionValue = ISQLConstants.INSERT_OPTIONS.INSERT_AT_BEGINNING;
}
}
public int getInsertOption() {
return this.insertOptionValue;
}
/*
* Create the Select Templates Tab
*/
void createSelectTemplatesTab( TabFolder folderParent ) {
// build the SELECT tab
Composite thePanel = createSelectTemplatesPanel(folderParent);
this.selectTemplatesTab = new TabItem(folderParent, SWT.NONE);
this.selectTemplatesTab.setControl(thePanel);
this.selectTemplatesTab.setText(Messages.sqlTemplateDialogSelectTabTitle);
}
/*
* Create the Select Templates Tab
*/
void createProcedureTemplatesTab( TabFolder folderParent ) {
// build the SELECT tab
Composite thePanel = createProcedureTemplatesPanel(folderParent);
this.procedureTemplatesTab = new TabItem(folderParent, SWT.NONE);
this.procedureTemplatesTab.setControl(thePanel);
this.procedureTemplatesTab.setText(Messages.sqlTemplateDialogProceduresTabTitle);
}
private Composite createSelectTemplatesPanel( Composite parent ) {
Composite thePanel = WidgetFactory.createPanel(parent, SWT.NONE, 1, 1);
thePanel.setLayout(new GridLayout(1, false));
GridData panelGD = new GridData(GridData.FILL_BOTH);
panelGD.heightHint = 200;
thePanel.setLayoutData(panelGD);
// Simple SELECT Query
this.selectRB = WidgetFactory.createRadioButton(thePanel, Messages.sqlTemplateDialogSelectLabel, SWT.NONE, 1, true);
this.selectRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// SELECT With Join Criteria
this.selectJoinRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogSelectJoinLabel,
SWT.NONE,
2,
false);
this.selectJoinRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// UNION Query
this.unionRB = WidgetFactory.createRadioButton(thePanel, Messages.sqlTemplateDialogUnionLabel, SWT.NONE, 1, false);
this.unionRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// Flat File Source Query
this.flatFileSourceRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogFlatFileSrcLabel,
SWT.NONE,
1,
false);
this.flatFileSourceRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// XML File Local Source Query
this.xmlFileLocalSourceRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogXmlFileLocalSrcLabel,
SWT.NONE,
1,
false);
this.xmlFileLocalSourceRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// XML File URL Source Query
this.xmlFileUrlSourceRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogXmlFileUrlSrcLabel,
SWT.NONE,
1,
false);
this.xmlFileUrlSourceRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// XML File URL Source Query
this.selectObjectTableRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogSelectObjectTableLabel,
SWT.NONE,
1,
false);
this.selectObjectTableRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
return thePanel;
}
private Composite createProcedureTemplatesPanel( Composite parent ) {
Composite thePanel = WidgetFactory.createPanel(parent, SWT.NONE, 1, 1);
thePanel.setLayout(new GridLayout(1, false));
GridData panelGD = new GridData(GridData.FILL_BOTH);
panelGD.heightHint = 200;
thePanel.setLayoutData(panelGD);
// Default Insert Procedure SQL
this.simpleDefaultProcRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogSimpleDefaultProcLabel,
SWT.NONE,
1,
true);
this.simpleDefaultProcRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// Default Insert Procedure SQL
this.insertDefaultProcRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogInsDefaultProcLabel,
SWT.NONE,
1,
false);
this.insertDefaultProcRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// Default Update Procedure SQL
this.updateDefaultProcRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogUpdDefaultProcLabel,
SWT.NONE,
1,
false);
this.updateDefaultProcRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// Default Delete Procedure SQL
this.deleteDefaultProcRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogDelDefaultProcLabel,
SWT.NONE,
1,
false);
this.deleteDefaultProcRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// SOAP WebService "Create" Procedure SQL
this.soapCreateProcRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogSoapCreateProcLabel,
SWT.NONE,
1,
false);
this.soapCreateProcRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// SOAP WebService Extract Procedure SQL
this.soapExtractProcRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogSoapExtractProcLabel,
SWT.NONE,
1,
false);
this.soapExtractProcRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
// REST Procedure SQL
this.restProcedureRB = WidgetFactory.createRadioButton(thePanel,
Messages.sqlTemplateDialogRestProcLabel,
SWT.NONE,
1,
false);
this.restProcedureRB.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
setSQLTemplateArea();
}
});
return thePanel;
}
/*
* Set the SQL Display Area, based on the selected Template type
*/
private void setSQLTemplateArea() {
// Table Template buttons
if (this.tabFolder.getSelection()[0] == selectTemplatesTab) {
if (this.selectRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.SELECT_SIMPLE);
} else if (this.selectJoinRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.SELECT_JOIN);
} else if (this.unionRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.SELECT_UNION);
} else if (this.flatFileSourceRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.SELECT_FLATFILE_SRC);
} else if (this.xmlFileLocalSourceRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.SELECT_XMLFILE_LOCAL_SRC);
} else if (this.xmlFileUrlSourceRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.SELECT_XMLFILE_URL_SRC);
} else if (this.selectObjectTableRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.SELECT_OBJECT_TABLE);
}
}
// Procedure Template buttons
if (this.tabFolder.getSelection()[0] == procedureTemplatesTab) {
if (this.simpleDefaultProcRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.PROC_SIMPLE);
} else if (this.insertDefaultProcRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.PROC_INSERT_DEFAULT);
} else if (this.updateDefaultProcRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.PROC_UPDATE_DEFAULT);
} else if (this.deleteDefaultProcRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.PROC_DELETE_DEFAULT);
} else if (this.soapCreateProcRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.PROC_SOAP_WS_CREATE);
} else if (this.soapExtractProcRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.PROC_SOAP_WS_EXTRACT);
} else if (this.restProcedureRB.getSelection()) {
sqlTextViewer.getDocument().set(SQLTemplates.REST_PROCEDURE);
}
}
}
/*
* Create the Group containing the SQL Text Viewer (not editable)
*/
private void createSqlGroup( Composite parent ) {
Group textTableOptionsGroup = WidgetFactory.createGroup(parent, Messages.sqlTemplateDialogSqlAreaGroup, SWT.NONE, 2, 1);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 120;
gd.horizontalSpan = 2;
textTableOptionsGroup.setLayoutData(gd);
ColorManager colorManager = new ColorManager();
int styles = SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.FULL_SELECTION;
sqlTextViewer = new SqlTextViewer(textTableOptionsGroup, new VerticalRuler(0), styles, colorManager);
sqlDocument = new Document();
sqlTextViewer.setInput(sqlDocument);
sqlTextViewer.setEditable(false);
sqlTextViewer.getTextWidget().setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
sqlDocument.set(CoreStringUtil.Constants.EMPTY_STRING);
sqlTextViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
}
/*
* Get the currently selected Template SQL
*/
public String getSQL() {
return sqlDocument.get();
}
@Override
public void create() {
super.create();
getButton(IDialogConstants.OK_ID).setEnabled(true);
}
@Override
protected void okPressed() {
super.okPressed();
}
}