tmf: extract SelectTracesOperation from SelectTracesWizardPage
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Tue, 23 Feb 2016 11:53:30 +0000 (06:53 -0500)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Fri, 26 Feb 2016 01:48:30 +0000 (20:48 -0500)
This is done so that it can be reused later on.

Change-Id: I14118e459827bb8f37fb96aa54090ff08295a23d
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/67166
Reviewed-by: Hudson CI
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
Tested-by: Patrick Tasse <patrick.tasse@gmail.com>
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/SelectTracesHandler.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/Messages.java [new file with mode: 0644]
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/SelectTracesOperation.java [new file with mode: 0644]
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/messages.properties [new file with mode: 0644]
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/Messages.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizard.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizardPage.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/messages.properties

index 1865df3bf0dde37f3dffe97d7c83e36f7f1654e3..0709b358948456d46a02bf0e6c822b26c7723c2b 100644 (file)
@@ -93,13 +93,15 @@ public class SelectTracesHandler extends AbstractHandler {
         // Fire the Select Traces Wizard
         IWorkbench workbench = PlatformUI.getWorkbench();
         Shell shell = workbench.getActiveWorkbenchWindow().getShell();
-
-        TmfExperimentFolder experiments = (TmfExperimentFolder) fExperiment.getParent();
-        TmfProjectElement project = (TmfProjectElement) experiments.getParent();
-        SelectTracesWizard wizard = new SelectTracesWizard(project, fExperiment);
-        wizard.init(PlatformUI.getWorkbench(), null);
-        WizardDialog dialog = new WizardDialog(shell, wizard);
-        dialog.open();
+        TmfExperimentElement experiment = fExperiment;
+        if (experiment != null) {
+            TmfExperimentFolder experiments = (TmfExperimentFolder) experiment.getParent();
+            TmfProjectElement project = (TmfProjectElement) experiments.getParent();
+            SelectTracesWizard wizard = new SelectTracesWizard(project, experiment);
+            wizard.init(PlatformUI.getWorkbench(), null);
+            WizardDialog dialog = new WizardDialog(shell, wizard);
+            dialog.open();
+        }
 
         return null;
     }
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/Messages.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/Messages.java
new file mode 100644 (file)
index 0000000..72501d0
--- /dev/null
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson
+ *
+ * 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
+  *******************************************************************************/
+
+package org.eclipse.tracecompass.internal.tmf.ui.project.operations;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * The messages for workspace operations.
+ * @author Bernd Hufmann
+ */
+public class Messages extends NLS {
+    private static final String BUNDLE_NAME = "org.eclipse.tracecompass.internal.tmf.ui.project.operations.messages"; //$NON-NLS-1$
+
+    /**
+     * The task name for removing of a trace for an experiment.
+     */
+    public static String SelectTracesWizardPage_TraceRemovalTask;
+
+    /**
+     * The task name for selecting of a trace for an experiment.
+     */
+    public static String SelectTracesWizardPage_TraceSelectionTask;
+
+    /**
+     * The error message when selecting of traces for an experiment fails.
+     */
+    public static String SelectTracesWizardPage_SelectionError;
+    static {
+        // initialize resource bundle
+        NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+    }
+
+    private Messages() {
+    }
+}
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/SelectTracesOperation.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/SelectTracesOperation.java
new file mode 100644 (file)
index 0000000..8d1e34b
--- /dev/null
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson
+ *
+ * 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
+ *******************************************************************************/
+package org.eclipse.tracecompass.internal.tmf.ui.project.operations;
+
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.operation.ModalContext;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tracecompass.internal.tmf.ui.Activator;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+
+/**
+ * Operation to add traces to an experiment.
+ *
+ * @author Bernd Hufmann
+ */
+public class SelectTracesOperation implements IRunnableWithProgress {
+
+    private final @Nullable TmfExperimentElement fExperimentElement;
+    private final @NonNull List<TmfTraceElement> fTraceElements;
+    private final @NonNull Map<String, TmfTraceElement> fPreviousTraces;
+    private @NonNull IStatus fStatus = checkNotNull(Status.OK_STATUS);
+
+    /**
+     * Constructor. It will add traces to given experiment and remove traces
+     * that don't exist anymore.
+     *
+     * @param experimentElement
+     *              the experiment element to add the traces
+     * @param traces
+     *              the trace elements
+     * @param previousTraces
+     *              map of traces currently available in the experiment
+     */
+    public SelectTracesOperation(@NonNull TmfExperimentElement experimentElement, @NonNull TmfTraceElement[] traces, @NonNull Map<String, TmfTraceElement> previousTraces) {
+        fExperimentElement = experimentElement;
+        fTraceElements = new ArrayList<>();
+        fTraceElements.addAll(Arrays.asList(traces));
+        fPreviousTraces = previousTraces;
+    }
+
+    @Override
+    public void run(IProgressMonitor progressMonitor) {
+        TmfExperimentElement experimentElement = fExperimentElement;
+        if (experimentElement == null) {
+            return;
+        }
+
+        // Check if operation was cancelled.
+        boolean changed = false;
+
+
+        List<TmfTraceElement> elements = fTraceElements;
+
+        Set<String> keys = fPreviousTraces.keySet();
+        SubMonitor subMonitor = SubMonitor.convert(progressMonitor, elements.size() + keys.size());
+        // Add the selected traces to the experiment
+        try {
+            for (TmfTraceElement trace : elements) {
+                ModalContext.checkCanceled(progressMonitor);
+                String name = trace.getElementPath();
+                if (keys.contains(name)) {
+                    subMonitor.setTaskName(Messages.SelectTracesWizardPage_TraceRemovalTask + " " + trace.getElementPath()); //$NON-NLS-1$
+                    keys.remove(name);
+                } else {
+                    subMonitor.setTaskName(Messages.SelectTracesWizardPage_TraceSelectionTask + " " + trace.getElementPath()); //$NON-NLS-1$
+                    experimentElement.addTrace(trace, false);
+                    changed = true;
+                }
+                subMonitor.worked(1);
+            }
+
+            // Remove traces that were unchecked (thus left in fPreviousTraces)
+            for (Map.Entry<String, TmfTraceElement> entry : fPreviousTraces.entrySet()) {
+                ModalContext.checkCanceled(progressMonitor);
+                TmfTraceElement trace = entry.getValue();
+                subMonitor.setTaskName(Messages.SelectTracesWizardPage_TraceRemovalTask + " " + trace.getElementPath()); //$NON-NLS-1$
+
+                try {
+                    experimentElement.removeTrace(trace);
+                } catch (CoreException e) {
+                    Activator.getDefault().logError(Messages.SelectTracesWizardPage_SelectionError + " " + experimentElement.getName(), e); //$NON-NLS-1$
+                }
+                changed = true;
+                subMonitor.worked(1);
+            }
+            if (changed) {
+                Display.getDefault().syncExec(new Runnable() {
+                    @Override
+                    public void run() {
+                        experimentElement.closeEditors();
+                    }
+                });
+                experimentElement.deleteSupplementaryResources();
+            }
+            setStatus(checkNotNull(Status.OK_STATUS));
+        } catch (InterruptedException e) {
+            setStatus(checkNotNull(Status.CANCEL_STATUS));
+        } catch (Exception e) {
+            Activator.getDefault().logError(Messages.SelectTracesWizardPage_SelectionError, e);
+            setStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.SelectTracesWizardPage_SelectionError, e));
+        }
+    }
+
+    /**
+     * Set the status for this operation
+     *
+     * @param status
+     *            the status
+     */
+    protected void setStatus(@NonNull IStatus status) {
+        fStatus = status;
+    }
+
+    /**
+     * Returns the status of the operation execution.
+     *
+     * @return status
+     */
+    public @NonNull IStatus getStatus() {
+        return fStatus;
+    }
+
+}
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/messages.properties b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/messages.properties
new file mode 100644 (file)
index 0000000..5f7128e
--- /dev/null
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2016 Ericsson
+#
+# 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
+###############################################################################
+
+SelectTracesWizardPage_TraceRemovalTask=Removing trace
+SelectTracesWizardPage_TraceSelectionTask=Selecting trace
+SelectTracesWizardPage_SelectionError=Error selecting traces for experiment
index 8958b0e56c8b6d8f3d180b4c5d9bc6b60eab6e34..07a2f3cbd86b4520de99401d8f854a35be6aab8e 100644 (file)
@@ -55,14 +55,6 @@ public class Messages extends NLS {
      * The error message when selecting of traces for an experiment fails.
      */
     public static String SelectTracesWizardPage_SelectionError;
-    /**
-     * The task name for selecting of a trace for an experiment.
-     */
-    public static String SelectTracesWizardPage_TraceSelectionTask;
-    /**
-     * The task name for removing of a trace for an experiment.
-     */
-    public static String SelectTracesWizardPage_TraceRemovalTask;
     /**
      * The cancel message for the trace selection operation.
      */
index d225c19c49b90f422bc05595ddf147680af55822..b3bfa97bfa671043811c4d5e112ff3a392f35e1e 100644 (file)
@@ -12,6 +12,7 @@
 
 package org.eclipse.tracecompass.tmf.ui.project.wizards;
 
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
@@ -32,7 +33,7 @@ public class SelectTracesWizard extends Wizard implements IImportWizard {
     // ------------------------------------------------------------------------
 
     private final TmfProjectElement fProject;
-    private final TmfExperimentElement fExperiment;
+    private final @NonNull TmfExperimentElement fExperiment;
     private SelectTracesWizardPage fSelectTraceWizardPage;
 
     // ------------------------------------------------------------------------
@@ -44,7 +45,7 @@ public class SelectTracesWizard extends Wizard implements IImportWizard {
      * @param project The project model element
      * @param experiment The experiemnt model element
      */
-    public SelectTracesWizard(TmfProjectElement project, TmfExperimentElement experiment) {
+    public SelectTracesWizard(TmfProjectElement project, @NonNull TmfExperimentElement experiment) {
         fProject = project;
         fExperiment = experiment;
     }
index 6395e052dee125280d6ff78b125b5b4d55861d89..a1afbb94ceecf948fd5d2e971a358bee7c951a8f 100644 (file)
@@ -17,13 +17,11 @@ package org.eclipse.tracecompass.tmf.ui.project.wizards;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -31,11 +29,9 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.operation.ModalContext;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
@@ -53,9 +49,9 @@ import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Tree;
 import org.eclipse.tracecompass.internal.tmf.ui.Activator;
+import org.eclipse.tracecompass.internal.tmf.ui.project.operations.SelectTracesOperation;
 import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
 import org.eclipse.tracecompass.tmf.ui.project.model.ITmfProjectModelElement;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
@@ -81,8 +77,8 @@ public class SelectTracesWizardPage extends WizardPage {
     // ------------------------------------------------------------------------
 
     private final TmfProjectElement fProject;
-    private final TmfExperimentElement fExperiment;
-    private Map<String, TmfTraceElement> fPreviousTraces;
+    private final @NonNull TmfExperimentElement fExperiment;
+    private @NonNull Map<String, TmfTraceElement> fPreviousTraces;
     private CheckboxTreeViewer fCheckboxTreeViewer;
     private TmfNavigatorContentProvider fContentProvider;
     private TmfNavigatorLabelProvider fLabelProvider;
@@ -101,12 +97,13 @@ public class SelectTracesWizardPage extends WizardPage {
      * @param experiment
      *            The experiment model experiment.
      */
-    protected SelectTracesWizardPage(TmfProjectElement project, TmfExperimentElement experiment) {
+    protected SelectTracesWizardPage(TmfProjectElement project, @NonNull TmfExperimentElement experiment) {
         super(""); //$NON-NLS-1$
         setTitle(Messages.SelectTracesWizardPage_WindowTitle);
         setDescription(Messages.SelectTracesWizardPage_Description);
         fProject = project;
         fExperiment = experiment;
+        fPreviousTraces = new HashMap<>();
     }
 
     // ------------------------------------------------------------------------
@@ -216,7 +213,7 @@ public class SelectTracesWizardPage extends WizardPage {
         });
 
         // Get the list of traces already part of the experiment
-        fPreviousTraces = new HashMap<>();
+        fPreviousTraces.clear();
         for (ITmfProjectModelElement child : fExperiment.getChildren()) {
             if (child instanceof TmfTraceElement) {
                 TmfTraceElement trace = (TmfTraceElement) child;
@@ -327,9 +324,7 @@ public class SelectTracesWizardPage extends WizardPage {
      */
     public boolean performFinish() {
 
-        IFolder experiment = fExperiment.getResource();
-
-        final SelectTracesOperation operation = new SelectTracesOperation(experiment, getSelection());
+        final SelectTracesOperation operation = new SelectTracesOperation(fExperiment, getSelection(), fPreviousTraces);
 
         IStatus status = Status.OK_STATUS;
         try {
@@ -381,89 +376,6 @@ public class SelectTracesWizardPage extends WizardPage {
         return true;
     }
 
-    private class SelectTracesOperation {
-
-        IFolder experiment = null;
-        TmfTraceElement[] traces;
-        private IStatus fStatus;
-
-        public SelectTracesOperation(IFolder experiment, @NonNull TmfTraceElement[] traces) {
-            this.experiment = experiment;
-            this.traces = Arrays.copyOf(traces, traces.length);
-        }
-
-        public void run(IProgressMonitor progressMonitor) {
-
-            // Check if operation was cancelled.
-            boolean changed = false;
-
-            // Add the selected traces to the experiment
-            Set<String> keys = fPreviousTraces.keySet();
-            SubMonitor subMonitor = SubMonitor.convert(progressMonitor, traces.length + keys.size());
-            try {
-                for (TmfTraceElement trace : traces) {
-                    ModalContext.checkCanceled(progressMonitor);
-                    String name = trace.getElementPath();
-                    if (keys.contains(name)) {
-                        subMonitor.setTaskName(Messages.SelectTracesWizardPage_TraceRemovalTask + " " + trace.getElementPath()); //$NON-NLS-1$
-                        fPreviousTraces.remove(name);
-                    } else {
-                        subMonitor.setTaskName(Messages.SelectTracesWizardPage_TraceSelectionTask + " " + trace.getElementPath()); //$NON-NLS-1$
-                        fExperiment.addTrace(trace, false);
-                        changed = true;
-                    }
-                    subMonitor.worked(1);
-                }
-
-                // Remove traces that were unchecked (thus left in
-                // fPreviousTraces)
-                for (Map.Entry<String, TmfTraceElement> entry : fPreviousTraces.entrySet()) {
-                    ModalContext.checkCanceled(progressMonitor);
-                    TmfTraceElement trace = entry.getValue();
-                    subMonitor.setTaskName(Messages.SelectTracesWizardPage_TraceRemovalTask + " " + trace.getElementPath()); //$NON-NLS-1$
-
-                    try {
-                        fExperiment.removeTrace(trace);
-                    } catch (CoreException e) {
-                        Activator.getDefault().logError(Messages.SelectTracesWizardPage_SelectionError + " " + experiment.getName(), e); //$NON-NLS-1$
-                    }
-                    changed = true;
-                    subMonitor.worked(1);
-                }
-                if (changed) {
-                    Display.getDefault().syncExec(new Runnable() {
-                        @Override
-                        public void run() {
-                            fExperiment.closeEditors();
-                        }
-                    });
-                    fExperiment.deleteSupplementaryResources();
-                }
-                setStatus(Status.OK_STATUS);
-            } catch (InterruptedException e) {
-                setStatus(Status.CANCEL_STATUS);
-            } catch (Exception e) {
-                Activator.getDefault().logError(Messages.SelectTracesWizardPage_SelectionError, e);
-                setStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.SelectTracesWizardPage_SelectionError, e));
-            }
-        }
-
-        /**
-         * Set the status for this operation
-         *
-         * @param status
-         *            the status
-         */
-        protected void setStatus(IStatus status) {
-            fStatus = status;
-        }
-
-        public IStatus getStatus() {
-            return fStatus;
-        }
-
-    }
-
     /**
      * Get the list of selected traces
      */
index 96eed2789aced8312d7110bf174e06f46b045869..b1789a766f3ea9d9c16064a2f911ac43cf9069e5 100644 (file)
@@ -21,8 +21,7 @@ SelectTracesWizardPage_TraceColumnHeader=Trace
 SelectTracesWizardPage_WindowTitle=Select Traces
 SelectTracesWizardPage_Description=Select the traces to add to the experiment
 SelectTracesWizardPage_SelectionError=Error selecting traces for experiment
-SelectTracesWizardPage_TraceSelectionTask=Selecting trace
-SelectTracesWizardPage_TraceRemovalTask=Removing trace
+
 SelectTracesWizardPage_SelectionOperationCancelled=Selection operation cancelled
 SelectTracesWizardPage_InternalErrorTitle=Internal Error
 
This page took 0.031968 seconds and 5 git commands to generate.