com.aptana.git.ui.internal.actions.ShowInHistoryHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.aptana.git.ui.internal.actions.ShowInHistoryHandler.java

Source

/**
 * Aptana Studio
 * Copyright (c) 2005-2011 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.git.ui.internal.actions;

import java.util.Collection;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.team.ui.TeamUI;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.ISources;
import org.eclipse.ui.IWorkbenchPage;

import com.aptana.git.core.GitPlugin;
import com.aptana.git.core.model.GitRepository;
import com.aptana.git.core.model.IGitRepositoryManager;
import com.aptana.git.ui.internal.history.GitHistoryPageSource;
import com.aptana.ui.util.UIUtils;

public class ShowInHistoryHandler extends AbstractHandler {

    private boolean enabled;

    @Override
    public boolean isEnabled() {
        return enabled;
    }

    @Override
    public void setEnabled(Object evaluationContext) {
        if (evaluationContext instanceof IEvaluationContext) {
            IResource resource = getResource((IEvaluationContext) evaluationContext);
            if (resource != null) {
                GitRepository repo = getGitRepositoryManager().getAttached(resource.getProject());
                if (repo != null) {
                    enabled = true;
                    return;
                }
            }
        }
        enabled = false;
    }

    protected IGitRepositoryManager getGitRepositoryManager() {
        return GitPlugin.getDefault().getGitRepositoryManager();
    }

    public Object execute(ExecutionEvent event) throws ExecutionException {
        if (event == null) {
            return null;
        }
        Object context = event.getApplicationContext();
        if (context instanceof IEvaluationContext) {
            IResource resource = getResource((IEvaluationContext) context);
            if (resource != null) {
                IWorkbenchPage page = UIUtils.getActivePage();
                TeamUI.showHistoryFor(page, resource, GitHistoryPageSource.getInstance());
            }
        }
        return null;
    }

    @SuppressWarnings("unchecked")
    private IResource getResource(IEvaluationContext evContext) {
        Object input = evContext.getVariable(ISources.SHOW_IN_INPUT);
        if (input instanceof IFileEditorInput) {
            IFileEditorInput fei = (IFileEditorInput) input;
            return fei.getFile();
        }

        input = evContext.getDefaultVariable();
        if (input instanceof IStructuredSelection) {
            IStructuredSelection selection = (IStructuredSelection) input;
            Object[] selectedFiles = selection.toArray();
            for (Object selected : selectedFiles) {
                if (selected instanceof IResource) {
                    return (IResource) selected;
                } else if (selected instanceof IAdaptable) {
                    return (IResource) ((IAdaptable) selected).getAdapter(IResource.class);
                }
            }
        } else if (input instanceof Collection) {
            Collection<Object> selectedFiles = (Collection<Object>) input;
            for (Object selected : selectedFiles) {
                if (selected instanceof IResource) {
                    return (IResource) selected;
                } else if (selected instanceof IAdaptable) {
                    return (IResource) ((IAdaptable) selected).getAdapter(IResource.class);
                }

            }
        }
        return null;
    }

}