/* * 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.builder.expression; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Shell; import org.eclipse.swt.widgets.Text; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.core.designer.util.I18nUtil; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.query.IQueryService; import org.teiid.designer.query.sql.ISQLStringVisitor; import org.teiid.designer.query.sql.lang.ILanguageObject; import org.teiid.designer.query.sql.symbol.IFunction; import org.teiid.designer.transformation.ui.builder.AbstractLanguageObjectEditor; import org.teiid.designer.transformation.ui.builder.ExpressionBuilder; import org.teiid.query.ui.UiPlugin; import org.teiid.query.ui.builder.model.FunctionDisplayEditorModel; import org.teiid.query.ui.builder.model.ILanguageObjectEditorModelListener; import org.teiid.query.ui.builder.model.LanguageObjectEditorModelEvent; /** * FunctionDisplayEditor * * @since 8.0 */ public class FunctionDisplayEditor extends AbstractLanguageObjectEditor { private static final String PREFIX = I18nUtil.getPropertyPrefix(FunctionDisplayEditor.class); private static final int TEXT_AREA_WIDTH_HINT = 150; private static final int TEXT_AREA_HEIGHT_HINT = 150; private ViewController controller; private FunctionDisplayEditorModel model; private Composite pnlContent; private Button editButton; private Text functionText; /** * Constructs a <code>FunctionDisplayEditor</code> using the given model. * * @param theParent the parent container * @param theModel the editor's model * @throws IllegalArgumentException if any of the parameters are <code>null</code> */ public FunctionDisplayEditor( Composite theParent, FunctionDisplayEditorModel theModel ) { super(theParent, IFunction.class, theModel); controller = new ViewController(); model = theModel; model.addModelListener(controller); displayFunction(); } /** * @see org.teiid.designer.transformation.ui.builder.ILanguageObjectEditor#acceptFocus() */ @Override public void acceptFocus() { editButton.setFocus(); } /** * @see org.teiid.designer.transformation.ui.builder.AbstractLanguageObjectEditor#createUi(org.eclipse.swt.widgets.Composite) */ @Override protected void createUi( Composite theParent ) { pnlContent = new Composite(theParent, SWT.NONE); GridLayout layout = new GridLayout(); pnlContent.setLayout(layout); layout.numColumns = 2; GridData pnlData = new GridData(GridData.FILL_BOTH); pnlContent.setLayoutData(pnlData); editButton = new Button(pnlContent, SWT.PUSH); editButton.setText(Util.getString(PREFIX + "edit")); //$NON-NLS-1$ editButton.setToolTipText(Util.getString(PREFIX + "editToolTipText")); //$NON-NLS-1$ editButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent ev ) { editButtonPressed(); } }); functionText = new Text(pnlContent, SWT.MULTI | SWT.READ_ONLY | SWT.WRAP | SWT.BORDER); GridData functionTextData = new GridData(GridData.FILL_BOTH); functionTextData.widthHint = TEXT_AREA_WIDTH_HINT; functionTextData.heightHint = TEXT_AREA_HEIGHT_HINT; functionText.setText(ISQLStringVisitor.UNDEFINED); functionText.setLayoutData(functionTextData); } /** * Displays the appropriate UI for the current model state. */ void displayFunction() { IFunction function = model.getFunction(); IQueryService queryService = ModelerCore.getTeiidQueryService(); ISQLStringVisitor visitor = queryService.getSQLStringVisitor(); functionText.setText(visitor.returnSQLString(function)); } void editButtonPressed() { Shell shell = UiPlugin.getDefault().getCurrentWorkbenchWindow().getShell(); ExpressionBuilder dialog = new ExpressionBuilder(shell, true); dialog.create(); dialog.setLanguageObject(model.getLanguageObject()); dialog.open(); if (dialog.getReturnCode() == Window.OK) { ILanguageObject modifiedLanguageObject = dialog.getLanguageObject(); // Inform model that language object has been changed. Model will fire // event to listeners, including us. model.setLanguageObject(modifiedLanguageObject); } } /** * @see org.teiid.designer.transformation.ui.builder.ILanguageObjectEditor#getTitle() */ @Override public String getTitle() { return Util.getString(PREFIX + "title"); //$NON-NLS-1$ } /** * @see org.teiid.designer.transformation.ui.builder.AbstractLanguageObjectEditor#getToolTipText() */ @Override public String getToolTipText() { return Util.getString(PREFIX + "tip"); //$NON-NLS-1$ } @Override public boolean isComplete() { // Being inserted as aid in debugging. BWP 09/05/03 boolean complete = super.isComplete(); return complete; } /** * @see org.teiid.designer.transformation.ui.builder.ILanguageObjectEditor#setLanguageObject(org.teiid.query.sql.LanguageObject) */ @Override public void setLanguageObject( ILanguageObject theLanguageObject ) { if (theLanguageObject == null) { clear(); } else { if (!(theLanguageObject instanceof IFunction)) { CoreArgCheck.isTrue((theLanguageObject instanceof IFunction), Util.getString(PREFIX + "invalidLanguageObject", //$NON-NLS-1$ new Object[] {theLanguageObject.getClass().getName()})); } model.setLanguageObject(theLanguageObject); } } /** * The <code>ViewController</code> class is a view controller for the <code>FunctionDisplayEditor</code>. */ class ViewController implements ILanguageObjectEditorModelListener { /** * @see org.teiid.query.ui.builder.model.ILanguageObjectEditorModelListener#modelChanged(org.teiid.query.ui.builder.model.LanguageObjectEditorModelEvent) */ @Override public void modelChanged( LanguageObjectEditorModelEvent theEvent ) { displayFunction(); } } }