blob: d861745c33ac185c33181e48d073b3d7937d730a [file] [log] [blame]
/**********************************************************************
* This file is part of "Object Teams Development Tooling"-Software
*
* Copyright 2004, 2008 Fraunhofer Gesellschaft, Munich, Germany,
* for its Fraunhofer Institute for Computer Architecture and Software
* Technology (FIRST), Berlin, Germany and Technical University Berlin,
* Germany.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
* $Id$
*
* Please visit http://www.eclipse.org/objectteams for updates and contact.
*
* Contributors:
* Fraunhofer FIRST - Initial API and implementation
* Technical University Berlin - Initial API and implementation
**********************************************************************/
package org.eclipse.objectteams.otdt.internal.ui.handlers;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IType;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.objectteams.otdt.core.IOTType;
import org.eclipse.objectteams.otdt.core.IRoleFileType;
import org.eclipse.objectteams.otdt.core.OTModelManager;
import org.eclipse.objectteams.otdt.internal.ui.bindingeditor.BindingEditorDialog;
import org.eclipse.ui.ISources;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
/**
* Handler responsible for the openBindingEditor command.
* @author mosconi
*/
public class OpenBindingEditorHandler extends AbstractHandler {
private IOTType currentTeam = null;
public OpenBindingEditorHandler() {
}
/* (non-Javadoc)
* @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
*/
@Override
public void setEnabled(Object evaluationContext) {
ISelection selection = (ISelection) HandlerUtil.getVariable(evaluationContext, ISources.ACTIVE_CURRENT_SELECTION_NAME);
currentTeam = getRootTeam(selection);
if (currentTeam != null)
setBaseEnabled(true);
else
setBaseEnabled(false);
}
/**
* Opens the Binding Editor Dialog.
*/
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
new BindingEditorDialog(window.getShell(), currentTeam).open();
return null;
}
/**
* Finds the outermost containing team for the given selection.
* @param selection The current selection (can be null).
* @return The best matching team for the selection, or null if no team found.
*/
protected IOTType getRootTeam(ISelection selection) {
IOTType selectedTeam = null;
if (!(selection instanceof IStructuredSelection))
return null;
Object element = ((IStructuredSelection) selection).getFirstElement();
if (!(element instanceof IJavaElement))
return null;
IJavaElement jElement = (IJavaElement) element;
ICompilationUnit cu = (ICompilationUnit) jElement.getAncestor(IType.COMPILATION_UNIT);
if (cu == null)
return null;
IType type = cu.findPrimaryType();
IOTType otType = OTModelManager.getOTElement(type);
if (otType == null)
return null;
if (otType.isTeam())
selectedTeam = otType;
else if (otType instanceof IRoleFileType)
selectedTeam = ((IRoleFileType)otType).getTeam();
return selectedTeam;
}
}