tmf: Move icon and label text into ITmfProjectModelElement
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / project / model / TmfProjectElement.java
1 /*******************************************************************************
2 * Copyright (c) 2011, 2014 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 *
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 * Patrick Tasse - Refactor resource change listener
12 *******************************************************************************/
13
14 package org.eclipse.tracecompass.tmf.ui.project.model;
15
16 import java.util.HashMap;
17 import java.util.Map;
18
19 import org.eclipse.core.resources.IFolder;
20 import org.eclipse.core.resources.IProject;
21 import org.eclipse.swt.graphics.Image;
22
23 /**
24 * The implementation of TMF project model element.
25 *
26 * @version 1.0
27 * @author Francois Chouinard
28 */
29 public class TmfProjectElement extends TmfProjectModelElement {
30
31 // ------------------------------------------------------------------------
32 // Attributes
33 // ------------------------------------------------------------------------
34
35 private TmfTraceFolder fTraceFolder = null;
36 private TmfExperimentFolder fExperimentFolder = null;
37
38 // ------------------------------------------------------------------------
39 // Constructor
40 // ------------------------------------------------------------------------
41
42 /**
43 * Constructor.
44 *
45 * Creates the TMF project model element.
46 *
47 * @param name
48 * The name of the project.
49 * @param project
50 * The project reference.
51 * @param parent
52 * The parent element
53 */
54 public TmfProjectElement(String name, IProject project, ITmfProjectModelElement parent) {
55 super(name, project, parent);
56 }
57
58 // ------------------------------------------------------------------------
59 // TmfProjectModelElement
60 // ------------------------------------------------------------------------
61
62 @Override
63 public IProject getResource() {
64 return (IProject) super.getResource();
65 }
66
67 @Override
68 public void addChild(ITmfProjectModelElement child) {
69 super.addChild(child);
70 if (child instanceof TmfTraceFolder) {
71 fTraceFolder = (TmfTraceFolder) child;
72 return;
73 }
74 if (child instanceof TmfExperimentFolder) {
75 fExperimentFolder = (TmfExperimentFolder) child;
76 return;
77 }
78 }
79
80 // ------------------------------------------------------------------------
81 // Accessors
82 // ------------------------------------------------------------------------
83
84 /**
85 * Returns the containing trace folder element.
86 * @return the TMF trace folder element.
87 */
88 public TmfTraceFolder getTracesFolder() {
89 return fTraceFolder;
90 }
91
92 /**
93 * Returns the containing experiment folder element.
94 * @return the TMF experiment folder element.
95 */
96 public TmfExperimentFolder getExperimentsFolder() {
97 return fExperimentFolder;
98 }
99
100 // ------------------------------------------------------------------------
101 // TmfProjectModelElement
102 // ------------------------------------------------------------------------
103
104 /**
105 * @since 2.0
106 */
107 @Override
108 protected void refreshChildren() {
109 IProject project = getResource();
110
111 // Get the children from the model
112 Map<String, ITmfProjectModelElement> childrenMap = new HashMap<>();
113 for (ITmfProjectModelElement element : getChildren()) {
114 childrenMap.put(element.getResource().getName(), element);
115 }
116
117 // Add the model folder if the corresponding resource exists and is not
118 // accounted for
119 IFolder folder = project.getFolder(TmfTracesFolder.TRACES_FOLDER_NAME);
120 if (folder != null && folder.exists()) {
121 String name = folder.getName();
122 ITmfProjectModelElement element = childrenMap.get(name);
123 if (element instanceof TmfTracesFolder) {
124 childrenMap.remove(name);
125 } else {
126 element = new TmfTracesFolder(TmfTracesFolder.TRACES_FOLDER_NAME, folder, this);
127 addChild(element);
128 }
129 ((TmfTracesFolder) element).refreshChildren();
130 }
131
132 // Add the model folder if the corresponding resource exists and is not
133 // accounted for
134 folder = project.getFolder(TmfExperimentFolder.EXPER_FOLDER_NAME);
135 if (folder != null && folder.exists()) {
136 String name = folder.getName();
137 ITmfProjectModelElement element = childrenMap.get(name);
138 if (element instanceof TmfExperimentFolder) {
139 childrenMap.remove(name);
140 } else {
141 element = new TmfExperimentFolder(TmfExperimentFolder.EXPER_FOLDER_NAME, folder, this);
142 addChild(element);
143 }
144 ((TmfExperimentFolder) element).refreshChildren();
145 }
146
147 // Cleanup dangling children from the model
148 for (ITmfProjectModelElement danglingChild : childrenMap.values()) {
149 removeChild(danglingChild);
150 }
151 }
152
153 @Override
154 public TmfProjectElement getProject() {
155 return this;
156 }
157
158 /**
159 * @since 2.0
160 */
161 @Override
162 public Image getIcon() {
163 return null;
164 }
165 }
This page took 0.035823 seconds and 5 git commands to generate.