import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Display;
import org.eclipse.tracecompass.internal.provisional.analysis.lami.ui.views.LamiReportViewFactory;
import org.eclipse.tracecompass.tmf.core.analysis.ondemand.IOnDemandAnalysis;
import org.eclipse.tracecompass.tmf.core.analysis.ondemand.IOnDemandAnalysisReport;
-import org.eclipse.tracecompass.tmf.core.analysis.ondemand.OnDemandAnalysisException;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfCommonProjectElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfOnDemandAnalysisElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfReportsElement;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
@Override
public boolean isEnabled() {
- // Check if we are closing down
- final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- if (window == null) {
+ final Object element = HandlerUtils.getSelectedModelElement();
+ if (element == null) {
return false;
}
- // Get the selection
- final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- final IWorkbenchPart part = page.getActivePart();
- if (part == null) {
- return false;
- }
- final ISelectionProvider selectionProvider = part.getSite().getSelectionProvider();
- if (selectionProvider == null) {
- return false;
- }
- final ISelection selection = selectionProvider.getSelection();
-
/*
* plugin.xml should have done type verifications already
*/
- final Object element = ((IStructuredSelection) selection).getFirstElement();
TmfOnDemandAnalysisElement elem = (TmfOnDemandAnalysisElement) element;
if (elem.getAnalysis() instanceof LamiAnalysis && elem.canRun()) {
return true;
/* Automatically open the report for convenience */
Display.getDefault().syncExec(() -> {
try {
- LamiReportViewFactory.createNewViews(report);
+ LamiReportViewFactory.createNewView(report);
} catch (PartInitException e) {
}
});
return Status.OK_STATUS;
- } catch (OnDemandAnalysisException e) {
- String errMsg = e.getMessage();
-
- if (errMsg != null) {
- /* The analysis execution yielded an error */
- Display.getDefault().asyncExec(() -> {
- MessageDialog.openError(shell,
- /* Dialog title */
- Messages.ParameterDialog_Error,
- /* Dialog message */
- Messages.ParameterDialog_ErrorMessage + ":\n\n" + //$NON-NLS-1$
- errMsg);
- });
+ } catch (CoreException e) {
+ /*
+ * The analysis execution did not complete normally, we will
+ * report it to the user.
+ */
+ IStatus status = e.getStatus();
+
+ /* Don't display a dialog if it was simply cancelled by the user */
+ if (status.matches(IStatus.CANCEL)) {
+ return status;
}
- return Status.CANCEL_STATUS;
+ String dialogTitle;
+ String dialogMessage;
+ if (status.matches(IStatus.ERROR)) {
+ dialogTitle = Messages.ErrorDialog_Error;
+ dialogMessage = Messages.ErrorDialog_ErrorMessage;
+ } else {
+ dialogTitle = Messages.ErrorDialog_Info;
+ dialogMessage = Messages.ErrorDialog_InfoMessage;
+ }
+
+ Display.getDefault().asyncExec(() -> {
+ ErrorDialog.openError(shell, dialogTitle, dialogMessage, status);
+ });
+
+ /*
+ * We showed our own error message, no need for the Job to
+ * show another one.
+ */
+ return Status.OK_STATUS;
}
}
};