/* * 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.webservice.ui.editor; import java.util.Map.Entry; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseTrackAdapter; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.teiid.core.designer.util.I18nUtil; import org.teiid.designer.query.sql.proc.IAssignmentStatement; import org.teiid.designer.query.sql.proc.IDeclareStatement; 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.common.widget.AbstractTableLabelProvider; import org.teiid.designer.ui.common.widget.DefaultContentProvider; import org.teiid.designer.webservice.ui.IInternalUiConstants; import org.teiid.designer.webservice.ui.WebServiceUiPlugin; import org.teiid.designer.webservice.util.WebServiceUtil; /** * @since 8.0 */ public class InputVariableSection implements IInternalUiConstants { private static final String I18N_PFX = I18nUtil.getPropertyPrefix(InputVariableSection.class); private static final String VARS_TITLE = UTIL.getString(I18N_PFX + "variablesTitle"); //$NON-NLS-1$ OperationObjectEditorPage editor; private Composite client; TableViewer varViewer; private Section parentSection; IAction deleteVariablesAction; IAction renameVariableAction; Shell renameEditor; public InputVariableSection( Composite parent, String description, OperationObjectEditorPage editor ) { this.editor = editor; FormToolkit toolkit = WebServiceUiPlugin.getDefault().getFormToolkit(parent.getDisplay()); parentSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR | Section.DESCRIPTION); parentSection.setText(VARS_TITLE); parentSection.setDescription(description); parentSection.getDescriptionControl().addPaintListener(new PaintListener() { @Override public void paintControl( PaintEvent event ) { event.gc.setForeground(event.display.getSystemColor(SWT.COLOR_GRAY)); event.gc.drawLine(0, event.height - 1, event.width - 1, event.height - 1); } }); this.client = WidgetFactory.createPanel(parentSection, SWT.NONE); parentSection.setClient(this.client); toolkit.paintBordersFor(this.client); this.client.setBackground(parentSection.getBackground()); GridLayout layout = (GridLayout)this.client.getLayout(); layout.marginHeight = layout.marginWidth = layout.verticalSpacing = 1; } public void addSelectionChangedListener( ISelectionChangedListener listener ) { this.varViewer.addSelectionChangedListener(listener); } public void create() { createActionControls(this.client); // Create variable list this.varViewer = WidgetFactory.createTableViewer(this.client, WidgetFactory.NO_DEFAULTS | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI); Table table = this.varViewer.getTable(); this.varViewer.setContentProvider(new DefaultContentProvider()); this.varViewer.setLabelProvider(new AbstractTableLabelProvider() { @Override public String getColumnText( Object element, int columnIndex ) { IDeclareStatement declaration = (IDeclareStatement)((Entry)element).getKey(); return declaration.getVariable().getShortName() + " : " + declaration.getVariableType(); //$NON-NLS-1$ } }); table.addMouseTrackListener(new MouseTrackAdapter() { @Override public void mouseExit( MouseEvent event ) { updateToolTip(event); } @Override public void mouseHover( MouseEvent event ) { updateToolTip(event); } }); this.varViewer.setInput(this.editor.getDeclarationsToAssignments()); // ----------------------------------- // Defect 23414 & 23535 // need to add focus listener to somehow cache this information so the DeleteWorker & ModelObjectEditHelper framework // (via new WebServiceObjectEditHelper) to disallow any EDITING because THIS TABLE IS IN FOCUS // If it goes out of focus, set selection to empty so the user doen't get tempted to try and DELETE a variable because it // appears to be hilighted and in focus. table.addFocusListener(new FocusAdapter() { @Override public void focusLost( FocusEvent fe ) { editor.setAllowsExternalEdits(true); } @Override public void focusGained( FocusEvent fe ) { editor.setAllowsExternalEdits(false); } }); } /** * Does nothing. * * @param parent * @since 5.0.1 */ protected void createActionControls( Composite parent ) { } public IStructuredSelection getSelection() { return (IStructuredSelection)this.varViewer.getSelection(); } public void refresh() { // Defect 23414 & 23535 fixes a thread access problem... UiUtil.runInSwtThread(new Runnable() { @Override public void run() { varViewer.refresh(); } }, true); } public void select( Entry entry ) { WidgetUtil.select(entry, this.varViewer); } public void clearSelection() { varViewer.setSelection(StructuredSelection.EMPTY); } public void setEnabled( boolean enabled ) { if (enabled) { Color fgdColor = Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_FOREGROUND); this.client.setForeground(fgdColor); parentSection.setForeground(fgdColor); parentSection.setTitleBarForeground(fgdColor); } else { Color fgdColor = Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW); this.client.setForeground(fgdColor); parentSection.setForeground(fgdColor); parentSection.setTitleBarForeground(fgdColor); } } void updateToolTip( MouseEvent event ) { Table table = this.varViewer.getTable(); TableItem item = table.getItem(new Point(event.x, event.y)); if (item == null) { table.setToolTipText(null); } else { Entry entry = (Entry)item.getData(); table.setToolTipText(WebServiceUtil.getXpath((IAssignmentStatement)entry.getValue())); } } }