From b2845b8fb12a0d518f358e7771e77e824544a35e Mon Sep 17 00:00:00 2001 From: Bernd Hufmann Date: Tue, 23 Feb 2016 06:53:30 -0500 Subject: [PATCH] tmf: extract SelectTracesOperation from SelectTracesWizardPage This is done so that it can be reused later on. Change-Id: I14118e459827bb8f37fb96aa54090ff08295a23d Signed-off-by: Bernd Hufmann Reviewed-on: https://git.eclipse.org/r/67166 Reviewed-by: Hudson CI Reviewed-by: Patrick Tasse Tested-by: Patrick Tasse --- .../project/handlers/SelectTracesHandler.java | 16 +- .../tmf/ui/project/operations/Messages.java | 42 +++++ .../operations/SelectTracesOperation.java | 145 ++++++++++++++++++ .../ui/project/operations/messages.properties | 12 ++ .../tmf/ui/project/wizards/Messages.java | 8 - .../project/wizards/SelectTracesWizard.java | 5 +- .../wizards/SelectTracesWizardPage.java | 102 +----------- .../ui/project/wizards/messages.properties | 3 +- 8 files changed, 219 insertions(+), 114 deletions(-) create mode 100644 tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/Messages.java create mode 100644 tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/SelectTracesOperation.java create mode 100644 tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/messages.properties diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/SelectTracesHandler.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/SelectTracesHandler.java index 1865df3bf0..0709b35894 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/SelectTracesHandler.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/handlers/SelectTracesHandler.java @@ -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 index 0000000000..72501d020c --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/Messages.java @@ -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 index 0000000000..8d1e34bbd4 --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/SelectTracesOperation.java @@ -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 fTraceElements; + private final @NonNull Map 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 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 elements = fTraceElements; + + Set 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 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 index 0000000000..5f7128ee17 --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/operations/messages.properties @@ -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 diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/Messages.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/Messages.java index 8958b0e56c..07a2f3cbd8 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/Messages.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/Messages.java @@ -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. */ diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizard.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizard.java index d225c19c49..b3bfa97bfa 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizard.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizard.java @@ -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; } diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizardPage.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizardPage.java index 6395e052de..a1afbb94ce 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizardPage.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/SelectTracesWizardPage.java @@ -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 fPreviousTraces; + private final @NonNull TmfExperimentElement fExperiment; + private @NonNull Map 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 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 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 */ diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/messages.properties b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/messages.properties index 96eed2789a..b1789a766f 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/messages.properties +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/wizards/messages.properties @@ -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 -- 2.34.1