org.eclipse.epf.search.ui.MethodSearchResultPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.epf.search.ui.MethodSearchResultPage.java

Source

//------------------------------------------------------------------------------
// 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);
            }
        }
    }

}