Skip to content

Package: AdapterFactoryLabelProvider

AdapterFactoryLabelProvider

nameinstructionbranchcomplexitylinemethod
AdapterFactoryLabelProvider(AdapterFactory)
M: 0 C: 18
100%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 0 C: 6
100%
M: 0 C: 1
100%
addListener(ILabelProviderListener)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
dispose()
M: 0 C: 10
100%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 0 C: 3
100%
M: 0 C: 1
100%
fireLabelProviderChanged()
M: 19 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
getAdapterFactory()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getBackground(Object)
M: 17 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
getBackground(Object, int)
M: 36 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
getColorFromObject(Object)
M: 12 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
getColumnImage(Object, int)
M: 16 C: 20
56%
M: 2 C: 2
50%
M: 2 C: 1
33%
M: 4 C: 7
64%
M: 0 C: 1
100%
getColumnText(Object, int)
M: 12 C: 22
65%
M: 4 C: 2
33%
M: 3 C: 1
25%
M: 4 C: 7
64%
M: 0 C: 1
100%
getDefaultBackground()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getDefaultFont()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getDefaultForeground()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getDefaultImage(Object)
M: 43 C: 0
0%
M: 16 C: 0
0%
M: 9 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
getFont(Object)
M: 17 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
getFont(Object, int)
M: 36 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
getFontFromObject(Object)
M: 10 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getForeground(Object)
M: 17 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
getForeground(Object, int)
M: 36 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
getImage(Object)
M: 12 C: 7
37%
M: 2 C: 0
0%
M: 1 C: 1
50%
M: 2 C: 2
50%
M: 0 C: 1
100%
getImageFromObject(Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getText(Object)
M: 6 C: 14
70%
M: 3 C: 1
25%
M: 2 C: 1
33%
M: 1 C: 3
75%
M: 0 C: 1
100%
isFireLabelUpdateNotifications()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
isLabelProperty(Object, String)
M: 2 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
notifyChanged(Notification)
M: 27 C: 4
13%
M: 7 C: 1
13%
M: 4 C: 1
20%
M: 5 C: 2
29%
M: 0 C: 1
100%
removeListener(ILabelProviderListener)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
setAdapterFactory(AdapterFactory)
M: 20 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 6 C: 0
0%
M: 1 C: 0
0%
setDefaultBackground(Color)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
setDefaultFont(Font)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
setDefaultForeground(Color)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
setFireLabelUpdateNotifications(boolean)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
static {...}
M: 0 C: 13
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 6
100%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (c) 2002-2012 IBM Corporation and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * IBM - Initial API and implementation
13: */
14: // REUSED CLASS
15: package org.eclipse.emf.edit.ui.provider;
16:
17: import java.util.ArrayList;
18: import java.util.Collection;
19:
20: import org.eclipse.emf.common.notify.AdapterFactory;
21: import org.eclipse.emf.common.notify.Notification;
22: import org.eclipse.emf.edit.EMFEditPlugin;
23: import org.eclipse.emf.edit.provider.IChangeNotifier;
24: import org.eclipse.emf.edit.provider.IItemColorProvider;
25: import org.eclipse.emf.edit.provider.IItemFontProvider;
26: import org.eclipse.emf.edit.provider.IItemLabelProvider;
27: import org.eclipse.emf.edit.provider.INotifyChangedListener;
28: import org.eclipse.emf.edit.provider.ITableItemColorProvider;
29: import org.eclipse.emf.edit.provider.ITableItemFontProvider;
30: import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
31: import org.eclipse.emf.edit.provider.IViewerNotification;
32: import org.eclipse.jface.viewers.IColorProvider;
33: import org.eclipse.jface.viewers.IFontProvider;
34: import org.eclipse.jface.viewers.ILabelProvider;
35: import org.eclipse.jface.viewers.ILabelProviderListener;
36: import org.eclipse.jface.viewers.ITableColorProvider;
37: import org.eclipse.jface.viewers.ITableFontProvider;
38: import org.eclipse.jface.viewers.ITableLabelProvider;
39: import org.eclipse.jface.viewers.LabelProviderChangedEvent;
40: import org.eclipse.jface.viewers.Viewer;
41: import org.eclipse.swt.graphics.Color;
42: import org.eclipse.swt.graphics.Font;
43: import org.eclipse.swt.graphics.Image;
44:
45: /**
46: * This label provider wraps an AdapterFactory
47: * and it delegates its JFace provider interfaces to corresponding adapter-implemented item provider interfaces.
48: * All method calls to the various label provider interfaces
49: * are delegated to interfaces implemented by the adapters generated by the AdapterFactory. {@link ILabelProvider} is
50: * delegated to {@link IItemLabelProvider}; {@link IFontProvider} is delegated to {@link IItemFontProvider};
51: * {@link IColorProvider} is delegated to {@link IItemColorProvider}; {@link ITableLabelProvider} is delegated to
52: * {@link ITableItemLabelProvider};
53: * and {@link ITableFontProvider} is delegated to {@link ITableItemFontProvider}.
54: * and {@link ITableColorProvider} is delegated to {@link ITableItemColorProvider}.
55: * <p>
56: * The label provider has no mechanism for notifying the viewer of changes. As long as the AdapterFactory is also used
57: * in an AdapterFactoryContentProvider, this won't be a problem, because notifications will be forward as a result of
58: * that.
59: */
60: public class AdapterFactoryLabelProvider implements ILabelProvider, ITableLabelProvider, INotifyChangedListener {
61:         private static final long serialVersionUID = 1L;
62:
63:         /**
64:          * An extended version of the adapter factory label provider that also provides for fonts.
65:          */
66:         public static class FontProvider extends AdapterFactoryLabelProvider implements IFontProvider, ITableFontProvider {
67:                 /**
68:                 *
69:                 */
70:                 private static final long serialVersionUID = 1L;
71:
72:                 /**
73:                  * Construct an instance that wraps the given factory and specifies the given default font.
74:                  *
75:                  * @param adapterFactory an adapter factory that yield adapters that implement the various item label provider
76:                  * interfaces.
77:                  * @param defaultFont the font that will be used when no font is specified.
78:                  */
79:                 public FontProvider(AdapterFactory adapterFactory, Font defaultFont) {
80:                         super(adapterFactory);
81:                         setDefaultFont(defaultFont);
82:                 }
83:
84:                 /**
85:                  * Construct an instance that wraps the given factory and uses the font of the viewer's control.
86:                  *
87:                  * @param adapterFactory an adapter factory that yield adapters that implement the various item label provider
88:                  * interfaces.
89:                  * @param viewer the viewer for which the control's font should be used.
90:                  */
91:                 public FontProvider(AdapterFactory adapterFactory, Viewer viewer) {
92:                         this(adapterFactory, viewer.getControl().getFont());
93:                 }
94:         }
95:
96:         /**
97:          * An extended version of the adapter factory label provider that also provides for colors.
98:          */
99:         public static class ColorProvider extends AdapterFactoryLabelProvider implements IColorProvider,
100:                 ITableColorProvider {
101:                 /**
102:                 *
103:                 */
104:                 private static final long serialVersionUID = 1L;
105:
106:                 /**
107:                  * Construct an instance that wraps the given factory and specifies the given default colors.
108:                  *
109:                  * @param adapterFactory an adapter factory that yield adapters that implement the various item label provider
110:                  * interfaces.
111:                  * @param defaultForeground the foreground color that will be used when no foreground color is specified.
112:                  * @param defaultBackground the background color that will be used when no background color is specified.
113:                  */
114:                 public ColorProvider(AdapterFactory adapterFactory, Color defaultForeground, Color defaultBackground) {
115:                         super(adapterFactory);
116:                         setDefaultForeground(defaultForeground);
117:                         setDefaultBackground(defaultBackground);
118:                 }
119:
120:                 /**
121:                  * Construct an instance that wraps the given factory and uses the colors of the viewer's control.
122:                  *
123:                  * @param adapterFactory an adapter factory that yield adapters that implement the various item label provider
124:                  * interfaces.
125:                  * @param viewer the viewer for which the control's color should be used.
126:                  */
127:                 public ColorProvider(AdapterFactory adapterFactory, Viewer viewer) {
128:                         this(adapterFactory, viewer.getControl().getForeground(), viewer.getControl().getBackground());
129:                 }
130:         }
131:
132:         /**
133:          * An extended version of the adapter factory label provider that also provides for fonts and colors.
134:          */
135:         public static class FontAndColorProvider extends AdapterFactoryLabelProvider implements IColorProvider,
136:                 IFontProvider, ITableColorProvider, ITableFontProvider {
137:                 /**
138:                 *
139:                 */
140:                 private static final long serialVersionUID = 1L;
141:
142:                 /**
143:                  * Construct an instance that wraps the given factory and specifies the given default font and colors.
144:                  *
145:                  * @param adapterFactory an adapter factory that yield adapters that implement the various item label provider
146:                  * interfaces.
147:                  * @param defaultFont the font that will be used when no font is specified.
148:                  * @param defaultForeground the foreground color that will be used when no foreground color is specified.
149:                  * @param defaultBackground the background color that will be used when no background color is specified.
150:                  */
151:                 public FontAndColorProvider(AdapterFactory adapterFactory, Font defaultFont, Color defaultForeground,
152:                         Color defaultBackground) {
153:                         super(adapterFactory);
154:                         setDefaultFont(defaultFont);
155:                         setDefaultForeground(defaultForeground);
156:                         setDefaultBackground(defaultBackground);
157:                 }
158:
159:                 /**
160:                  * Construct an instance that wraps the given factory and uses the font and colors of the viewer's control.
161:                  *
162:                  * @param adapterFactory an adapter factory that yield adapters that implement the various item label provider
163:                  * interfaces.
164:                  * @param viewer the viewer for which the control's font and color should be used.
165:                  */
166:                 public FontAndColorProvider(AdapterFactory adapterFactory, Viewer viewer) {
167:                         this(adapterFactory, viewer.getControl().getFont(), viewer.getControl().getForeground(), viewer
168:                                 .getControl().getBackground());
169:                 }
170:         }
171:
172:         /**
173:          * This keep track of the one factory we are using.
174:          * Use a {@link org.eclipse.emf.edit.provider.ComposedAdapterFactory} if adapters from more the one factory are
175:          * involved in the model.
176:          */
177:         protected AdapterFactory adapterFactory;
178:
179:         /**
180:          * The font that will be used when no font is specified.
181:          */
182:         protected Font defaultFont;
183:
184:         /**
185:          * The foreground color that will be used when no foreground color is specified.
186:          */
187:         protected Color defaultForeground;
188:
189:         /**
190:          * The background color that will be used when no background color is specified.
191:          */
192:         protected Color defaultBackground;
193:
194:         /**
195:          * This keeps track of the label provider listeners.
196:          */
197:         protected Collection<ILabelProviderListener> labelProviderListeners;
198:
199:         /**
200:          * Whether label update notifications are fired.
201:          */
202:         protected boolean isFireLabelUpdateNotifications;
203:
204:         private static final Class<?> IItemLabelProviderClass = IItemLabelProvider.class;
205:         private static final Class<?> ITableItemLabelProviderClass = ITableItemLabelProvider.class;
206:         private static final Class<?> IItemFontProviderClass = IItemFontProvider.class;
207:         private static final Class<?> IItemColorProviderClass = IItemColorProvider.class;
208:         private static final Class<?> ITableItemFontProviderClass = ITableItemFontProvider.class;
209:         private static final Class<?> ITableItemColorProviderClass = ITableItemColorProvider.class;
210:
211:         /**
212:          * Construct an instance that wraps the given factory.
213:          * If the adapter factory is an {@link IChangeNotifier},
214:          * a listener is added to it,
215:          * so it's important to call {@link #dispose()}.
216:          *
217:          * @param adapterFactory an adapter factory that yield adapters that implement the various item label provider
218:          * interfaces.
219:          */
220:         public AdapterFactoryLabelProvider(AdapterFactory adapterFactory) {
221:                 this.adapterFactory = adapterFactory;
222:•                if (adapterFactory instanceof IChangeNotifier) {
223:                         ((IChangeNotifier) adapterFactory).addListener(this);
224:                 }
225:
226:                 labelProviderListeners = new ArrayList<ILabelProviderListener>();
227:         }
228:
229:         /**
230:          * Return the wrapped AdapterFactory.
231:          */
232:         public AdapterFactory getAdapterFactory() {
233:                 return adapterFactory;
234:         }
235:
236:         /**
237:          * Set the wrapped AdapterFactory.
238:          * If the adapter factory is an {@link IChangeNotifier},
239:          * a listener is added to it,
240:          * so it's important to call {@link #dispose()}.
241:          */
242:         public void setAdapterFactory(AdapterFactory adapterFactory) {
243:•                if (this.adapterFactory instanceof IChangeNotifier) {
244:                         ((IChangeNotifier) this.adapterFactory).removeListener(this);
245:                 }
246:
247:•                if (adapterFactory instanceof IChangeNotifier) {
248:                         ((IChangeNotifier) adapterFactory).addListener(this);
249:                 }
250:
251:                 this.adapterFactory = adapterFactory;
252:         }
253:
254:         /**
255:          * Return the default font.
256:          */
257:         public Font getDefaultFont() {
258:                 return defaultFont;
259:         }
260:
261:         /**
262:          * Set the default font.
263:          */
264:         public void setDefaultFont(Font font) {
265:                 defaultFont = font;
266:         }
267:
268:         /**
269:          * Return the default foreground color.
270:          */
271:         public Color getDefaultForeground() {
272:                 return defaultForeground;
273:         }
274:
275:         /**
276:          * Set the default foreground color.
277:          */
278:         public void setDefaultForeground(Color color) {
279:                 defaultForeground = color;
280:         }
281:
282:         /**
283:          * Return the default background color.
284:          */
285:         public Color getDefaultBackground() {
286:                 return defaultBackground;
287:         }
288:
289:         /**
290:          * Set the default background color.
291:          */
292:         public void setDefaultBackground(Color color) {
293:                 defaultBackground = color;
294:         }
295:
296:         /**
297:          * Since we won't ever generate these notifications, we can just ignore this.
298:          */
299:         @Override
300:         public void addListener(ILabelProviderListener listener) {
301:                 labelProviderListeners.add(listener);
302:         }
303:
304:         /**
305:          * Since we won't ever add listeners, we can just ignore this.
306:          */
307:         @Override
308:         public void removeListener(ILabelProviderListener listener) {
309:                 labelProviderListeners.remove(listener);
310:         }
311:
312:         /**
313:          * This discards the content provider and removes this as a listener to the {@link #adapterFactory}.
314:          */
315:         @Override
316:         public void dispose() {
317:•                if (adapterFactory instanceof IChangeNotifier) {
318:                         ((IChangeNotifier) adapterFactory).removeListener(this);
319:                 }
320:         }
321:
322:         /**
323:          * This always returns true right now.
324:          */
325:         @Override
326:         public boolean isLabelProperty(Object object, String id) {
327:                 return true;
328:         }
329:
330:         /**
331:          * This implements {@link org.eclipse.jface.viewers.ILabelProvider}.getImage by forwarding it to an object that
332:          * implements {@link org.eclipse.emf.edit.provider.IItemLabelProvider#getImage IItemLabelProvider.getImage}
333:          */
334:         @Override
335:         public Image getImage(Object object) {
336:                 // Get the adapter from the factory.
337:                 //
338:                 final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory.adapt(object,
339:                         IItemLabelProviderClass);
340:
341:•                return itemLabelProvider != null ? getImageFromObject(itemLabelProvider.getImage(object))
342:                         : getDefaultImage(object);
343:         }
344:
345:         protected Image getDefaultImage(Object object) {
346:                 String image = "full/obj16/GenericValue"; //$NON-NLS-1$
347:•                if (object instanceof String) {
348:                         image = "full/obj16/TextValue"; //$NON-NLS-1$
349:•                } else if (object instanceof Boolean) {
350:                         image = "full/obj16/BooleanValue"; //$NON-NLS-1$
351:•                } else if (object instanceof Float || object instanceof Double) {
352:                         image = "full/obj16/RealValue"; //$NON-NLS-1$
353:•                } else if (object instanceof Integer || object instanceof Short || object instanceof Long
354:•                        || object instanceof Byte) {
355:                         image = "full/obj16/RealValue"; //$NON-NLS-1$
356:                 }
357:
358:                 return getImageFromObject(EMFEditPlugin.INSTANCE.getImage(image));
359:         }
360:
361:         protected Image getImageFromObject(Object object) {
362:                 return ExtendedImageRegistry.getInstance().getImage(object);
363:         }
364:
365:         /**
366:          * This implements {@link ILabelProvider}.getText by forwarding it to an object that implements
367:          * {@link IItemLabelProvider#getText IItemLabelProvider.getText}
368:          */
369:         @Override
370:         public String getText(Object object) {
371:                 // Get the adapter from the factory.
372:                 //
373:                 final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory.adapt(object,
374:                         IItemLabelProviderClass);
375:
376:•                return itemLabelProvider != null ? itemLabelProvider.getText(object) : object == null ? "" : //$NON-NLS-1$
377:                         object.toString();
378:         }
379:
380:         /**
381:          * This implements {@link org.eclipse.jface.viewers.IFontProvider}.getFont by forwarding it to an object that
382:          * implements {@link org.eclipse.emf.edit.provider.IItemFontProvider#getFont IItemFontProvider.getFont}
383:          */
384:         public Font getFont(Object object) {
385:                 // Get the adapter from the factory.
386:                 //
387:                 final IItemFontProvider itemFontProvider = (IItemFontProvider) adapterFactory.adapt(object,
388:                         IItemFontProviderClass);
389:
390:•                return itemFontProvider != null ? getFontFromObject(itemFontProvider.getFont(object)) : null;
391:         }
392:
393:         protected Font getFontFromObject(Object object) {
394:•                return object == null ? null : ExtendedFontRegistry.INSTANCE.getFont(defaultFont, object);
395:         }
396:
397:         /**
398:          * This implements {@link org.eclipse.jface.viewers.IColorProvider}.getForeground by forwarding it to an object that
399:          * implements {@link org.eclipse.emf.edit.provider.IItemColorProvider#getForeground
400:          * IItemColorProvider.getForeground}
401:          */
402:         public Color getForeground(Object object) {
403:                 // Get the adapter from the factory.
404:                 //
405:                 final IItemColorProvider itemColorProvider = (IItemColorProvider) adapterFactory.adapt(object,
406:                         IItemColorProviderClass);
407:
408:•                return itemColorProvider != null ? getColorFromObject(itemColorProvider.getForeground(object)) : null;
409:         }
410:
411:         /**
412:          * This implements {@link org.eclipse.jface.viewers.IColorProvider}.getBackground by forwarding it to an object that
413:          * implements {@link org.eclipse.emf.edit.provider.IItemColorProvider#getBackground
414:          * IItemColorProvider.getBackground}
415:          */
416:         public Color getBackground(Object object) {
417:                 // Get the adapter from the factory.
418:                 //
419:                 final IItemColorProvider itemColorProvider = (IItemColorProvider) adapterFactory.adapt(object,
420:                         IItemColorProviderClass);
421:
422:•                return itemColorProvider != null ? getColorFromObject(itemColorProvider.getBackground(object)) : null;
423:         }
424:
425:         protected Color getColorFromObject(Object object) {
426:•                return object == null ? null
427:                         : ExtendedColorRegistry.INSTANCE.getColor(defaultForeground, defaultBackground,
428:                                 object);
429:         }
430:
431:         /**
432:          * This implements {@link ITableLabelProvider}.getColumnImage by forwarding it to an object that implements
433:          * {@link ITableItemLabelProvider#getColumnImage ITableItemLabelProvider.getColumnImage} or failing that, an object
434:          * that implements {@link IItemLabelProvider#getImage IItemLabelProvider.getImage} where the columnIndex is ignored.
435:          */
436:         @Override
437:         public Image getColumnImage(Object object, int columnIndex) {
438:                 // Get the adapter from the factory.
439:                 //
440:                 final ITableItemLabelProvider tableItemLabelProvider = (ITableItemLabelProvider) adapterFactory.adapt(object,
441:                         ITableItemLabelProviderClass);
442:
443:                 // No image is a good default.
444:                 //
445:                 Image result = null;
446:
447:                 // Now we could check that the adapter implements interface ITableItemLabelProvider.
448:                 //
449:•                if (tableItemLabelProvider != null) {
450:                         // And delegate the call.
451:                         //
452:                         result = getImageFromObject(tableItemLabelProvider.getColumnImage(object, columnIndex));
453:                 }
454:                 // Otherwise, we could check that the adapter implements interface IItemLabelProvider.
455:                 //
456:                 else {
457:                         final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory.adapt(object,
458:                                 IItemLabelProviderClass);
459:•                        if (itemLabelProvider != null) {
460:                                 // And delegate the call.
461:                                 //
462:                                 result = getImageFromObject(itemLabelProvider.getImage(object));
463:                         }
464:                 }
465:
466:                 return result;
467:         }
468:
469:         /**
470:          * This implements {@link ITableLabelProvider}.getColumnText by forwarding it to an object that implements
471:          * {@link ITableItemLabelProvider#getColumnText ITableItemLabelProvider.getColumnText} or failing that, an object
472:          * that implements {@link IItemLabelProvider#getText IItemLabelProvider.getText} where the columnIndex are is
473:          * ignored.
474:          */
475:         @Override
476:         public String getColumnText(Object object, int columnIndex) {
477:                 // Get the adapter from the factory.
478:                 //
479:                 final ITableItemLabelProvider tableItemLabelProvider = (ITableItemLabelProvider) adapterFactory.adapt(object,
480:                         ITableItemLabelProviderClass);
481:
482:                 // Now we could check that the adapter implements interface ITableItemLabelProvider.
483:                 //
484:•                if (tableItemLabelProvider != null) {
485:                         // And delegate the call.
486:                         //
487:                         return tableItemLabelProvider.getColumnText(object, columnIndex);
488:                 }
489:                 // Otherwise, we could check that the adapter implements interface IItemLabelProvider.
490:                 //
491:                 else {
492:                         final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory.adapt(object,
493:                                 IItemLabelProviderClass);
494:•                        if (itemLabelProvider != null) {
495:                                 // And delegate the call.
496:                                 //
497:                                 return itemLabelProvider.getText(object);
498:                         }
499:                         // If there is a column object, just convert it to a string.
500:                         //
501:•                        else if (object != null) {
502:                                 return object.toString();
503:                         } else {
504:                                 return ""; //$NON-NLS-1$
505:                         }
506:                 }
507:         }
508:
509:         /**
510:          * This implements {@link ITableFontProvider}.getFont by forwarding it to an object that implements
511:          * {@link ITableItemFontProvider#getFont ITableItemFontProvider.getFont} or failing that, an object that implements
512:          * {@link IItemFontProvider#getFont IItemFontProvider.getFont} where the columnIndex is ignored.
513:          */
514:         public Font getFont(Object object, int columnIndex) {
515:                 // Get the adapter from the factory.
516:                 //
517:                 final ITableItemFontProvider tableItemFontProvider = (ITableItemFontProvider) adapterFactory.adapt(object,
518:                         ITableItemFontProviderClass);
519:
520:                 // No font is a good default.
521:                 //
522:                 Font result = null;
523:
524:                 // Now we could check that the adapter implements interface ITableItemFontProvider.
525:                 //
526:•                if (tableItemFontProvider != null) {
527:                         // And delegate the call.
528:                         //
529:                         result = getFontFromObject(tableItemFontProvider.getFont(object, columnIndex));
530:                 }
531:                 // Otherwise, we could check that the adapter implements interface IItemFontProvider.
532:                 //
533:                 else {
534:                         final IItemFontProvider itemFontProvider = (IItemFontProvider) adapterFactory.adapt(object,
535:                                 IItemFontProviderClass);
536:•                        if (itemFontProvider != null) {
537:                                 // And delegate the call.
538:                                 //
539:                                 result = getFontFromObject(itemFontProvider.getFont(object));
540:                         }
541:                 }
542:
543:                 return result;
544:         }
545:
546:         /**
547:          * This implements {@link ITableColorProvider}.getForeground by forwarding it to an object that implements
548:          * {@link ITableItemColorProvider#getForeground ITableItemColorProvider.getForeground} or failing that, an object
549:          * that implements {@link IItemColorProvider#getForeground IItemColorProvider.getForeground} where the columnIndex
550:          * is ignored.
551:          */
552:         public Color getForeground(Object object, int columnIndex) {
553:                 // Get the adapter from the factory.
554:                 //
555:                 final ITableItemColorProvider tableItemColorProvider = (ITableItemColorProvider) adapterFactory.adapt(object,
556:                         ITableItemColorProviderClass);
557:
558:                 // No color is a good default.
559:                 //
560:                 Color result = null;
561:
562:                 // Now we could check that the adapter implements interface ITableItemColorProvider.
563:                 //
564:•                if (tableItemColorProvider != null) {
565:                         // And delegate the call.
566:                         //
567:                         result = getColorFromObject(tableItemColorProvider.getForeground(object, columnIndex));
568:                 }
569:                 // Otherwise, we could check that the adapter implements interface IItemColorProvider.
570:                 //
571:                 else {
572:                         final IItemColorProvider itemColorProvider = (IItemColorProvider) adapterFactory.adapt(object,
573:                                 IItemColorProviderClass);
574:•                        if (itemColorProvider != null) {
575:                                 // And delegate the call.
576:                                 //
577:                                 result = getColorFromObject(itemColorProvider.getForeground(object));
578:                         }
579:                 }
580:
581:                 return result;
582:         }
583:
584:         /**
585:          * This implements {@link ITableColorProvider}.getBackground by forwarding it to an object that implements
586:          * {@link ITableItemColorProvider#getBackground ITableItemColorProvider.getBackground} or failing that, an object
587:          * that implements {@link IItemColorProvider#getBackground IItemColorProvider.getBackground} where the columnIndex
588:          * is ignored.
589:          */
590:         public Color getBackground(Object object, int columnIndex) {
591:                 // Get the adapter from the factory.
592:                 //
593:                 final ITableItemColorProvider tableItemColorProvider = (ITableItemColorProvider) adapterFactory.adapt(object,
594:                         ITableItemColorProviderClass);
595:
596:                 // No color is a good default.
597:                 //
598:                 Color result = null;
599:
600:                 // Now we could check that the adapter implements interface ITableItemColorProvider.
601:                 //
602:•                if (tableItemColorProvider != null) {
603:                         // And delegate the call.
604:                         //
605:                         result = getColorFromObject(tableItemColorProvider.getBackground(object, columnIndex));
606:                 }
607:                 // Otherwise, we could check that the adapter implements interface IItemColorProvider.
608:                 //
609:                 else {
610:                         final IItemColorProvider itemColorProvider = (IItemColorProvider) adapterFactory.adapt(object,
611:                                 IItemColorProviderClass);
612:•                        if (itemColorProvider != null) {
613:                                 // And delegate the call.
614:                                 //
615:                                 result = getColorFromObject(itemColorProvider.getBackground(object));
616:                         }
617:                 }
618:
619:                 return result;
620:         }
621:
622:         /**
623:          * Returns whether this label provider fires
624:          * {@link ILabelProviderListener#labelProviderChanged(LabelProviderChangedEvent) update notifications}.
625:          */
626:         public boolean isFireLabelUpdateNotifications() {
627:                 return isFireLabelUpdateNotifications;
628:         }
629:
630:         /**
631:          * Sets whether this label provider fires
632:          * {@link ILabelProviderListener#labelProviderChanged(LabelProviderChangedEvent) update notifications}.
633:          */
634:         public void setFireLabelUpdateNotifications(boolean isFireLabelUpdateNotifications) {
635:                 this.isFireLabelUpdateNotifications = isFireLabelUpdateNotifications;
636:         }
637:
638:         public void fireLabelProviderChanged() {
639:•                for (final ILabelProviderListener labelProviderListener : labelProviderListeners) {
640:                         labelProviderListener.labelProviderChanged(new LabelProviderChangedEvent(this));
641:                 }
642:         }
643:
644:         @Override
645:         public void notifyChanged(Notification notification) {
646:•                if (isFireLabelUpdateNotifications()) {
647:•                        if (!(notification instanceof IViewerNotification)
648:•                                || ((IViewerNotification) notification).isLabelUpdate()) {
649:•                                for (final ILabelProviderListener labelProviderListener : labelProviderListeners) {
650:                                         labelProviderListener.labelProviderChanged(new LabelProviderChangedEvent(this, notification
651:                                                 .getNotifier()));
652:                                 }
653:                         }
654:                 }
655:         }
656: }