com.aptana.editor.js.views.JSIndexViewActionProvider.java Source code

Java tutorial

Introduction

Here is the source code for com.aptana.editor.js.views.JSIndexViewActionProvider.java

Source

/**
 * Aptana Studio
 * Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved.
 * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
 * Please see the license.html included with this distribution for details.
 * Any modifications to this file must keep this entire header intact.
 */
package com.aptana.editor.js.views;

import java.util.Collection;
import java.util.List;

import org.eclipse.core.resources.IProject;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;

import com.aptana.core.util.CollectionsUtil;
import com.aptana.index.core.Index;
import com.aptana.index.core.IndexManager;
import com.aptana.index.core.IndexPlugin;
import com.aptana.index.core.ui.views.IActionProvider;
import com.aptana.index.core.ui.views.IndexView;
import com.aptana.js.core.index.JSIndexQueryHelper;
import com.aptana.js.core.inferencing.JSTypeUtil;
import com.aptana.js.core.model.ClassElement;
import com.aptana.js.core.model.PropertyElement;
import com.aptana.js.core.model.TypeElement;

/**
 * JSIndexViewActionProvider
 */
public class JSIndexViewActionProvider implements IActionProvider {
    /*
     * (non-Javadoc)
     * @see com.aptana.index.core.ui.views.IActionProvider#getActions(java.lang.Object)
     */
    public IAction[] getActions(final IndexView view, Object object) {
        if (object instanceof PropertyElement) {
            final List<String> typeNames = ((PropertyElement) object).getTypeNames();

            if (!CollectionsUtil.isEmpty(typeNames)) {
                return new IAction[] { createAction(view, typeNames) };
            }
        }

        return null;
    }

    /**
     * @param view
     * @param typeNames
     * @return
     */
    protected IAction createAction(final IndexView view, final List<String> typeNames) {
        IAction action = new Action() {
            @Override
            public void run() {
                TreeViewer treeViewer = view.getTreeViewer();

                if (treeViewer != null) {
                    Object input = treeViewer.getInput();

                    if (input instanceof IProject) {
                        IProject project = (IProject) input;

                        Index index = getIndexManager().getIndex(project.getLocationURI());
                        JSIndexQueryHelper queryHelper = new JSIndexQueryHelper();
                        Collection<TypeElement> types = queryHelper.getTypes(index, typeNames.get(0), true);
                        List<ClassElement> classes = JSTypeUtil.typesToClasses(types);

                        if (!CollectionsUtil.isEmpty(classes)) {
                            ClassElement c = classes.get(0);

                            treeViewer.setSelection(new StructuredSelection(c), true);
                        }
                    }
                }
            }
        };

        action.setText(Messages.JSIndexViewActionProvider_JumpToType);

        return action;
    }

    protected IndexManager getIndexManager() {
        return IndexPlugin.getDefault().getIndexManager();
    }
}