de.maybebuggy.finder.views.SearchResultView.java Source code

Java tutorial

Introduction

Here is the source code for de.maybebuggy.finder.views.SearchResultView.java

Source

/*
 * SearchResultView.java
 *
 * Copyright (c) 2012, Sascha Vogt.
 * 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:
 *    Sascha Vogt <sascha@vogt-neuenbuerg.de> - initial implementation
 */
package de.maybebuggy.finder.views;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import de.maybebuggy.finder.Activator;
import de.maybebuggy.finder.FinderResult;
import de.maybebuggy.finder.ResultItem;

public class SearchResultView extends ViewPart {

    /**
     * The ID of the view as specified by the extension.
     */
    public static final String ID = "de.maybebuggy.finder.views.SearchResultView";

    private static final Image CLASS = Activator.getImageDescriptor("icons/classes.gif").createImage();
    private static final Image FILE = Activator.getImageDescriptor("icons/file_obj.gif").createImage();

    private TableViewer viewer;
    private Action clearSearch;
    private Action editHistory;
    private Action openDirectory;

    private FinderResult result = new FinderResult();

    class ViewContentProvider implements IStructuredContentProvider {
        public void inputChanged(Viewer v, Object oldInput, Object newInput) {
        }

        public void dispose() {
        }

        public Object[] getElements(Object parent) {
            if (result == null)
                return null;
            else
                return result.getResultList().toArray();
        }
    }

    class ViewLabelProvider extends ColumnLabelProvider {
        int col;

        public ViewLabelProvider(int col) {
            this.col = col;
        }

        @Override
        public String getText(Object obj) {
            switch (col) {
            case 0:
                return ((ResultItem) obj).getName();
            case 1:
                return ((ResultItem) obj).getPath();
            default:
                return "Unknown column";
            }
        }

        @Override
        public Image getImage(Object element) {
            ResultItem item = (ResultItem) element;
            if (col == 0) {
                if (item.getName().endsWith(".class"))
                    return CLASS;
                else
                    return FILE;
            } else
                return super.getImage(element);
        }
    }

    class NameSorter extends ViewerSorter {
    }

    public void createPartControl(Composite parent) {
        viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

        createTableViewerColumn("Name", 300, 0);
        createTableViewerColumn("Path", 600, 1);

        viewer.setContentProvider(new ViewContentProvider());
        viewer.setInput(result);
        viewer.setSorter(new NameSorter());

        final Table table = viewer.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);

        // Create the help context id for the viewer's control
        PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), "de.maybebuggy.finder.viewer");
        makeActions();
        hookContextMenu();
        hookDoubleClickAction();
        contributeToActionBars();
    }

    private TableViewerColumn createTableViewerColumn(String title, int width, final int colNumber) {
        final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE);
        final TableColumn column = viewerColumn.getColumn();
        column.setText(title);
        column.setWidth(width);
        column.setResizable(true);
        column.setMoveable(false);
        viewerColumn.setLabelProvider(new ViewLabelProvider(colNumber));
        return viewerColumn;
    }

    private void hookContextMenu() {
        MenuManager menuMgr = new MenuManager("#PopupMenu");
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(IMenuManager manager) {
                SearchResultView.this.fillContextMenu(manager);
            }
        });
        Menu menu = menuMgr.createContextMenu(viewer.getControl());
        viewer.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewer);
    }

    private void contributeToActionBars() {
        IActionBars bars = getViewSite().getActionBars();
        fillLocalPullDown(bars.getMenuManager());
        fillLocalToolBar(bars.getToolBarManager());
    }

    private void fillLocalPullDown(IMenuManager manager) {
        manager.add(clearSearch);
        manager.add(new Separator());
        manager.add(editHistory);
    }

    private void fillContextMenu(IMenuManager manager) {
        manager.add(clearSearch);
        manager.add(editHistory);
        // Other plug-ins can contribute there actions here
        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    private void fillLocalToolBar(IToolBarManager manager) {
        manager.add(clearSearch);
    }

    private void makeActions() {
        clearSearch = new Action() {
            public void run() {
                setResult(new FinderResult());
            }
        };
        clearSearch.setText("Clear Search");
        clearSearch.setToolTipText("Clear Search");
        clearSearch.setImageDescriptor(
                PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ELCL_REMOVE));

        editHistory = new Action() {
            public void run() {
                showConfirm("Edit history");
            }
        };
        editHistory.setText("Edit history");
        editHistory.setToolTipText("Edit history");

        openDirectory = new Action() {
            public void run() {
                ISelection selection = viewer.getSelection();
                Object obj = ((IStructuredSelection) selection).getFirstElement();
                if (showConfirm("Do you want to open " + ((ResultItem) obj).getPath())) {
                    //TODO
                }
            }
        };
    }

    private void hookDoubleClickAction() {
        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                openDirectory.run();
            }
        });
    }

    private boolean showConfirm(String message) {
        return MessageDialog.openConfirm(viewer.getControl().getShell(), "Claas and File Finder View", message);
    }

    /**
     * Passing the focus request to the viewer's control.
     */
    public void setFocus() {
        viewer.getControl().setFocus();
    }

    public void setResult(FinderResult result) {
        this.result = result;
        viewer.setInput(result);
    }
}