/* * 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.ui.search; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.dialogs.IDialogConstants; 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.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.ui.dialogs.ISelectionStatusValidator; import org.eclipse.ui.dialogs.SelectionStatusDialog; import org.teiid.designer.ui.UiConstants; import org.teiid.designer.ui.viewsupport.EObjectSelectionValidator; import org.teiid.designer.ui.viewsupport.ModelWorkspacePanel; import org.teiid.designer.ui.viewsupport.PropertiesDialog; /** * @since 8.0 */ public class ModelObjectFinderDialog extends SelectionStatusDialog implements IFinderHostDialog { private static final String TITLE = UiConstants.Util.getString("ModelObjectFinderDialog.title"); //$NON-NLS-1$ private static final String PROPERTIES_BUTTON_TEXT = UiConstants.Util.getString("ModelObjectFinderDialog.propertiesButton.text"); //$NON-NLS-1$ private int PROPERTIES_BUTTON_ID = 10234; private Button btnProperties; private Object[] oselectedObjects; private ISelectionStatusValidator validator; private int iReturnCode = Window.CANCEL; private TabFolder tabFolder; private TabItem tiWorkspaceTab; private ModelWorkspacePanel pnlWorkspace; private TabItem tiFinderTab; private ModelObjectSelectionPanel pnlFinder; /** * Construct an instance of ModelWorkspaceDialog. This constructor defaults to the resource root. * * @param parent * @param labelProvider an ILabelProvider for the tree * @param contentProvider an ITreeContentProvider for the tree */ public ModelObjectFinderDialog( Shell shell ) { super(shell); init(); } private void init() { this.setTitle(TITLE); int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.MAX | SWT.RESIZE); setStatusLineAboveButtons(true); } private ISelectionStatusValidator getValidator() { if (validator == null) { validator = new EObjectSelectionValidator(); } return validator; } /** * Sets the Validator for this dialog's TreeViewer * * @param filter */ public void setValidator( ISelectionStatusValidator validator ) { this.validator = validator; updateValidators(); } public void updateValidators() { if (pnlFinder != null) { pnlFinder.setValidator(getValidator()); } if (pnlWorkspace != null) { pnlWorkspace.setValidator(getValidator()); } } /* * @see Dialog#createDialogArea(Composite) */ @Override protected Control createDialogArea( Composite parent ) { Composite composite = (Composite)super.createDialogArea(parent); createTabbedPane(composite); updateValidators(); return composite; } private void createTabbedPane( Composite parent ) { // create Tab Folder tabFolder = new TabFolder(parent, SWT.TOP); GridLayout gridLayout = new GridLayout(); tabFolder.setLayout(gridLayout); GridData gridData1 = new GridData(GridData.FILL_BOTH); tabFolder.setLayoutData(gridData1); tabFolder.addSelectionListener(new SelectionAdapter() { @Override public void widgetDefaultSelected( SelectionEvent e ) { IFinderPanel fpnl = getCurrentPanel(); fpnl.updateOKStatus(); resetEnabledState(); } }); // Workspace Tab tiWorkspaceTab = new TabItem(tabFolder, SWT.NONE); createWorkspacePanel(tabFolder); tiWorkspaceTab.setControl(pnlWorkspace); // EObjectFinder Tab tiFinderTab = new TabItem(tabFolder, SWT.NONE); createFinderPanel(tabFolder); tiFinderTab.setControl(pnlFinder); } private void createWorkspacePanel( Composite parent ) { pnlWorkspace = new ModelWorkspacePanel(parent, this); GridLayout gridLayout = new GridLayout(); pnlWorkspace.setLayout(gridLayout); GridData gridData1 = new GridData(GridData.FILL_BOTH); pnlWorkspace.setLayoutData(gridData1); tiWorkspaceTab.setText(pnlWorkspace.getTitle()); tiWorkspaceTab.setToolTipText(pnlWorkspace.getTitle()); pnlWorkspace.setValidator(getValidator()); } private void createFinderPanel( Composite parent ) { pnlFinder = new ModelObjectSelectionPanel(parent, this, false); GridLayout gridLayout = new GridLayout(); pnlFinder.setLayout(gridLayout); GridData gridData1 = new GridData(GridData.FILL_BOTH); pnlFinder.setLayoutData(gridData1); tiFinderTab.setText(pnlFinder.getTitle()); tiFinderTab.setToolTipText(pnlFinder.getTitle()); } /* (non-Javadoc) * Method declared on Dialog. */ @Override protected void createButtonsForButtonBar( Composite parent ) { // add our Properties button first btnProperties = createButton(parent, PROPERTIES_BUTTON_ID, PROPERTIES_BUTTON_TEXT, false); btnProperties.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected( final SelectionEvent event ) { computeResult(); Object oSelectedObject = getResult()[0]; if (oSelectedObject != null && oSelectedObject instanceof EObject) { PropertiesDialog dlg = new PropertiesDialog((EObject)oSelectedObject, null); dlg.open(); } } }); // then add any buttons the panels want to contribute ((IFinderPanel)pnlWorkspace).createButtonsForButtonBar(parent); ((IFinderPanel)pnlFinder).createButtonsForButtonBar(parent); // then the OK and Cancel buttons super.createButtonsForButtonBar(parent); } void resetEnabledState() { btnProperties.setEnabled(getButton(IDialogConstants.OK_ID).getEnabled()); } IFinderPanel getCurrentPanel() { TabItem ti = getCurrentTab(); return (IFinderPanel)ti.getControl(); } /* * @see SelectionStatusDialog#computeResult() */ @Override protected void computeResult() { IFinderPanel fpnl = getCurrentPanel(); Object[] result = fpnl.getResult(); setTheResult(result); } private void setTheResult( Object[] result ) { oselectedObjects = result; } @Override public Object[] getResult() { return oselectedObjects; } private TabItem getCurrentTab() { int iIndex = tabFolder.getSelectionIndex(); return tabFolder.getItem(iIndex); } // ================================= // interface: IFinderHostDialog // ================================= @Override public Button getOkButton() { return getButton(IDialogConstants.OK_ID); } @Override public Button getCancelButton() { return getButton(IDialogConstants.CANCEL_ID); } @Override public void okPressed() { super.okPressed(); iReturnCode = Window.OK; } @Override public void cancelPressed() { super.cancelPressed(); iReturnCode = Window.CANCEL; } @Override public Button createButton( Composite parent, int iId, String sText, boolean isDefault ) { return super.createButton(parent, iId, sText, isDefault); } @Override public void updateTheStatus( IStatus status ) { this.updateStatus(status); computeResult(); resetEnabledState(); } @Override public int getReturnCode() { return iReturnCode; } }