Remove unneeded checkNotNull() calls
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / internal / tmf / ui / project / operations / SelectTracesOperation.java
CommitLineData
b2845b8f
BH
1/*******************************************************************************
2 * Copyright (c) 2016 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *******************************************************************************/
9package org.eclipse.tracecompass.internal.tmf.ui.project.operations;
10
b2845b8f
BH
11import java.util.ArrayList;
12import java.util.Arrays;
45fc1883 13import java.util.HashMap;
b2845b8f
BH
14import java.util.List;
15import java.util.Map;
16import java.util.Set;
17
45fc1883
BH
18import org.eclipse.core.resources.IFolder;
19import org.eclipse.core.resources.IResource;
b2845b8f
BH
20import org.eclipse.core.runtime.CoreException;
21import org.eclipse.core.runtime.IProgressMonitor;
22import org.eclipse.core.runtime.IStatus;
23import org.eclipse.core.runtime.Status;
24import org.eclipse.core.runtime.SubMonitor;
25import org.eclipse.jdt.annotation.NonNull;
26import org.eclipse.jdt.annotation.Nullable;
27import org.eclipse.jface.operation.IRunnableWithProgress;
28import org.eclipse.jface.operation.ModalContext;
29import org.eclipse.swt.widgets.Display;
30import org.eclipse.tracecompass.internal.tmf.ui.Activator;
31import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
45fc1883 32import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentFolder;
b2845b8f 33import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
45fc1883 34import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
b2845b8f
BH
35
36/**
37 * Operation to add traces to an experiment.
38 *
39 * @author Bernd Hufmann
40 */
41public class SelectTracesOperation implements IRunnableWithProgress {
42
43 private final @Nullable TmfExperimentElement fExperimentElement;
45fc1883
BH
44 private final @Nullable TmfTraceFolder fParentTraceFolder;
45 private final @Nullable List<TmfTraceElement> fTraceElements;
46 private final @Nullable List<IResource> fResources;
47 private final @Nullable Map<String, TmfTraceElement> fPreviousTraces;
0e4f957e 48 private @NonNull IStatus fStatus = Status.OK_STATUS;
b2845b8f 49
45fc1883
BH
50 /**
51 * Constructor
52 *
53 * @param experimentFolderElement
54 * workspace experiment folder containing the experiment
55 * @param experiment
56 * experiment folder where to add traces
57 * @param parentTraceFolder
58 * the parent trace folder containing the trace resources
59 * @param resources
60 * the trace resources to add to the experiment
61 */
62 public SelectTracesOperation(@NonNull TmfExperimentFolder experimentFolderElement, @NonNull IFolder experiment, @NonNull TmfTraceFolder parentTraceFolder, @NonNull List<IResource> resources) {
63 this(experimentFolderElement.getExperiment(experiment), parentTraceFolder, null, resources, null);
64 }
65
b2845b8f
BH
66 /**
67 * Constructor. It will add traces to given experiment and remove traces
68 * that don't exist anymore.
69 *
70 * @param experimentElement
71 * the experiment element to add the traces
72 * @param traces
73 * the trace elements
74 * @param previousTraces
75 * map of traces currently available in the experiment
76 */
77 public SelectTracesOperation(@NonNull TmfExperimentElement experimentElement, @NonNull TmfTraceElement[] traces, @NonNull Map<String, TmfTraceElement> previousTraces) {
45fc1883
BH
78 this(experimentElement, null, traces, null, previousTraces);
79 }
80
81 // Full constructor for internal use only
82 private SelectTracesOperation(TmfExperimentElement experimentElement, TmfTraceFolder parentTraceFolder, TmfTraceElement[] traces, List<IResource> resources, Map<String, TmfTraceElement> previousTraces) {
b2845b8f 83 fExperimentElement = experimentElement;
45fc1883
BH
84 fParentTraceFolder = parentTraceFolder;
85 if (traces == null) {
86 fTraceElements = null;
87 } else {
88 fTraceElements = new ArrayList<>();
89 fTraceElements.addAll(Arrays.asList(traces));
90 }
91 fResources = resources;
b2845b8f
BH
92 fPreviousTraces = previousTraces;
93 }
94
95 @Override
96 public void run(IProgressMonitor progressMonitor) {
97 TmfExperimentElement experimentElement = fExperimentElement;
98 if (experimentElement == null) {
99 return;
100 }
101
102 // Check if operation was cancelled.
103 boolean changed = false;
104
45fc1883
BH
105 Map<String, TmfTraceElement> previousTraces = new HashMap<>();
106 if (fPreviousTraces != null) {
107 previousTraces = fPreviousTraces;
108 }
b2845b8f
BH
109
110 List<TmfTraceElement> elements = fTraceElements;
45fc1883
BH
111 if (elements == null) {
112 if ((fParentTraceFolder != null) && (fResources != null)) {
113 elements = fParentTraceFolder.getTraceElements(fResources);
114 } else {
115 return;
116 }
117 }
b2845b8f 118
45fc1883 119 Set<String> keys = previousTraces.keySet();
b2845b8f
BH
120 SubMonitor subMonitor = SubMonitor.convert(progressMonitor, elements.size() + keys.size());
121 // Add the selected traces to the experiment
122 try {
123 for (TmfTraceElement trace : elements) {
124 ModalContext.checkCanceled(progressMonitor);
125 String name = trace.getElementPath();
126 if (keys.contains(name)) {
127 subMonitor.setTaskName(Messages.SelectTracesWizardPage_TraceRemovalTask + " " + trace.getElementPath()); //$NON-NLS-1$
128 keys.remove(name);
129 } else {
130 subMonitor.setTaskName(Messages.SelectTracesWizardPage_TraceSelectionTask + " " + trace.getElementPath()); //$NON-NLS-1$
131 experimentElement.addTrace(trace, false);
132 changed = true;
133 }
134 subMonitor.worked(1);
135 }
136
137 // Remove traces that were unchecked (thus left in fPreviousTraces)
45fc1883 138 for (Map.Entry<String, TmfTraceElement> entry : previousTraces.entrySet()) {
b2845b8f
BH
139 ModalContext.checkCanceled(progressMonitor);
140 TmfTraceElement trace = entry.getValue();
141 subMonitor.setTaskName(Messages.SelectTracesWizardPage_TraceRemovalTask + " " + trace.getElementPath()); //$NON-NLS-1$
142
143 try {
144 experimentElement.removeTrace(trace);
145 } catch (CoreException e) {
146 Activator.getDefault().logError(Messages.SelectTracesWizardPage_SelectionError + " " + experimentElement.getName(), e); //$NON-NLS-1$
147 }
148 changed = true;
149 subMonitor.worked(1);
150 }
151 if (changed) {
152 Display.getDefault().syncExec(new Runnable() {
153 @Override
154 public void run() {
155 experimentElement.closeEditors();
156 }
157 });
158 experimentElement.deleteSupplementaryResources();
159 }
0e4f957e 160 setStatus(Status.OK_STATUS);
b2845b8f 161 } catch (InterruptedException e) {
0e4f957e 162 setStatus(Status.CANCEL_STATUS);
b2845b8f
BH
163 } catch (Exception e) {
164 Activator.getDefault().logError(Messages.SelectTracesWizardPage_SelectionError, e);
165 setStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.SelectTracesWizardPage_SelectionError, e));
166 }
167 }
168
169 /**
170 * Set the status for this operation
171 *
172 * @param status
173 * the status
174 */
175 protected void setStatus(@NonNull IStatus status) {
176 fStatus = status;
177 }
178
179 /**
180 * Returns the status of the operation execution.
181 *
182 * @return status
183 */
184 public @NonNull IStatus getStatus() {
185 return fStatus;
186 }
187
188}
This page took 0.033786 seconds and 5 git commands to generate.