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>
// 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;
}
--- /dev/null
+/*******************************************************************************
+ * 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() {
+ }
+}
--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+
+}
--- /dev/null
+###############################################################################
+# 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
* 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.
*/
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;
// ------------------------------------------------------------------------
private final TmfProjectElement fProject;
- private final TmfExperimentElement fExperiment;
+ private final @NonNull TmfExperimentElement fExperiment;
private SelectTracesWizardPage fSelectTraceWizardPage;
// ------------------------------------------------------------------------
* @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;
}
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;
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;
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;
// ------------------------------------------------------------------------
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;
* @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<>();
}
// ------------------------------------------------------------------------
});
// 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;
*/
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 {
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
*/
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