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