tmf: Switch tmf.ui to Java 7 + fix warnings
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / project / model / TmfNavigatorContentProvider.java
CommitLineData
12c155f5 1/*******************************************************************************
11252342 2 * Copyright (c) 2010, 2013 Ericsson
013a5f1c 3 *
12c155f5
FC
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
013a5f1c 8 *
12c155f5
FC
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
1169a815 11 * Bernd Hufmann - Implement getParent()
12c155f5
FC
12 *******************************************************************************/
13
14package org.eclipse.linuxtools.tmf.ui.project.model;
15
16import java.util.ArrayList;
17import java.util.HashMap;
18import java.util.List;
19import java.util.Map;
20import java.util.Set;
21
22import org.eclipse.core.resources.IFolder;
23import org.eclipse.core.resources.IProject;
24import org.eclipse.core.resources.IResource;
25import org.eclipse.core.runtime.CoreException;
26import org.eclipse.jface.viewers.Viewer;
27import org.eclipse.ui.IMemento;
28import org.eclipse.ui.navigator.ICommonContentExtensionSite;
12c155f5
FC
29import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
30import org.eclipse.ui.navigator.PipelinedShapeModification;
31import org.eclipse.ui.navigator.PipelinedViewerUpdate;
32
33/**
013a5f1c 34 * The TMF project content provider for the tree viewer in the project explorer view.
12c155f5 35 * <p>
b544077e
BH
36 * @version 1.0
37 * @author Francois Chouinard
12c155f5 38 */
013a5f1c 39public class TmfNavigatorContentProvider implements IPipelinedTreeContentProvider {
12c155f5
FC
40
41 // ------------------------------------------------------------------------
42 // ICommonContentProvider
43 // ------------------------------------------------------------------------
11252342 44
12c155f5
FC
45 @Override
46 public Object[] getElements(Object inputElement) {
47 return null;
48 }
49
50 @Override
51 public Object getParent(Object element) {
1169a815
BH
52 if (element instanceof IProject) {
53 IProject project = (IProject) element;
54 return project.getParent();
55 }
56
57 if (element instanceof TmfTraceFolder) {
58 TmfTraceFolder folder = (TmfTraceFolder) element;
59 // Return the corresponding IProject as parent because from CNF point of view the IProject is the parent.
60 // The IProject is needed e.g. for link with Editor to work correctly.
61 return folder.getParent().getResource();
62 }
63
64 if (element instanceof TmfTraceElement) {
65 TmfTraceElement traceElement = (TmfTraceElement) element;
66 return traceElement.getParent();
67 }
68
69 if (element instanceof TmfExperimentFolder) {
70 TmfExperimentFolder folder = (TmfExperimentFolder) element;
71 // Return the corresponding IProject as parent because from CNF point of view the IProject is the parent.
72 // The IProject is needed e.g. for link with Editor to work correctly.
73 return folder.getParent().getResource();
74 }
75
76 if (element instanceof TmfExperimentElement) {
77 TmfExperimentElement expElement = (TmfExperimentElement) element;
78 return expElement.getParent();
79 }
12c155f5
FC
80 return null;
81 }
82
83 @Override
84 public boolean hasChildren(Object element) {
85 if (element instanceof IProject) {
86 IProject project = (IProject) element;
87 return project.isAccessible();
88 }
c068a752
GB
89 if (element instanceof TmfProjectModelElement) {
90 TmfProjectModelElement modelElement = (TmfProjectModelElement) element;
91 return modelElement.hasChildren();
12c155f5
FC
92 }
93 return false;
94 }
95
96 @Override
97 public void dispose() {
98 }
99
100 @Override
101 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
102 }
013a5f1c 103
12c155f5
FC
104 @Override
105 public void restoreState(IMemento aMemento) {
106 }
013a5f1c 107
12c155f5
FC
108 @Override
109 public void saveState(IMemento aMemento) {
110 }
111
112 @Override
113 public void init(ICommonContentExtensionSite aConfig) {
114 }
115
116 // ------------------------------------------------------------------------
117 // ICommonContentProvider - getChildren()
118 // ------------------------------------------------------------------------
11252342 119
12c155f5
FC
120 @Override
121 public synchronized Object[] getChildren(Object parentElement) {
122
123 // Tracing project level
124 if (parentElement instanceof IProject) {
125 return getProjectChildren((IProject) parentElement);
126 }
127
128 // Traces "folder" level
129 if (parentElement instanceof TmfTraceFolder) {
130 return getTraceFolderChildren((TmfTraceFolder) parentElement);
131 }
132
133 // Experiments "folder" level
134 if (parentElement instanceof TmfExperimentFolder) {
135 return getExperimentFolderChildren((TmfExperimentFolder) parentElement);
136 }
137
138 // Experiment
139 if (parentElement instanceof TmfExperimentElement) {
140 return getExperimentChildren((TmfExperimentElement) parentElement);
141 }
142
c068a752
GB
143 // Traces
144 if (parentElement instanceof TmfTraceElement) {
145 return getTraceChildren((TmfTraceElement) parentElement);
146 }
147
148 // Analysis
149 if (parentElement instanceof TmfAnalysisElement) {
150 return getAnalysisChildren((TmfAnalysisElement) parentElement);
151 }
152
12c155f5
FC
153 return new Object[0];
154 }
155
b544077e
BH
156 // ------------------------------------------------------------------------
157 // Helper method
158 // ------------------------------------------------------------------------
11252342 159
12c155f5
FC
160 private Object[] getProjectChildren(IProject project) {
161 // The children structure
507b1336 162 List<Object> children = new ArrayList<>();
12c155f5
FC
163
164 // Get the children from the model
507b1336 165 Map<String, ITmfProjectModelElement> childrenMap = new HashMap<>();
828e5592 166 TmfProjectElement tmfProject = TmfProjectRegistry.getProject(project, true);
12c155f5
FC
167 for (ITmfProjectModelElement element : tmfProject.getChildren()) {
168 if (element instanceof TmfTraceFolder) {
169 TmfTraceFolder child = (TmfTraceFolder) element;
170 childrenMap.put(child.getResource().getName(), child);
171 }
172 if (element instanceof TmfExperimentFolder) {
173 TmfExperimentFolder child = (TmfExperimentFolder) element;
174 childrenMap.put(child.getResource().getName(), child);
175 }
176 }
177
178 // Add the model folder if the corresponding resource exists and is not
179 // accounted for
180 IFolder folder = project.getFolder(TmfTraceFolder.TRACE_FOLDER_NAME);
181 if (folder != null) {
182 String name = folder.getName();
183 ITmfProjectModelElement element = childrenMap.get(name);
184 if (element == null) {
185 element = new TmfTraceFolder(TmfTraceFolder.TRACE_FOLDER_NAME, folder, tmfProject);
186 }
187 children.add(element);
188 childrenMap.remove(name);
189 getTraceFolderChildren((TmfTraceFolder) element);
190 }
191
192 // Add the model folder if the corresponding resource exists and is not
193 // accounted for
194 folder = project.getFolder(TmfExperimentFolder.EXPER_FOLDER_NAME);
195 if (folder != null) {
196 String name = folder.getName();
197 ITmfProjectModelElement element = childrenMap.get(name);
198 if (element == null) {
199 element = new TmfExperimentFolder(TmfExperimentFolder.EXPER_FOLDER_NAME, folder, tmfProject);
200 }
201 children.add(element);
202 childrenMap.remove(name);
203 getExperimentFolderChildren((TmfExperimentFolder) element);
204 }
205
206 // Remove the leftovers (what was in the model but removed from the
207 // project)
208 cleanupModel(tmfProject, childrenMap);
209
210 return children.toArray();
211 }
212
213 private Object[] getTraceFolderChildren(TmfTraceFolder tmfTraceFolder) {
214 // The children structure
507b1336 215 List<Object> children = new ArrayList<>();
12c155f5
FC
216
217 // Get the children from the model
507b1336 218 Map<String, ITmfProjectModelElement> childrenMap = new HashMap<>();
12c155f5
FC
219 for (ITmfProjectModelElement element : tmfTraceFolder.getChildren()) {
220 if (element instanceof TmfTraceElement) {
221 String name = element.getResource().getName();
222 childrenMap.put(name, element);
223 }
224 }
225
226 IFolder folder = tmfTraceFolder.getResource();
227 try {
228 IResource[] members = folder.members();
229 for (IResource resource : members) {
230 String name = resource.getName();
231 ITmfProjectModelElement trace = childrenMap.get(name);
e12ecd30
BH
232 if (trace == null) {
233 trace = new TmfTraceElement(name, resource, tmfTraceFolder);
12c155f5 234 }
e12ecd30 235 children.add(trace);
12c155f5 236 childrenMap.remove(name);
c068a752 237 getTraceChildren((TmfTraceElement) trace);
12c155f5
FC
238 }
239 } catch (CoreException e) {
240 }
241
242 // Remove the leftovers (what was in the model but removed from the
243 // project)
244 cleanupModel(tmfTraceFolder, childrenMap);
245
246 return children.toArray();
247 }
248
249 private Object[] getExperimentFolderChildren(TmfExperimentFolder tmfExperimentFolder) {
250 // The children structure
507b1336 251 List<Object> children = new ArrayList<>();
12c155f5
FC
252
253 // Get the children from the model
507b1336 254 Map<String, ITmfProjectModelElement> childrenMap = new HashMap<>();
12c155f5
FC
255 for (ITmfProjectModelElement element : tmfExperimentFolder.getChildren()) {
256 if (element instanceof TmfExperimentElement) {
257 String name = element.getResource().getName();
258 childrenMap.put(name, element);
259 }
260 }
261
262 IFolder folder = tmfExperimentFolder.getResource();
263 try {
264 IResource[] members = folder.members();
265 for (IResource resource : members) {
266 if (resource instanceof IFolder) {
267 IFolder expFolder = (IFolder) resource;
268 String name = resource.getName();
269 ITmfProjectModelElement experiment = childrenMap.get(name);
270 if (experiment == null) {
271 experiment = new TmfExperimentElement(name, expFolder, tmfExperimentFolder);
272 }
273 children.add(experiment);
274 childrenMap.remove(name);
275 getExperimentChildren((TmfExperimentElement) experiment);
276 }
277 }
278 } catch (CoreException e) {
279 }
280
281 // Remove the leftovers (what was in the model but removed from the
282 // project)
283 cleanupModel(tmfExperimentFolder, childrenMap);
284
285 return children.toArray();
286 }
287
288 private Object[] getExperimentChildren(TmfExperimentElement tmfExperiment) {
289 // The children structure
507b1336 290 List<Object> children = new ArrayList<>();
12c155f5
FC
291
292 // Get the children from the model
507b1336 293 Map<String, ITmfProjectModelElement> childrenMap = new HashMap<>();
12c155f5
FC
294 for (ITmfProjectModelElement element : tmfExperiment.getChildren()) {
295 if (element instanceof TmfTraceElement) {
296 String name = element.getResource().getName();
297 childrenMap.put(name, element);
298 }
299 }
300
301 IFolder folder = tmfExperiment.getResource();
302 try {
303 IResource[] members = folder.members();
304 for (IResource resource : members) {
305 String name = resource.getName();
306 ITmfProjectModelElement trace = childrenMap.get(name);
828e5592
PT
307 if (trace == null && !resource.isHidden()) {
308 // exclude hidden resources (e.g. bookmarks file)
12c155f5
FC
309 trace = new TmfTraceElement(name, resource, tmfExperiment);
310 }
311 children.add(trace);
312 childrenMap.remove(name);
313 }
314 } catch (CoreException e) {
315 }
316
317 // Remove the leftovers (what was in the model but removed from the
318 // project)
319 cleanupModel(tmfExperiment, childrenMap);
320
c068a752
GB
321 for (TmfAnalysisElement analysis : tmfExperiment.getAvailableAnalysis()) {
322 children.add(analysis);
323 }
324
325 return children.toArray();
326 }
327
328 private static Object[] getTraceChildren(TmfTraceElement parentElement) {
329 // The children structure
507b1336 330 List<Object> children = new ArrayList<>();
c068a752
GB
331
332 for (TmfAnalysisElement analysis : parentElement.getAvailableAnalysis()) {
333 children.add(analysis);
334 }
335
336 return children.toArray();
337 }
338
339 private static Object[] getAnalysisChildren(TmfAnalysisElement parentElement) {
340 // The children structure
507b1336 341 List<Object> children = new ArrayList<>();
c068a752
GB
342
343 for (TmfAnalysisOutputElement output : parentElement.getAvailableOutputs()) {
344 children.add(output);
345 }
346
12c155f5
FC
347 return children.toArray();
348 }
349
350 private void cleanupModel(ITmfProjectModelElement parent, Map<String, ITmfProjectModelElement> danglingChildren) {
351 if (parent != null) {
352 for (ITmfProjectModelElement child : danglingChildren.values()) {
507b1336 353 Map<String, ITmfProjectModelElement> grandChildren = new HashMap<>();
12c155f5
FC
354 for (ITmfProjectModelElement element : child.getChildren()) {
355 String name = element.getResource().getName();
356 grandChildren.put(name, element);
357 }
358 cleanupModel(child, grandChildren);
359 parent.removeChild(child);
360 }
361 }
362 }
363
364 // ------------------------------------------------------------------------
365 // IPipelinedTreeContentProvider
366 // ------------------------------------------------------------------------
367
368 @Override
12c155f5
FC
369 public void getPipelinedChildren(Object parent, Set currentChildren) {
370 customizeTmfElements(getChildren(parent), currentChildren);
371 }
372
373 @Override
12c155f5
FC
374 public void getPipelinedElements(Object input, Set currentElements) {
375 customizeTmfElements(getElements(input), currentElements);
376 }
377
378 /**
379 * Add/replace the ITmfProjectElement to the list of children
013a5f1c 380 *
12c155f5
FC
381 * @param elements
382 * the list returned by getChildren()
383 * @param children
384 * the current children
385 */
abbdd66a
AM
386 private static void customizeTmfElements(Object[] elements,
387 Set<Object> children) {
12c155f5
FC
388 if (elements != null && children != null) {
389 for (Object element : elements) {
390 if (element instanceof ITmfProjectModelElement) {
391 ITmfProjectModelElement tmfElement = (ITmfProjectModelElement) element;
392 IResource resource = tmfElement.getResource();
393 if (resource != null) {
394 children.remove(resource);
395 }
396 children.add(element);
397 }
398 else if (element != null) {
399 children.add(element);
400 }
401 }
402 }
403 }
404
405 @Override
406 public Object getPipelinedParent(Object anObject, Object aSuggestedParent) {
bfa12ff0 407 return aSuggestedParent;
12c155f5
FC
408 }
409
410 @Override
411 public PipelinedShapeModification interceptAdd(PipelinedShapeModification anAddModification) {
bfa12ff0 412 return anAddModification;
12c155f5
FC
413 }
414
415 @Override
416 public PipelinedShapeModification interceptRemove(PipelinedShapeModification aRemoveModification) {
417 return null;
418 }
419
420 @Override
421 public boolean interceptRefresh(PipelinedViewerUpdate aRefreshSynchronization) {
422 return false;
423 }
424
425 @Override
426 public boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization) {
427 return false;
428 }
12c155f5 429}
This page took 0.071608 seconds and 5 git commands to generate.