/*******************************************************************************
* Copyright (c) 2009 IBM Corporation 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:
* IBM Corporation - initial API and implementation
* Zend Technologies
*******************************************************************************/
package org.eclipse.php.internal.ui.actions;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.core.ModelException;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.php.internal.ui.editor.PHPStructuredEditor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.texteditor.ITextEditor;
/**
* Selection based action handler
*
* @author Roy
*/
public abstract class SelectionHandler extends AbstractHandler {
public SelectionHandler() {
super();
}
/**
* Returns the current model element from the PHP editor
*
* @param event
* @return
* @throws ModelException
*/
protected IModelElement getCurrentModelElement(ExecutionEvent event)
throws ExecutionException {
IEditorPart editorPart = HandlerUtil.getActiveEditor(event);
PHPStructuredEditor textEditor = null;
IModelElement modelElement = null;
if (editorPart instanceof PHPStructuredEditor) {
textEditor = (PHPStructuredEditor) editorPart;
modelElement = textEditor.getModelElement();
} else {
Object o = editorPart.getAdapter(ITextEditor.class);
if (o != null) {
textEditor = (PHPStructuredEditor) o;
modelElement = textEditor.getModelElement();
}
}
if (textEditor != null && modelElement instanceof ISourceModule) {
final ISelectionProvider selectionProvider = textEditor
.getSelectionProvider();
final ISelection selection = selectionProvider.getSelection();
if (selection instanceof TextSelection) {
final TextSelection textSelection = (TextSelection) selection;
try {
return ((ISourceModule) modelElement)
.getElementAt(textSelection.getOffset());
} catch (ModelException e) {
throw new ExecutionException(Messages.SelectionHandler_0, e); //$NON-NLS-1
}
}
}
return null;
}
}