| /******************************************************************************* |
| * Copyright (c) 2000, 2016 IBM Corporation and others. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.dltk.internal.testing.ui; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.debug.core.ILaunchConfiguration; |
| import org.eclipse.dltk.core.IScriptProject; |
| import org.eclipse.dltk.core.ISourceRange; |
| import org.eclipse.dltk.internal.testing.model.TestElement; |
| import org.eclipse.dltk.internal.testing.util.LegacyTestElementResolver; |
| import org.eclipse.dltk.testing.DLTKTestingMessages; |
| import org.eclipse.dltk.testing.ITestElementResolver; |
| import org.eclipse.dltk.testing.TestElementResolution; |
| import org.eclipse.dltk.ui.DLTKUIPlugin; |
| import org.eclipse.jface.action.Action; |
| import org.eclipse.jface.dialogs.ErrorDialog; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.texteditor.ITextEditor; |
| |
| /** |
| * Abstract Action for opening a Java editor. |
| */ |
| public class OpenTestAction extends Action { |
| private final TestElement fTestElement; |
| protected TestRunnerViewPart fTestRunner; |
| private final boolean fActivate; |
| |
| protected OpenTestAction(TestRunnerViewPart testRunner, |
| TestElement testElement) { |
| this(testRunner, testElement, true); |
| } |
| |
| public OpenTestAction(TestRunnerViewPart testRunner, |
| TestElement testElement, boolean activate) { |
| super(DLTKTestingMessages.OpenEditorAction_action_label); |
| fTestElement = testElement; |
| fTestRunner = testRunner; |
| fActivate = activate; |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(this, |
| IDLTKTestingHelpContextIds.OPENTEST_ACTION); |
| } |
| |
| /* |
| * @see IAction#run() |
| */ |
| @Override |
| public void run() { |
| final ITestElementResolver resolver = acquireResolver(); |
| if (resolver == null) { |
| return; |
| } |
| final TestElementResolution resolution = resolver |
| .resolveElement(fTestElement); |
| if (resolution == null) { |
| MessageDialog |
| .openError( |
| getShell(), |
| DLTKTestingMessages.OpenEditorAction_error_cannotopen_title, |
| DLTKTestingMessages.OpenEditorAction_error_cannotopen_message); |
| return; |
| } |
| try { |
| final ITextEditor textEditor = (ITextEditor) DLTKUIPlugin |
| .openInEditor(resolution.getElement(), fActivate, false); |
| if (textEditor != null) { |
| final ISourceRange range = resolution.getRange(); |
| if (range != null) { |
| textEditor.selectAndReveal(range.getOffset(), range |
| .getLength()); |
| } |
| } else { |
| fTestRunner |
| .registerInfoMessage(DLTKTestingMessages.OpenEditorAction_message_cannotopen); |
| } |
| } catch (CoreException e) { |
| ErrorDialog.openError(getShell(), |
| DLTKTestingMessages.OpenEditorAction_error_dialog_title, |
| DLTKTestingMessages.OpenEditorAction_error_dialog_message, |
| e.getStatus()); |
| } |
| } |
| |
| /** |
| * @return |
| */ |
| private ITestElementResolver acquireResolver() { |
| final ITestElementResolver resolver = fTestRunner |
| .getTestRunnerUI().getAdapter(ITestElementResolver.class); |
| if (resolver != null) { |
| return resolver; |
| } else { |
| final ILaunchConfiguration launchConfiguration = fTestRunner |
| .getLaunch().getLaunchConfiguration(); |
| if (launchConfiguration == null) { |
| return null; |
| } |
| return new LegacyTestElementResolver(getLaunchedProject(), |
| launchConfiguration); |
| } |
| } |
| |
| protected Shell getShell() { |
| return fTestRunner.getSite().getShell(); |
| } |
| |
| /** |
| * @return the project, or <code>null</code> |
| */ |
| protected IScriptProject getLaunchedProject() { |
| return fTestRunner.getLaunchedProject(); |
| } |
| |
| protected TestElement getTestElement() { |
| return fTestElement; |
| } |
| |
| } |