| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2006 IBM Corporation and others. |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // which accompanies this distribution, and is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // Contributors: |
| // IBM Corporation - initial implementation |
| //------------------------------------------------------------------------------ |
| package org.eclipse.epf.search.ui; |
| |
| import org.eclipse.epf.authoring.ui.AuthoringPerspective; |
| import org.eclipse.epf.authoring.ui.BrowsingPerspective; |
| import org.eclipse.epf.authoring.ui.editors.EditorChooser; |
| import org.eclipse.epf.authoring.ui.views.ContentView; |
| import org.eclipse.epf.common.ui.util.PerspectiveUtil; |
| import org.eclipse.epf.library.LibraryService; |
| import org.eclipse.epf.library.LibraryServiceListener; |
| import org.eclipse.epf.library.edit.util.ExtensionManager; |
| import org.eclipse.epf.library.ui.providers.ElementTreeLabelProvider; |
| import org.eclipse.epf.search.ui.internal.ISearchResultProviderFactory; |
| import org.eclipse.epf.search.ui.internal.MethodElementViewSorter; |
| import org.eclipse.epf.search.ui.internal.SearchResultTableContentProvider; |
| import org.eclipse.epf.search.ui.internal.SearchResultTreeContentProvider; |
| import org.eclipse.epf.uma.ContentPackage; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.epf.uma.MethodLibrary; |
| import org.eclipse.epf.uma.MethodPlugin; |
| import org.eclipse.epf.uma.ProcessElement; |
| import org.eclipse.epf.uma.util.UmaUtil; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.IStructuredContentProvider; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.viewers.TableViewer; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.search.ui.NewSearchUI; |
| import org.eclipse.search.ui.text.AbstractTextSearchViewPage; |
| import org.eclipse.search.ui.text.Match; |
| import org.eclipse.ui.IViewPart; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.PlatformUI; |
| |
| /** |
| * Displays the Method Search result in the Search view. The search result |
| * can be displayed in a hierarchical or flat view. |
| * |
| * @author Kelvin Low |
| * @author Phong Nguyen Le |
| * @since 1.0 |
| */ |
| public class MethodSearchResultPage extends AbstractTextSearchViewPage |
| implements ISelectionChangedListener { |
| |
| private IStructuredContentProvider contentProvider; |
| |
| private ILabelProvider labelProvider; |
| |
| /** |
| * Creates a new instance. |
| */ |
| public MethodSearchResultPage() { |
| super(); |
| labelProvider = createLabelProvider(); |
| |
| // Clear the search result when the current method library is closed by the user. |
| LibraryService.getInstance().addListener(new LibraryServiceListener() { |
| public void libraryClosed(MethodLibrary library) { |
| MethodSearchResultPage.this.getInput().removeAll(); |
| } |
| }); |
| } |
| |
| /** |
| * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#isLayoutSupported(int) |
| */ |
| public boolean isLayoutSupported(int layout) { |
| return ((layout & FLAG_LAYOUT_FLAT) != 0 || (layout & FLAG_LAYOUT_TREE) != 0); |
| } |
| |
| private static final ISearchResultProviderFactory getSearchResultProviderFactory() { |
| return (ISearchResultProviderFactory) ExtensionManager.getExtension( |
| SearchUIPlugin.getDefault().getId(), |
| "searchResultProviderFactory"); //$NON-NLS-1$ |
| } |
| |
| protected IStructuredContentProvider createContentProvider(Viewer viewer) { |
| ISearchResultProviderFactory factory = getSearchResultProviderFactory(); |
| if(viewer instanceof TreeViewer) { |
| IStructuredContentProvider cp = null; |
| if(factory != null) { |
| cp = factory.createTreeContentProvider(); |
| } |
| return cp != null ? cp : new SearchResultTreeContentProvider(); |
| } |
| else if(viewer instanceof TableViewer) { |
| IStructuredContentProvider cp = null; |
| if(factory != null) { |
| cp = factory.createTableContentProvider(); |
| } |
| return cp != null ? cp : new SearchResultTableContentProvider(); |
| } |
| return null; |
| } |
| |
| protected ILabelProvider createLabelProvider() { |
| ILabelProvider lp = null; |
| ISearchResultProviderFactory factory = getSearchResultProviderFactory(); |
| if(factory != null) { |
| lp = factory.createLabelProvider(); |
| } |
| return lp != null ? lp : new ElementTreeLabelProvider(); |
| } |
| |
| /** |
| * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTreeViewer(TreeViewer) |
| */ |
| protected void configureTreeViewer(TreeViewer viewer) { |
| contentProvider = createContentProvider(viewer); |
| viewer.setContentProvider(contentProvider); |
| viewer.setLabelProvider(labelProvider); |
| viewer.setSorter(new MethodElementViewSorter()); |
| viewer.addSelectionChangedListener(this); |
| } |
| |
| /** |
| * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTableViewer(TableViewer) |
| */ |
| protected void configureTableViewer(TableViewer viewer) { |
| contentProvider = createContentProvider(viewer); |
| viewer.setContentProvider(contentProvider); |
| viewer.setLabelProvider(labelProvider); |
| viewer.setSorter(new MethodElementViewSorter()); |
| } |
| |
| /** |
| * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#elementsChanged(Object[]) |
| */ |
| protected void elementsChanged(Object[] objects) { |
| if (contentProvider != null) { |
| if (contentProvider instanceof SearchResultTreeContentProvider) { |
| ((SearchResultTreeContentProvider) contentProvider) |
| .elementsChanged(objects); |
| } else if (contentProvider instanceof SearchResultTableContentProvider) { |
| ((SearchResultTableContentProvider) contentProvider) |
| .elementsChanged(objects); |
| } |
| } |
| } |
| |
| /** |
| * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#clear() |
| */ |
| protected void clear() { |
| if (contentProvider != null) { |
| if (contentProvider instanceof SearchResultTreeContentProvider) { |
| ((SearchResultTreeContentProvider) contentProvider).clear(); |
| } else if (contentProvider instanceof SearchResultTableContentProvider) { |
| ((SearchResultTableContentProvider) contentProvider).clear(); |
| } |
| } |
| } |
| |
| /** |
| * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#showMatch(Match, |
| * int, int, boolean) |
| */ |
| protected void showMatch(Match match, int currentOffset, int currentLength, |
| boolean activate) throws PartInitException { |
| if (match.getElement() instanceof MethodElement && activate) { |
| MethodElement element = (MethodElement) match.getElement(); |
| if (PerspectiveUtil |
| .isActivePerspective(BrowsingPerspective.PERSPECTIVE_ID)) { |
| PerspectiveUtil |
| .openPerspective(AuthoringPerspective.PERSPECTIVE_ID); |
| IWorkbenchPage activePage = PlatformUI.getWorkbench() |
| .getActiveWorkbenchWindow().getActivePage(); |
| if (activePage != null) { |
| IViewPart view = activePage |
| .findView(NewSearchUI.SEARCH_VIEW_ID); |
| if (view != null) { |
| activePage.showView(NewSearchUI.SEARCH_VIEW_ID); |
| } |
| } |
| } |
| displayEditor(element); |
| } |
| } |
| |
| /** |
| * Displays the Method editor for the selected Method element. |
| */ |
| protected void displayEditor(MethodElement element) { |
| if (element instanceof ProcessElement) { |
| EditorChooser.getInstance().openEditor( |
| UmaUtil.getProcessComponent(element)); |
| } else { |
| EditorChooser.getInstance().openEditor(element); |
| } |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(SelectionChangedEvent) |
| */ |
| public void selectionChanged(SelectionChangedEvent event) { |
| if (PerspectiveUtil |
| .isActivePerspective(BrowsingPerspective.PERSPECTIVE_ID)) { |
| ISelection selection = event.getSelection(); |
| if (selection instanceof IStructuredSelection) { |
| IStructuredSelection sel = (IStructuredSelection) selection; |
| Object[] selectedElements = sel.toArray(); |
| if (selectedElements != null && selectedElements.length > 0) { |
| if (selectedElements[0] instanceof MethodElement) { |
| try { |
| displayHTMLPage((MethodElement) selectedElements[0]); |
| } catch (PartInitException e) { |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| /** |
| * Displays the HTML content page for the selected method element. |
| * |
| * @param element |
| * a method element |
| * @throws PartInitException |
| * if the Content view cannot be displayed |
| */ |
| protected void displayHTMLPage(MethodElement element) |
| throws PartInitException { |
| if (element instanceof MethodPlugin |
| || element instanceof ContentPackage) { |
| return; |
| } |
| IWorkbenchPage activePage = PlatformUI.getWorkbench() |
| .getActiveWorkbenchWindow().getActivePage(); |
| if (activePage != null) { |
| IViewPart view = activePage.findView(ContentView.VIEW_ID); |
| if (view == null) { |
| view = activePage.showView(ContentView.VIEW_ID); |
| } |
| if (view != null) { |
| ((ContentView) view).displayHTMLContentPage(element); |
| } |
| } |
| } |
| |
| } |