analysis.lami: Replace OnDemandAnalysisException with CoreException
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.lami.ui / src / org / eclipse / tracecompass / internal / provisional / analysis / lami / ui / handler / RunAnalysisHandler.java
index 8ad78e94b8362eb93cd2a8ed9d963e9edcfdc1c7..14d19edc4bc3222f71f68c23ebc2846a8ccb2476 100644 (file)
@@ -16,16 +16,16 @@ import java.util.List;
 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;
@@ -36,16 +36,12 @@ import org.eclipse.tracecompass.internal.provisional.analysis.lami.core.module.L
 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;
@@ -59,28 +55,14 @@ public class RunAnalysisHandler extends AbstractHandler {
 
     @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;
@@ -149,28 +131,43 @@ public class RunAnalysisHandler extends AbstractHandler {
                     /* 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;
                 }
             }
         };
This page took 0.027861 seconds and 5 git commands to generate.