org.eclipse.recommenders.codesearch.rcp.index.extdoc.Renderer.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.recommenders.codesearch.rcp.index.extdoc.Renderer.java

Source

/**
 * Copyright (c) 2012 Tobias Boehm.
 * 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:
 *    Marcel Bruch - initial API and implementation.
 */

package org.eclipse.recommenders.codesearch.rcp.index.extdoc;

import static java.lang.String.format;

import java.util.List;

import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.window.ToolTip;
import org.eclipse.recommenders.codesearch.rcp.index.Fields;
import org.eclipse.recommenders.codesearch.rcp.index.searcher.SearchResult;
import org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocUtils;
import org.eclipse.recommenders.rcp.RecommendersPlugin;
import org.eclipse.recommenders.utils.Names;
import org.eclipse.recommenders.utils.rcp.JavaElementResolver;
import org.eclipse.recommenders.utils.rcp.RCPUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.internal.misc.StatusUtil;

import com.google.common.base.Optional;

public final class Renderer implements Runnable {

    private final JavaElementResolver jdtResolver;

    private final SearchResult searchResults;
    private final Composite parent;
    private final String typeName;
    private final String searchDuration;
    private final List<String> searchterms;

    public Renderer(final SearchResult searchResult, final Composite parent, final String typeName,
            final String searchDuration, final JavaElementResolver jdtResolver, final List<String> searchterms) {
        this.searchResults = searchResult;
        this.parent = parent;
        this.typeName = typeName;
        this.searchDuration = searchDuration;
        this.jdtResolver = jdtResolver;
        this.searchterms = searchterms;
    }

    @Override
    public void run() {
        final Composite container = new Composite(parent, SWT.NONE);
        container.setLayout(new GridLayout());
        container.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
        ExtdocUtils.setInfoBackgroundColor(container);
        final Label l = new Label(container, SWT.NONE);
        final String msg = format("Found %s examples for type '%s'. Search took %s.", searchResults.docs.totalHits,
                Names.vm2srcSimpleTypeName(typeName), searchDuration);
        l.setText(msg);

        final TableViewer v = new TableViewer(container, SWT.VIRTUAL);
        ColumnViewerToolTipSupport.enableFor(v, ToolTip.NO_RECREATE);
        v.setLabelProvider(new LabelProvider(jdtResolver, searchterms, searchResults));
        v.setContentProvider(new ContentProvider(searchResults, jdtResolver));
        // v.setUseHashlookup(true);
        v.setInput(searchResults);
        // v.getTable().setLinesVisible(true);
        v.setItemCount(searchResults.scoreDocs().length);
        v.getControl().setLayoutData(GridDataFactory.fillDefaults().hint(300, 200).grab(true, false).create());
        v.addDoubleClickListener(new IDoubleClickListener() {

            @Override
            public void doubleClick(final DoubleClickEvent event) {
                final Optional<Selection> opt = RCPUtils.first(event.getSelection());
                if (opt.isPresent()) {
                    final Selection s = opt.get();
                    if (s.isError()) {
                        ErrorDialog.openError(event.getViewer().getControl().getShell(), "Index issue",
                                "could not open indexed file.",
                                StatusUtil.newStatus("org.eclipse.recommenders", s.exception));
                        return;
                    }
                    final String handle = s.doc.get(Fields.JAVA_ELEMENT_HANDLE);
                    final IJavaElement create = JavaCore.create(handle);
                    try {
                        JavaUI.openInEditor(create);
                    } catch (final Exception e) {
                        RecommendersPlugin.logError(e, "Failed to open method declaration in editor");
                    }
                }
            }
        });

    }
}