/*
* 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.editors;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.source.VerticalRuler;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
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.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.teiid.core.designer.util.CoreStringUtil;
import org.teiid.designer.core.util.VdbHelper.VdbFolders;
import org.teiid.designer.metamodels.core.ModelType;
import org.teiid.designer.metamodels.relational.extension.RestModelExtensionConstants;
import org.teiid.designer.query.sql.ISQLConstants;
import org.teiid.designer.relational.RelationalConstants;
import org.teiid.designer.relational.model.RelationalColumn;
import org.teiid.designer.relational.model.RelationalParameter;
import org.teiid.designer.relational.model.RelationalProcedureResultSet;
import org.teiid.designer.relational.model.RelationalViewProcedure;
import org.teiid.designer.relational.ui.edit.EditColumnDialog;
import org.teiid.designer.relational.ui.edit.EditParameterDialog;
import org.teiid.designer.relational.ui.edit.RelationalEditorPanel;
import org.teiid.designer.relational.ui.util.RelationalUiUtil;
import org.teiid.designer.transformation.ui.Messages;
import org.teiid.designer.transformation.ui.editors.sqleditor.SqlTextViewer;
import org.teiid.designer.transformation.ui.wizards.sqlbuilder.SQLTemplateDialog;
import org.teiid.designer.transformation.util.SqlStringUtil;
import org.teiid.designer.ui.common.UILabelUtil;
import org.teiid.designer.ui.common.UiLabelConstants;
import org.teiid.designer.ui.common.eventsupport.IDialogStatusListener;
import org.teiid.designer.ui.common.graphics.ColorManager;
import org.teiid.designer.ui.common.table.TableViewerBuilder;
import org.teiid.designer.ui.common.util.UiUtil;
import org.teiid.designer.ui.common.util.WidgetFactory;
import org.teiid.designer.ui.common.util.WidgetUtil;
import org.teiid.designer.ui.properties.extension.VdbFileDialogUtil;
/**
* @since 8.0
*/
public class ViewProcedureEditorPanel extends RelationalEditorPanel implements RelationalConstants {
private TabItem generalPropertiesTab;
private TabItem sqlTab;
private TabItem parametersTab;
private TabItem resultSetTab;
// table property widgets
private Button nonPreparedCB, deterministicCB, returnsNullCB, variableArgsCB, aggregateCB,
allowsDistinctCB, allowsOrderByCB, analyticCB, decomposableCB, useDistinctRowsCB, includeResultSetCB;
private Text resultSetNameText;
// parameter widgets
private Button addParameterButton, deleteParameterButton, editParameterButton, upParameterButton, downParameterButton;
private Button addColumnButton, deleteColumnButton, editColumnButton, upColumnButton, downColumnButton;
private Combo updateCountCombo;
private TableViewerBuilder parametersViewer;
private TableViewerBuilder columnsViewer;
// Table SQL Text Tab Controls
private SqlTextViewer sqlTextViewer;
private Document sqlDocument;
private Text javaClassText, javaMethodText, functionCategoryText, udfJarPathText;
private Button udfJarPathBrowse;
private Button applyRestWarPropertiesCB;
private String restMethodValue = RestModelExtensionConstants.METHODS.GET;
private Combo restMethodsCombo;
private String restUriValue;
private Text restUriText;
private String restCharSetValue;
private Combo restCharSetsCombo;
private String restHeadersValue;
private Text restHeadersText;
boolean validationPerformed = false;
/**
* @param parent the parent panel
* @param dialogModel dialog model
* @param statusListener the dialog status listener
*/
public ViewProcedureEditorPanel(Composite parent, TransformationDialogModel dialogModel, IDialogStatusListener statusListener) {
super(parent, dialogModel, statusListener);
synchronizeUI();
}
@Override
protected RelationalViewProcedure getRelationalReference() {
return (RelationalViewProcedure) super.getRelationalReference();
}
private boolean isFunction() {
return getRelationalReference().isFunction();
}
@Override
protected void createPanel(Composite parent) {
Composite thePanel = WidgetFactory.createPanel(parent, SWT.NONE, 1, 1);
GridLayoutFactory.fillDefaults().applyTo(thePanel);
GridDataFactory.fillDefaults().applyTo(thePanel);
createNameGroup(thePanel);
TabFolder tabFolder = createTabFolder(parent);
createGeneralPropertiesTab(tabFolder);
createParametersTab(tabFolder);
if( !isFunction() ) {
createSQLTab(tabFolder);
createResultSetTab(tabFolder);
}
createDescriptionTab(tabFolder);
}
private void createGeneralPropertiesTab(TabFolder folderParent) {
// build the SELECT tab
Composite thePanel = createPropertiesPanel(folderParent);
this.generalPropertiesTab = new TabItem(folderParent, SWT.NONE);
this.generalPropertiesTab.setControl(thePanel);
this.generalPropertiesTab.setText(Messages.propertiesLabel);
this.generalPropertiesTab.setImage(RelationalUiUtil.getRelationalImage(TYPES.PROCEDURE, ModelType.VIRTUAL, Status.OK_STATUS));
}
private void createParametersTab(TabFolder folderParent) {
Composite thePanel = createParameterTableGroup(folderParent);
this.parametersTab = new TabItem(folderParent, SWT.NONE);
this.parametersTab.setControl(thePanel);
this.parametersTab.setText(Messages.parametersLabel);
this.parametersTab.setImage(RelationalUiUtil.getRelationalImage(TYPES.PARAMETER, getRelationalReference().getModelType(), Status.OK_STATUS));
}
/*
* Create the SQL Tab
*/
private void createSQLTab( TabFolder folderParent ) {
Composite thePanel = createSQLPanel(folderParent);
this.sqlTab = new TabItem(folderParent, SWT.NONE);
this.sqlTab.setControl(thePanel);
this.sqlTab.setText(Messages.transformationSqlLabel);
this.sqlTab.setImage(RelationalUiUtil.getNativeSQLImage(Status.OK_STATUS));
}
private void createResultSetTab(TabFolder folderParent) {
Composite thePanel = createResultSetPanel(folderParent);
this.resultSetTab = new TabItem(folderParent, SWT.NONE);
this.resultSetTab.setControl(thePanel);
this.resultSetTab.setText(Messages.resultSetLabel);
}
@Override
protected void synchronizeExtendedUI() {
generalPropertiesTab.setImage(RelationalUiUtil.getRelationalImage(TYPES.PROCEDURE, getRelationalReference().getModelType(), Status.OK_STATUS));
this.parametersViewer.getTable().removeAll();
IStatus maxStatus = Status.OK_STATUS;
for( RelationalParameter row : getRelationalReference().getParameters() ) {
if( row.getStatus().getSeverity() > maxStatus.getSeverity() ) {
maxStatus = row.getStatus();
}
this.parametersViewer.add(row);
}
parametersTab.setImage(RelationalUiUtil.getRelationalImage(TYPES.PARAMETER, getRelationalReference().getModelType(), maxStatus));
// Result Set Tab
if( !isFunction() ) {
if( this.getRelationalReference().getResultSet() == null ) {
if( WidgetUtil.widgetValueChanged(includeResultSetCB, false)) {
this.includeResultSetCB.setSelection(false);
this.addColumnButton.setEnabled(false);
}
this.resultSetNameText.setEnabled(false);
if( WidgetUtil.widgetValueChanged(resultSetNameText, EMPTY_STRING)) {
this.resultSetNameText.setText(EMPTY_STRING);
}
this.columnsViewer.getTable().removeAll();
this.columnsViewer.getTable().setEnabled(false);
this.resultSetTab.setImage(RelationalUiUtil.getRelationalImage(TYPES.TABLE, ModelType.VIRTUAL, Status.OK_STATUS));
} else {
this.columnsViewer.getTable().setEnabled(true);
if( WidgetUtil.widgetValueChanged(includeResultSetCB, true)) {
this.includeResultSetCB.setSelection(true);
}
this.resultSetNameText.setEnabled(true);
if( this.getRelationalReference().getResultSet().getName() != null && WidgetUtil.widgetValueChanged(resultSetNameText, this.getRelationalReference().getResultSet().getName())) {
this.resultSetNameText.setText(this.getRelationalReference().getResultSet().getName());
}
this.columnsViewer.getTable().removeAll();
if( !this.getRelationalReference().getResultSet().getColumns().isEmpty() ) {
for( RelationalColumn column : this.getRelationalReference().getResultSet().getColumns() ) {
this.columnsViewer.add(column);
}
}
resultSetTab.setImage(RelationalUiUtil.getRelationalImage(TYPES.TABLE, getRelationalReference().getResultSet().getModelType(), this.getRelationalReference().getResultSet().getStatus()));
}
}
if( this.isFunction() ) {
// Assume UDF
if( this.getRelationalReference().getUdfJarPath() != null ) {
int caret = this.udfJarPathText.getCaretPosition();
this.udfJarPathText.setText(this.getRelationalReference().getUdfJarPath());
this.udfJarPathText.setSelection(caret);
}
}
}
private Composite createResultSetPanel(Composite parent) {
Composite thePanel = WidgetFactory.createPanel(parent, SWT.NONE, 1, 2);
GridLayoutFactory.fillDefaults().margins(10, 10).applyTo(thePanel);
GridDataFactory.fillDefaults().grab(true, true).applyTo(thePanel);
this.includeResultSetCB = new Button(thePanel, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.includeResultSetCB);
this.includeResultSetCB.setText(Messages.includeLabel);
this.includeResultSetCB.setToolTipText(Messages.includeResultSetTooltip);
this.includeResultSetCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected( SelectionEvent e ) {
if( includeResultSetCB.getSelection() ) {
if( getRelationalReference().getResultSet() == null ) {
RelationalProcedureResultSet resultSet = new RelationalProcedureResultSet();
if( resultSetNameText.getText() != null ) {
resultSet.setName(resultSetNameText.getText());
}
getRelationalReference().setResultSet(resultSet);
}
} else {
getRelationalReference().setResultSet(null);
}
handleInfoChanged();
}
});
Composite namePanel = WidgetFactory.createPanel(thePanel, SWT.NONE, 2, 2);
GridLayoutFactory.fillDefaults().numColumns(2).applyTo(namePanel);
GridDataFactory.fillDefaults().grab(true, false).applyTo(namePanel);
Label label = new Label(namePanel, SWT.NONE | SWT.RIGHT);
label.setText(Messages.nameLabel);
GridDataFactory.fillDefaults().applyTo(label);
this.resultSetNameText = new Text(namePanel, SWT.BORDER | SWT.SINGLE);
this.resultSetNameText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE));
GridDataFactory.fillDefaults().grab(true, false).minSize(50, SWT.DEFAULT).applyTo(this.resultSetNameText);
this.resultSetNameText.addModifyListener(new ModifyListener() {
@Override
public void modifyText( final ModifyEvent event ) {
String value = resultSetNameText.getText();
if( value == null ) {
value = EMPTY_STRING;
}
if( getRelationalReference().getResultSet() != null ) {
RelationalProcedureResultSet resultSet = getRelationalReference().getResultSet();
resultSet.setName(value);
}
handleInfoChanged();
}
});
Composite buttonPanel = WidgetFactory.createPanel(thePanel, SWT.NONE, 1, 5);
GridLayoutFactory.fillDefaults().numColumns(5).applyTo(buttonPanel);
GridDataFactory.fillDefaults().span(2, 1).applyTo(buttonPanel);
addColumnButton = new Button(buttonPanel, SWT.PUSH);
addColumnButton.setText(Messages.addLabel);
GridDataFactory.fillDefaults().applyTo(addColumnButton);
addColumnButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().getResultSet().createColumn();
handleInfoChanged();
setColumnButtonsState();
}
});
this.addColumnButton.setEnabled(false);
deleteColumnButton = new Button(buttonPanel, SWT.PUSH);
deleteColumnButton.setText(Messages.deleteLabel);
GridDataFactory.fillDefaults().applyTo(deleteColumnButton);
deleteColumnButton.setEnabled(false);
deleteColumnButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RelationalColumn column = null;
IStructuredSelection selection = (IStructuredSelection)columnsViewer.getSelection();
for( Object obj : selection.toArray()) {
if( obj instanceof RelationalColumn ) {
column = (RelationalColumn) obj;
break;
}
}
if( column != null ) {
getRelationalReference().getResultSet().removeColumn(column);
handleInfoChanged();
}
setColumnButtonsState();
}
});
editColumnButton = new Button(buttonPanel, SWT.PUSH);
editColumnButton.setText(Messages.Edit);
GridDataFactory.fillDefaults().applyTo(editColumnButton);
editColumnButton.setEnabled(false);
editColumnButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RelationalColumn column = null;
IStructuredSelection selection = (IStructuredSelection)columnsViewer.getSelection();
for( Object obj : selection.toArray()) {
if( obj instanceof RelationalColumn ) {
column = (RelationalColumn) obj;
break;
}
}
if( column != null ) {
EditColumnDialog dialog = new EditColumnDialog(getShell(), column);
dialog.open();
handleInfoChanged();
}
setColumnButtonsState();
}
});
upColumnButton = new Button(buttonPanel, SWT.PUSH);
upColumnButton.setText(Messages.moveUpLabel);
GridDataFactory.fillDefaults().applyTo(upColumnButton);
upColumnButton.setEnabled(false);
upColumnButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RelationalColumn info = null;
IStructuredSelection selection = (IStructuredSelection)columnsViewer.getSelection();
for( Object obj : selection.toArray()) {
if( obj instanceof RelationalColumn ) {
info = (RelationalColumn) obj;
break;
}
}
if( info != null ) {
int selectedIndex = columnsViewer.getTable().getSelectionIndex();
getRelationalReference().getResultSet().moveColumnUp(info);
handleInfoChanged();
columnsViewer.getTable().select(selectedIndex-1);
}
setColumnButtonsState();
}
});
downColumnButton = new Button(buttonPanel, SWT.PUSH);
downColumnButton.setText(Messages.moveDownLabel);
GridDataFactory.fillDefaults().applyTo(downColumnButton);
downColumnButton.setEnabled(false);
downColumnButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RelationalColumn info = null;
IStructuredSelection selection = (IStructuredSelection)columnsViewer.getSelection();
for( Object obj : selection.toArray()) {
if( obj instanceof RelationalColumn ) {
info = (RelationalColumn) obj;
break;
}
}
if( info != null ) {
int selectedIndex = columnsViewer.getTable().getSelectionIndex();
getRelationalReference().getResultSet().moveColumnDown(info);
handleInfoChanged();
columnsViewer.getTable().select(selectedIndex+1);
}
setColumnButtonsState();
}
});
this.columnsViewer = new TableViewerBuilder(thePanel, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
// create columns
TableViewerColumn column = columnsViewer.createColumn(SWT.LEFT, 30, 30, true);
column.getColumn().setText(Messages.columnNameLabel + " "); //$NON-NLS-1$
column.setEditingSupport(new ColumnNameEditingSupport(this.columnsViewer.getTableViewer()));
column.setLabelProvider(new ColumnDataLabelProvider(0));
column = columnsViewer.createColumn(SWT.LEFT, 30, 30, true);
column.getColumn().setText(Messages.dataTypeLabel + " "); //$NON-NLS-1$
column.setLabelProvider(new ColumnDataLabelProvider(1));
column = columnsViewer.createColumn(SWT.LEFT, 30, 30, true);
column.getColumn().setText(Messages.lengthLabel);
column.setLabelProvider(new ColumnDataLabelProvider(2));
if( this.getRelationalReference().getResultSet() != null ) {
for( RelationalColumn row : this.getRelationalReference().getResultSet().getColumns() ) {
this.columnsViewer.add(row);
}
}
this.columnsViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
setColumnButtonsState();
}
});
this.columnsViewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection sel = (IStructuredSelection)event.getSelection();
Object[] objs = sel.toArray();
if( objs.length == 1 && objs[0] instanceof RelationalColumn) {
EditColumnDialog dialog = new EditColumnDialog(getShell(), (RelationalColumn)objs[0]);
dialog.open();
handleInfoChanged();
}
}
});
return thePanel;
}
private void setColumnButtonsState() {
IStructuredSelection selection = (IStructuredSelection)this.columnsViewer.getSelection();
boolean enable = selection != null && !selection.isEmpty();
deleteColumnButton.setEnabled(enable);
editColumnButton.setEnabled(enable);
if( enable ) {
Object[] objs = selection.toArray();
RelationalColumn columnInfo = (RelationalColumn)objs[0];
upColumnButton.setEnabled(getRelationalReference().getResultSet().canMoveColumnUp(columnInfo));
downColumnButton.setEnabled(getRelationalReference().getResultSet().canMoveColumnDown(columnInfo));
} else {
upColumnButton.setEnabled(false);
downColumnButton.setEnabled(false);
}
}
@SuppressWarnings("unused")
private Composite createPropertiesPanel(Composite parent) {
Composite thePanel = WidgetFactory.createPanel(parent, SWT.NONE, 1, 2);
GridLayoutFactory.fillDefaults().numColumns(2).margins(10, 10).applyTo(thePanel);
GridDataFactory.fillDefaults().applyTo(thePanel);
Label label = null;
if (!this.isFunction()) {
label = new Label(thePanel, SWT.NONE);
label.setText(Messages.updateCountLabel);
this.updateCountCombo = new Combo(thePanel, SWT.DROP_DOWN | SWT.READ_ONLY);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.updateCountCombo);
for (String val : UPDATE_COUNT.AS_ARRAY) {
updateCountCombo.add(val);
}
this.updateCountCombo.setText(UPDATE_COUNT.AUTO);
this.nonPreparedCB = new Button(thePanel, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.nonPreparedCB);
this.nonPreparedCB.setText(Messages.nonPreparedLabel);
this.nonPreparedCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected( SelectionEvent e ) {
getRelationalReference().setNonPrepared(nonPreparedCB.getSelection());
handleInfoChanged();
}
});
REST_PROPERTIES : {
Group restGroup = WidgetFactory.createGroup(thePanel, Messages.restOptions, SWT.FILL, 1, 2);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=4;
restGroup.setLayoutData(gd);
this.applyRestWarPropertiesCB = WidgetFactory.createCheckBox(restGroup, Messages.enableRestForThisProcedure);
this.applyRestWarPropertiesCB.setEnabled(true);
this.applyRestWarPropertiesCB.setSelection(true);
gd = new GridData();
gd.horizontalSpan=2;
this.applyRestWarPropertiesCB.setLayoutData(gd);
this.applyRestWarPropertiesCB.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean checked = applyRestWarPropertiesCB.getSelection();
getRelationalReference().setRestEnabled(checked);
restMethodsCombo.setEnabled(checked);
restUriText.setEnabled(checked);
restCharSetsCombo.setEnabled(checked);
restHeadersText.setEnabled(checked);
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
});
label = new Label(restGroup, SWT.NONE);
label.setText(Messages.restMethod);
label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
restMethodsCombo = new Combo(restGroup, SWT.NONE | SWT.READ_ONLY);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalAlignment = GridData.CENTER;
gd.horizontalSpan = 1;
restMethodsCombo.setLayoutData(gd);
List<String> comboItems = new ArrayList<String>();
for( String str : RestModelExtensionConstants.METHODS_ARRAY ) {
comboItems.add(str);
}
WidgetUtil.setComboItems(restMethodsCombo, comboItems, null, true);
restMethodsCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent ev ) {
selectMethodComboItem(restMethodsCombo.getSelectionIndex());
}
});
label = new Label(restGroup, SWT.NONE);
label.setText(Messages.restUri);
label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
// text field for named type
this.restUriText = WidgetFactory.createTextField(restGroup, GridData.FILL_HORIZONTAL);
this.restUriText.setToolTipText(Messages.restUriTooltip);
this.restUriText.setEditable(true);
this.restUriText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
restUriValue = restUriText.getText();
getRelationalReference().setRestUri(restUriValue);
}
});
label = new Label(restGroup, SWT.NONE);
label.setText(Messages.restCharSet);
label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
restCharSetsCombo = new Combo(restGroup, SWT.NONE | SWT.READ_ONLY);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalAlignment = GridData.CENTER;
gd.horizontalSpan = 1;
restCharSetsCombo.setLayoutData(gd);
comboItems = new ArrayList<String>();
for( String str : RestModelExtensionConstants.CHARSETS_ARRAY ) {
comboItems.add(str);
}
WidgetUtil.setComboItems(restCharSetsCombo, comboItems, null, true);
restCharSetsCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent ev ) {
selectCharSetComboItem(restCharSetsCombo.getSelectionIndex());
}
});
label = new Label(restGroup, SWT.NONE);
label.setText(Messages.restHeaders);
label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
// text field for named type
this.restHeadersText = WidgetFactory.createTextField(restGroup, GridData.FILL_HORIZONTAL);
this.restHeadersText.setToolTipText(Messages.restHeadersTooltip);
this.restHeadersText.setEditable(true);
this.restHeadersText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
restHeadersValue = restHeadersText.getText();
getRelationalReference().setRestHeaders(restHeadersValue);
}
});
}
}
if (this.isFunction()) {
final Group functionGroup = WidgetFactory.createGroup(thePanel,
Messages.functionPropertiesLabel,
GridData.FILL_HORIZONTAL,
2,
3);
if (!this.getRelationalReference().isSourceFunction()) {
// Add java class and method fields
label = new Label(functionGroup, SWT.NONE);
label.setText(Messages.functionCategoryLabel);
this.functionCategoryText = new Text(functionGroup, SWT.BORDER | SWT.SINGLE);
this.functionCategoryText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE));
GridDataFactory.fillDefaults().span(2, 1).applyTo(this.functionCategoryText);
this.functionCategoryText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent event) {
String value = functionCategoryText.getText();
if (value == null) {
value = EMPTY_STRING;
}
getRelationalReference().setFunctionCategory(value);
handleInfoChanged();
}
});
label = new Label(functionGroup, SWT.NONE);
label.setText(Messages.javaClassLabel);
this.javaClassText = new Text(functionGroup, SWT.BORDER | SWT.SINGLE);
this.javaClassText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE));
GridDataFactory.fillDefaults().span(2, 1).applyTo(this.javaClassText);
this.javaClassText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent event) {
String value = javaClassText.getText();
if (value == null) {
value = EMPTY_STRING;
}
getRelationalReference().setJavaClassName(value);
handleInfoChanged();
}
});
label = new Label(functionGroup, SWT.NONE);
label.setText(Messages.javaMethodLabel);
this.javaMethodText = new Text(functionGroup, SWT.BORDER | SWT.SINGLE);
this.javaMethodText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE));
GridDataFactory.fillDefaults().span(2, 1).applyTo(this.javaMethodText);
this.javaMethodText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent event) {
String value = javaMethodText.getText();
if (value == null) {
value = EMPTY_STRING;
}
getRelationalReference().setJavaMethodName(value);
handleInfoChanged();
}
});
label = new Label(functionGroup, SWT.NONE);
label.setText(Messages.udfJarPathLabel);
this.udfJarPathText = new Text(functionGroup, SWT.BORDER | SWT.SINGLE);
this.udfJarPathText.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE));
GridDataFactory.fillDefaults().applyTo(this.udfJarPathText);
this.udfJarPathText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent event) {
String value = udfJarPathText.getText();
if (value == null) {
value = EMPTY_STRING;
}
getRelationalReference().setUdfJarPath(value);
if (!isSynchronizing()) {
handleInfoChanged();
}
}
});
this.udfJarPathBrowse = new Button(functionGroup, SWT.PUSH | SWT.RIGHT);
this.udfJarPathBrowse.setText(UILabelUtil.getLabel(UiLabelConstants.LABEL_IDS.ELIPSIS));
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.udfJarPathBrowse);
this.udfJarPathBrowse.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
// Open dialog and get file
String selectedFile = VdbFileDialogUtil.selectFile(udfJarPathBrowse.getShell(),
getModelFile().getProject(),
VdbFolders.UDF);
if( selectedFile != null && !selectedFile.isEmpty() ) {
getRelationalReference().setUdfJarPath(selectedFile);
handleInfoChanged();
}
}
});
Composite innerPanel = WidgetFactory.createPanel(functionGroup, SWT.NONE, GridData.FILL_HORIZONTAL, 3);
GridLayoutFactory.fillDefaults().numColumns(3).applyTo(innerPanel);
GridDataFactory.fillDefaults().span(3, 1).applyTo(innerPanel);
this.deterministicCB = new Button(innerPanel, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.deterministicCB);
this.deterministicCB.setText(Messages.deterministicLabel);
this.deterministicCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().setDeterministic(deterministicCB.getSelection());
handleInfoChanged();
}
});
this.returnsNullCB = new Button(innerPanel, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.returnsNullCB);
this.returnsNullCB.setText(Messages.returnsNullOnNullLabel);
this.returnsNullCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().setReturnsNullOnNull(returnsNullCB.getSelection());
handleInfoChanged();
}
});
this.variableArgsCB = new Button(innerPanel, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.variableArgsCB);
this.variableArgsCB.setText(Messages.variableArgumentsLabel);
this.variableArgsCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().setVariableArguments(variableArgsCB.getSelection());
handleInfoChanged();
}
});
final Group aggregateGroup = WidgetFactory.createGroup(functionGroup,
Messages.aggregatePropertiesLabel,
GridData.FILL_HORIZONTAL,
2,
3);
this.aggregateCB = new Button(aggregateGroup, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.aggregateCB);
this.aggregateCB.setText(Messages.aggregateLabel);
this.aggregateCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().setAggregate(aggregateCB.getSelection());
handleInfoChanged();
}
});
this.allowsDistinctCB = new Button(aggregateGroup, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.allowsDistinctCB);
this.allowsDistinctCB.setText(Messages.allowsDistinctLabel);
this.allowsDistinctCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().setAllowsDistinct(allowsDistinctCB.getSelection());
handleInfoChanged();
}
});
this.allowsOrderByCB = new Button(aggregateGroup, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.allowsOrderByCB);
this.allowsOrderByCB.setText(Messages.allowsOrderByLabel);
this.allowsOrderByCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().setAllowsOrderBy(allowsOrderByCB.getSelection());
handleInfoChanged();
}
});
this.analyticCB = new Button(aggregateGroup, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.analyticCB);
this.analyticCB.setText(Messages.analyticLabel);
this.analyticCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().setAnalytic(analyticCB.getSelection());
handleInfoChanged();
}
});
this.decomposableCB = new Button(aggregateGroup, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.decomposableCB);
this.decomposableCB.setText(Messages.decomposableLabel);
this.decomposableCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().setDecomposable(decomposableCB.getSelection());
handleInfoChanged();
}
});
this.useDistinctRowsCB = new Button(aggregateGroup, SWT.CHECK | SWT.RIGHT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(this.useDistinctRowsCB);
this.useDistinctRowsCB.setText(Messages.usesDistinctRowsLabel);
this.useDistinctRowsCB.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().setUseDistinctRows(useDistinctRowsCB.getSelection());
handleInfoChanged();
}
});
}
}
setUiState();
return thePanel;
}
private Composite createParameterTableGroup(Composite parent) {
Composite thePanel = WidgetFactory.createPanel(parent, SWT.NONE, 1, 1);
GridLayoutFactory.fillDefaults().margins(10, 10).applyTo(thePanel);
GridDataFactory.fillDefaults().grab(true, true).applyTo(thePanel);
Composite buttonPanel = WidgetFactory.createPanel(thePanel, SWT.NONE, 1, 5);
GridLayoutFactory.fillDefaults().numColumns(5).applyTo(buttonPanel);
GridDataFactory.fillDefaults().grab(true, false).applyTo(buttonPanel);
addParameterButton = new Button(buttonPanel, SWT.PUSH);
addParameterButton.setText(Messages.addLabel);
GridDataFactory.fillDefaults().applyTo(addParameterButton);
addParameterButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
getRelationalReference().createParameter();
handleInfoChanged();
setParameterButtonsState();
}
});
deleteParameterButton = new Button(buttonPanel, SWT.PUSH);
deleteParameterButton.setText(Messages.deleteLabel);
GridDataFactory.fillDefaults().applyTo(deleteParameterButton);
deleteParameterButton.setEnabled(false);
deleteParameterButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RelationalParameter parameter = null;
IStructuredSelection selection = (IStructuredSelection)parametersViewer.getSelection();
for( Object obj : selection.toArray()) {
if( obj instanceof RelationalParameter ) {
parameter = (RelationalParameter) obj;
break;
}
}
if( parameter != null ) {
getRelationalReference().removeParameter(parameter);
handleInfoChanged();
}
setParameterButtonsState();
}
});
editParameterButton = new Button(buttonPanel, SWT.PUSH);
editParameterButton.setText(Messages.Edit);
GridDataFactory.fillDefaults().applyTo(editParameterButton);
editParameterButton.setEnabled(false);
editParameterButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RelationalParameter parameter = null;
IStructuredSelection selection = (IStructuredSelection)parametersViewer.getSelection();
for( Object obj : selection.toArray()) {
if( obj instanceof RelationalParameter ) {
parameter = (RelationalParameter) obj;
break;
}
}
if( parameter != null ) {
EditParameterDialog dialog = new EditParameterDialog(getShell(), parameter);
dialog.open();
handleInfoChanged();
}
setParameterButtonsState();
}
});
upParameterButton = new Button(buttonPanel, SWT.PUSH);
upParameterButton.setText(Messages.moveUpLabel);
GridDataFactory.fillDefaults().applyTo(upParameterButton);
upParameterButton.setEnabled(false);
upParameterButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RelationalParameter info = null;
IStructuredSelection selection = (IStructuredSelection)parametersViewer.getSelection();
for( Object obj : selection.toArray()) {
if( obj instanceof RelationalParameter ) {
info = (RelationalParameter) obj;
break;
}
}
if( info != null ) {
int selectedIndex = parametersViewer.getTable().getSelectionIndex();
getRelationalReference().moveParameterUp(info);
handleInfoChanged();
parametersViewer.getTable().select(selectedIndex-1);
}
setParameterButtonsState();
}
});
downParameterButton = new Button(buttonPanel, SWT.PUSH);
downParameterButton.setText(Messages.moveDownLabel);
GridDataFactory.fillDefaults().applyTo(downParameterButton);
downParameterButton.setEnabled(false);
downParameterButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RelationalParameter info = null;
IStructuredSelection selection = (IStructuredSelection)parametersViewer.getSelection();
for( Object obj : selection.toArray()) {
if( obj instanceof RelationalParameter ) {
info = (RelationalParameter) obj;
break;
}
}
if( info != null ) {
int selectedIndex = parametersViewer.getTable().getSelectionIndex();
getRelationalReference().moveParameterDown(info);
handleInfoChanged();
parametersViewer.getTable().select(selectedIndex+1);
}
setParameterButtonsState();
}
});
this.parametersViewer = new TableViewerBuilder(thePanel, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
GridDataFactory.fillDefaults().grab(true, true).hint(SWT.DEFAULT, 150).applyTo(this.parametersViewer.getTableComposite());
// create columns
TableViewerColumn column = parametersViewer.createColumn(SWT.LEFT, 30, 30, true);
column.getColumn().setText(Messages.parameterNameLabel + " "); //$NON-NLS-1$
column.setLabelProvider(new ParameterDataLabelProvider(0));
column = parametersViewer.createColumn(SWT.LEFT, 20, 30, true);
column.getColumn().setText(Messages.dataTypeLabel + " "); //$NON-NLS-1$
column.setLabelProvider(new ParameterDataLabelProvider(1));
column = parametersViewer.createColumn(SWT.LEFT, 20, 30, true);
column.getColumn().setText(Messages.lengthLabel + " ");
column.setLabelProvider(new ParameterDataLabelProvider(2));
column = parametersViewer.createColumn(SWT.LEFT, 30, 30, true);
column.getColumn().setText(Messages.directionLabel);
column.setLabelProvider(new ParameterDataLabelProvider(3));
if( getRelationalReference() != null ) {
for( RelationalParameter row : this.getRelationalReference().getParameters() ) {
this.parametersViewer.add(row);
}
}
// set the existing Direction combo boxes
this.parametersViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
setParameterButtonsState();
}
});
this.parametersViewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection sel = (IStructuredSelection)event.getSelection();
Object[] objs = sel.toArray();
if( objs.length == 1 && objs[0] instanceof RelationalParameter) {
EditParameterDialog dialog = new EditParameterDialog(getShell(), (RelationalParameter)objs[0]);
dialog.open();
handleInfoChanged();
}
}
});
return thePanel;
}
private void setParameterButtonsState() {
IStructuredSelection selection = (IStructuredSelection)this.parametersViewer.getSelection();
boolean enable = selection != null && !selection.isEmpty();
deleteParameterButton.setEnabled(enable);
editParameterButton.setEnabled(enable);
if( enable ) {
Object[] objs = selection.toArray();
RelationalParameter parameterInfo = (RelationalParameter)objs[0];
upParameterButton.setEnabled(getRelationalReference().canMoveParameterUp(parameterInfo));
downParameterButton.setEnabled(getRelationalReference().canMoveParameterDown(parameterInfo));
} else {
upParameterButton.setEnabled(false);
downParameterButton.setEnabled(false);
}
}
/*
* Create the SQL Display tab panel
*/
private Composite createSQLPanel( Composite parent ) {
Composite thePanel = WidgetFactory.createPanel(parent, SWT.NONE, 1, 1);
GridLayoutFactory.fillDefaults().margins(10, 10).applyTo(thePanel);
GridDataFactory.fillDefaults().grab(true, true).applyTo(thePanel);
Button templateButton = new Button(thePanel, SWT.LEFT);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(templateButton);
templateButton.setText(Messages.selectSQLTemplateLabel);
templateButton.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected( SelectionEvent e ) {
SQLTemplateDialog templateDialog = new SQLTemplateDialog(UiUtil.getWorkbenchShellOnlyIfUiThread(),
SQLTemplateDialog.PROC_TEMPLATES);
if (templateDialog.open() == Window.OK) {
String originalSql = sqlDocument.get();
boolean okToInsertOrReplace = true;
if( templateDialog.getInsertOption() == ISQLConstants.INSERT_OPTIONS.REPLACE_ALL &&
originalSql != null && originalSql.trim().length() > 0) {
// make sure user want to replace all
okToInsertOrReplace = MessageDialog.openConfirm(templateDialog.getShell(),
Messages.confirmSqlReplaceDialogTitle,
Messages.confirmSqlReplaceDialogMessage_2);
}
if( okToInsertOrReplace ) {
int caretOffset = sqlTextViewer.getTextWidget().getCaretOffset();
String newSql = SqlStringUtil.insertSql(
originalSql,
templateDialog.getSQL(),
templateDialog.getInsertOption(),
caretOffset);
getRelationalReference().setTransformationSQL(newSql);
sqlDocument.set(newSql);
handleInfoChanged();
}
}
}
});
createSqlGroup(thePanel);
return thePanel;
}
/*
* The SQL Display area portion of the SQL Tab
*/
private void createSqlGroup( Composite parent ) {
Group textTableOptionsGroup = WidgetFactory.createGroup(parent, Messages.sqlDefinitionLabel);
GridDataFactory.fillDefaults().grab(true, true).span(2, 1).applyTo(textTableOptionsGroup);
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.getTextWidget().addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
getRelationalReference().setTransformationSQL(sqlTextViewer.getTextWidget().getText());
handleInfoChanged();
}
});
sqlTextViewer.setEditable(true);
sqlDocument.set(CoreStringUtil.Constants.EMPTY_STRING);
GridDataFactory.fillDefaults().grab(true, true).applyTo(sqlTextViewer.getControl());
}
private void selectMethodComboItem(int selectionIndex) {
if( selectionIndex >=0 ) {
restMethodsCombo.select(selectionIndex);
this.restMethodValue = restMethodsCombo.getItem(selectionIndex);
getRelationalReference().setRestMethod(restMethodValue);
}
}
private void selectCharSetComboItem(int selectionIndex) {
if( selectionIndex >=0 ) {
restCharSetsCombo.select(selectionIndex);
this.restCharSetValue = restCharSetsCombo.getItem(selectionIndex);
getRelationalReference().setRestCharSet(restCharSetValue);
}
}
private void setUiState() {
if( ! this.isFunction() ) {
if( this.addColumnButton != null && this.includeResultSetCB != null ) {
boolean enable = this.includeResultSetCB.getSelection();
this.addColumnButton.setEnabled(enable);
if( !enable ) {
this.deleteColumnButton.setEnabled(false);
this.downColumnButton.setEnabled(false);
this.upColumnButton.setEnabled(false);
}
}
boolean restEnabled = getRelationalReference().isRestEnabled();
this.applyRestWarPropertiesCB.setSelection(restEnabled);
// if( restEnabled ) {
// if( getRelationalReference().getRestUri() != null ) {
// restUriText.setText(getRelationalReference().getRestUri());
// } else {
// restUriText.setText(StringConstants.EMPTY_STRING);
// }
// } else {
// restUriText.setText(StringConstants.EMPTY_STRING);
// }
restMethodsCombo.setEnabled(restEnabled);
restUriText.setEnabled(restEnabled);
restCharSetsCombo.setEnabled(restEnabled);
restHeadersText.setEnabled(restEnabled);
return;
}
if( isFunction() ) {
boolean functionState = true;
this.deterministicCB.setEnabled(functionState);
this.returnsNullCB.setEnabled(functionState);
this.variableArgsCB.setEnabled(functionState);
this.aggregateCB.setEnabled(functionState);
boolean aggregateState = functionState;
if (aggregateState) {
aggregateState = aggregateCB.getSelection();
}
this.allowsDistinctCB.setEnabled(aggregateState);
this.allowsOrderByCB.setEnabled(aggregateState);
this.analyticCB.setEnabled(aggregateState);
this.decomposableCB.setEnabled(aggregateState);
this.useDistinctRowsCB.setEnabled(aggregateState);
}
}
@Override
protected void handleInfoChanged() {
super.handleInfoChanged();
setUiState();
}
@Override
protected void validate() {
this.getRelationalReference().validate();
setCanFinish(this.getRelationalReference().nameIsValid());
IStatus currentStatus = this.getRelationalReference().getStatus();
if( currentStatus.isOK() ) {
setStatus(Status.OK_STATUS);
} else {
setStatus(currentStatus);
}
validationPerformed = true;
}
@Override
public boolean canFinish() {
// check if procedure name is not-null
if( !validationPerformed && this.getRelationalReference().getName() != null ) {
return true;
}
return super.canFinish();
}
class ParameterDataLabelProvider extends ColumnLabelProvider {
private final int columnNumber;
public ParameterDataLabelProvider(int columnNumber) {
this.columnNumber = columnNumber;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.jface.viewers.ColumnLabelProvider#getText(java.lang.Object)
*/
@Override
public String getText(Object element) {
if( element instanceof RelationalParameter ) {
switch (this.columnNumber) {
case 0: {
return ((RelationalParameter)element).getName();
}
case 1: {
return ((RelationalParameter)element).getDatatype();
}
case 2: {
return Integer.toString(((RelationalParameter)element).getLength());
}
case 3: {
return ((RelationalParameter)element).getDirection();
}
}
}
return EMPTY_STRING;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.jface.viewers.CellLabelProvider#getToolTipText(java.lang.Object)
*/
@Override
public String getToolTipText(Object element) {
switch (this.columnNumber) {
case 0: {
return "Tooltip 1"; //getString("columnNameColumnTooltip"); //$NON-NLS-1$
}
case 1: {
return "Tooltip 2"; //getString("datatypeColumnTooltip"); //$NON-NLS-1$
}
}
return "unknown tooltip"; //$NON-NLS-1$
}
@Override
public Image getImage(Object element) {
if( this.columnNumber == 0 ) {
return RelationalUiUtil.getRelationalImage(TYPES.PARAMETER, ModelType.VIRTUAL, Status.OK_STATUS);
}
return null;
}
}
class ColumnDataLabelProvider extends ColumnLabelProvider {
private final int columnNumber;
public ColumnDataLabelProvider(int columnNumber) {
this.columnNumber = columnNumber;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.jface.viewers.ColumnLabelProvider#getText(java.lang.Object)
*/
@Override
public String getText(Object element) {
if( element instanceof RelationalColumn ) {
switch (this.columnNumber) {
case 0: {
return ((RelationalColumn)element).getName();
}
case 1: {
return ((RelationalColumn)element).getDatatype();
}
case 2: {
return Integer.toString(((RelationalColumn)element).getLength());
}
}
}
return EMPTY_STRING;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.jface.viewers.CellLabelProvider#getToolTipText(java.lang.Object)
*/
@Override
public String getToolTipText(Object element) {
switch (this.columnNumber) {
case 0: {
return "Tooltip 1"; //getString("columnNameColumnTooltip"); //$NON-NLS-1$
}
case 1: {
return "Tooltip 2"; //getString("datatypeColumnTooltip"); //$NON-NLS-1$
}
}
return "unknown tooltip"; //$NON-NLS-1$
}
@Override
public Image getImage(Object element) {
if( this.columnNumber == 0 ) {
return RelationalUiUtil.getRelationalImage(TYPES.COLUMN, ModelType.VIRTUAL, Status.OK_STATUS);
}
return null;
}
}
class ColumnNameEditingSupport extends EditingSupport {
private TextCellEditor editor;
/**
* Create a new instance of the receiver.
*
* @param viewer the column viewer
*/
public ColumnNameEditingSupport(ColumnViewer viewer) {
super(viewer);
this.editor = new TextCellEditor((Composite) viewer.getControl());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object)
*/
@Override
protected boolean canEdit(Object element) {
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#getCellEditor(java.lang.Object)
*/
@Override
protected CellEditor getCellEditor(Object element) {
return editor;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object)
*/
@Override
protected Object getValue(Object element) {
if( element instanceof RelationalColumn ) {
return ((RelationalColumn)element).getName();
}
return 0;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object,
* java.lang.Object)
*/
@Override
protected void setValue(Object element, Object value) {
if( element instanceof RelationalColumn ) {
String oldValue = ((RelationalColumn)element).getName();
String newValue = (String)value;
if( newValue != null && newValue.length() > 0 && !newValue.equalsIgnoreCase(oldValue)) {
((RelationalColumn)element).setName(newValue);
columnsViewer.refresh(element);
handleInfoChanged();
}
}
}
}
class ColumnWidthEditingSupport extends EditingSupport {
private TextCellEditor editor;
/**
* Create a new instance of the receiver.
*
* @param viewer the column viewer
*/
public ColumnWidthEditingSupport(ColumnViewer viewer) {
super(viewer);
this.editor = new TextCellEditor((Composite) viewer.getControl());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object)
*/
@Override
protected boolean canEdit(Object element) {
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#getCellEditor(java.lang.Object)
*/
@Override
protected CellEditor getCellEditor(Object element) {
return editor;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object)
*/
@Override
protected Object getValue(Object element) {
if( element instanceof RelationalColumn ) {
return Integer.toString(((RelationalColumn)element).getLength());
}
return 0;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object,
* java.lang.Object)
*/
@Override
protected void setValue(Object element, Object value) {
if( element instanceof RelationalColumn ) {
int oldValue = ((RelationalColumn)element).getLength();
int newValue = oldValue;
try {
newValue = Integer.parseInt((String)value);
} catch (NumberFormatException ex) {
return;
}
if( newValue != oldValue ) {
((RelationalColumn)element).setLength(newValue);
columnsViewer.refresh(element);
}
}
}
}
}