3c375caa614af1096bd58d186d454bbeaf5e5351
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / project / model / TmfNavigatorLabelProvider.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 - Add support for unknown trace type icon
12 *******************************************************************************/
13
14 package org.eclipse.tracecompass.tmf.ui.project.model;
15
16 import java.net.URL;
17
18 import org.eclipse.core.runtime.IConfigurationElement;
19 import org.eclipse.core.runtime.Platform;
20 import org.eclipse.jface.resource.ImageDescriptor;
21 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
22 import org.eclipse.jface.viewers.ILabelProviderListener;
23 import org.eclipse.jface.viewers.StyledString;
24 import org.eclipse.jface.viewers.StyledString.Styler;
25 import org.eclipse.swt.graphics.Image;
26 import org.eclipse.tracecompass.internal.tmf.ui.Activator;
27 import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
28 import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType.TraceElementType;
29 import org.eclipse.ui.IMemento;
30 import org.eclipse.ui.ISharedImages;
31 import org.eclipse.ui.PlatformUI;
32 import org.eclipse.ui.model.WorkbenchLabelProvider;
33 import org.eclipse.ui.navigator.ICommonContentExtensionSite;
34 import org.eclipse.ui.navigator.ICommonLabelProvider;
35 import org.osgi.framework.Bundle;
36
37 /**
38 * The TMF project label provider for the tree viewer in the project explorer view.
39 * <p>
40 * @version 1.0
41 * @author Francois Chouinard
42 */
43 public class TmfNavigatorLabelProvider implements ICommonLabelProvider, IStyledLabelProvider {
44
45 // ------------------------------------------------------------------------
46 // Constants
47 // ------------------------------------------------------------------------
48
49 private static final Image FOLDER_ICON = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
50 private static final String TRACE_ICON_FILE = "icons/elcl16/trace.gif"; //$NON-NLS-1$
51 private static final String EXPERIMENT_ICON_FILE = "icons/elcl16/experiment.gif"; //$NON-NLS-1$
52 private static final String ANALYSIS_ICON_FILE = "icons/ovr16/experiment_folder_ovr.png"; //$NON-NLS-1$
53 private static final String VIEW_ICON_FILE = "icons/obj16/node_obj.gif"; //$NON-NLS-1$
54
55 // ------------------------------------------------------------------------
56 // Attributes
57 // ------------------------------------------------------------------------
58
59 private final Image fDefaultTraceIcon;
60 private final Image fExperimentIcon;
61 private final Image fDefaultAnalysisIcon;
62 private final Image fDefaultViewIcon;
63
64 private final WorkbenchLabelProvider fWorkspaceLabelProvider = new WorkbenchLabelProvider();
65
66 // ------------------------------------------------------------------------
67 // Constructors
68 // ------------------------------------------------------------------------
69
70 /**
71 * Constructor.
72 *
73 * Creates the TMF navigator content provider.
74 */
75 public TmfNavigatorLabelProvider() {
76 Bundle bundle = Activator.getDefault().getBundle();
77 fDefaultTraceIcon = loadIcon(bundle, TRACE_ICON_FILE);
78 fExperimentIcon = loadIcon(bundle, EXPERIMENT_ICON_FILE);
79 fDefaultAnalysisIcon = loadIcon(bundle, ANALYSIS_ICON_FILE);
80 fDefaultViewIcon = loadIcon(bundle, VIEW_ICON_FILE);
81 }
82
83 private static Image loadIcon(Bundle bundle, String url) {
84 Activator plugin = Activator.getDefault();
85 String key = bundle.getSymbolicName() + "/" + url; //$NON-NLS-1$
86 Image icon = plugin.getImageRegistry().get(key);
87 if (icon == null) {
88 URL imageURL = bundle.getResource(url);
89 ImageDescriptor descriptor = ImageDescriptor.createFromURL(imageURL);
90 if (descriptor != null) {
91 icon = descriptor.createImage();
92 plugin.getImageRegistry().put(key, icon);
93 }
94 }
95 return icon;
96 }
97
98 // ------------------------------------------------------------------------
99 // ICommonLabelProvider
100 // ------------------------------------------------------------------------
101
102 @Override
103 public Image getImage(Object element) {
104
105 if (element instanceof TmfCommonProjectElement) {
106 TmfCommonProjectElement trace = (TmfCommonProjectElement) element;
107 String traceType = trace.getTraceType();
108 if (traceType == null || TmfTraceType.getTraceType(traceType) == null) {
109 // request the label to the Eclipse platform
110 return fWorkspaceLabelProvider.getImage(((TmfCommonProjectElement) element).getResource());
111 }
112
113 IConfigurationElement traceUIAttributes = TmfTraceTypeUIUtils.getTraceUIAttributes(traceType, (element instanceof TmfTraceElement) ? TraceElementType.TRACE : TraceElementType.EXPERIMENT);
114 if (traceUIAttributes != null) {
115 String iconAttr = traceUIAttributes.getAttribute(TmfTraceTypeUIUtils.ICON_ATTR);
116 if (iconAttr != null) {
117 String name = traceUIAttributes.getContributor().getName();
118 if (name != null) {
119 Bundle bundle = Platform.getBundle(name);
120 if (bundle != null) {
121 Image image = loadIcon(bundle, iconAttr);
122 if (image != null) {
123 return image;
124 }
125 }
126 }
127 }
128
129 }
130 if (element instanceof TmfTraceElement) {
131 return fDefaultTraceIcon;
132 }
133 return fExperimentIcon;
134 }
135
136 if (element instanceof TmfExperimentFolder) {
137 return FOLDER_ICON;
138 }
139
140 if (element instanceof TmfTraceFolder) {
141 return FOLDER_ICON;
142 }
143
144 if (element instanceof TmfAnalysisOutputElement) {
145 TmfAnalysisOutputElement output = (TmfAnalysisOutputElement) element;
146 Image icon = output.getIcon();
147 if (icon == null) {
148 return fDefaultViewIcon;
149 }
150 return icon;
151 }
152
153 if (element instanceof TmfAnalysisElement) {
154 TmfAnalysisElement analysis = (TmfAnalysisElement) element;
155 String iconFile = analysis.getIconFile();
156 if (iconFile != null) {
157 Bundle bundle = analysis.getBundle();
158 if (bundle != null) {
159 Image icon = loadIcon(bundle, iconFile);
160 return icon;
161 }
162 }
163 return fDefaultAnalysisIcon;
164 }
165
166 return null;
167 }
168
169 @Override
170 public String getText(Object element) {
171
172 if (element instanceof TmfTracesFolder) {
173 TmfTracesFolder folder = (TmfTracesFolder) element;
174 return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
175 }
176
177 if (element instanceof TmfTraceFolder) {
178 TmfTraceFolder folder = (TmfTraceFolder) element;
179 int nbTraces = folder.getTraces().size();
180 if (nbTraces > 0) {
181 return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
182 }
183 return folder.getName();
184 }
185
186 if (element instanceof TmfTraceElement) {
187 TmfTraceElement trace = (TmfTraceElement) element;
188 if (trace.getParent() instanceof TmfExperimentElement) {
189 return trace.getElementPath();
190 }
191 return trace.getName();
192 }
193
194 if (element instanceof TmfExperimentElement) {
195 TmfExperimentElement folder = (TmfExperimentElement) element;
196 return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
197 }
198
199 if (element instanceof TmfExperimentFolder) {
200 TmfExperimentFolder folder = (TmfExperimentFolder) element;
201 return folder.getName() + " [" + folder.getChildren().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
202 }
203
204 // Catch all
205 if (element instanceof ITmfProjectModelElement) {
206 return ((ITmfProjectModelElement) element).getName();
207 }
208
209 return null;
210 }
211
212 @Override
213 public void addListener(ILabelProviderListener listener) {
214 }
215
216 @Override
217 public void dispose() {
218 }
219
220 @Override
221 public boolean isLabelProperty(Object element, String property) {
222 return false;
223 }
224
225 @Override
226 public void removeListener(ILabelProviderListener listener) {
227 }
228
229 @Override
230 public void restoreState(IMemento aMemento) {
231 }
232
233 @Override
234 public void saveState(IMemento aMemento) {
235 }
236
237 @Override
238 public String getDescription(Object anElement) {
239 return getText(anElement);
240 }
241
242 @Override
243 public void init(ICommonContentExtensionSite aConfig) {
244 }
245
246 @Override
247 public StyledString getStyledText(Object element) {
248 String text = getText(element);
249 if (text != null) {
250 if (element instanceof ITmfStyledProjectModelElement) {
251 Styler styler = ((ITmfStyledProjectModelElement) element).getStyler();
252 if (styler != null) {
253 return new StyledString(text, styler);
254 }
255 }
256 return new StyledString(text);
257 }
258 return null;
259 }
260
261 }
This page took 0.035976 seconds and 4 git commands to generate.