/*******************************************************************************
* Copyright (c) 2010, 2014 SAP AG 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:
* Mathias Kinzler (SAP AG) - initial implementation
* Dariusz Luksza <dariusz@luksza.org> - add getRef() and getShell methods
*******************************************************************************/
package org.eclipse.egit.ui.internal.commands.shared;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.egit.ui.internal.repository.tree.RefNode;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNodeType;
import org.eclipse.egit.ui.internal.selection.SelectionUtils;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;
/**
* Abstract super class for commands shared between different components in EGit
*/
public abstract class AbstractSharedCommandHandler extends AbstractHandler {
/**
* @param event
* the {@link ExecutionEvent}
* @return a {@link Repository} if all elements in the current selection map
* to the same {@link Repository}, otherwise null
*/
public static Repository getRepository(ExecutionEvent event) {
Object ctx = event.getApplicationContext();
if (ctx instanceof IEvaluationContext)
return SelectionUtils.getRepository((IEvaluationContext) ctx);
return null;
}
/**
*
* @param selected
* @return {@link Ref} connected with given {@code selected} node or
* {@code null} when ref cannot be determined
*/
protected Ref getRef(Object selected) {
if (selected instanceof RepositoryTreeNode<?>) {
RepositoryTreeNode node = (RepositoryTreeNode) selected;
if (node.getType() == RepositoryTreeNodeType.REF)
return ((RefNode) node).getObject();
}
return null;
}
/**
*
* @param event
* @return {@link Shell} connected with given {@code event}, or {@code null}
* when shell cannot be determined
*/
protected Shell getShell(ExecutionEvent event) {
return HandlerUtil.getActiveShell(event);
}
}