]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-before/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui / org / eclipse / jdt / internal / ui / viewsupport / JavaUILabelProvider.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2011 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.viewsupport;
12
13 import java.util.ArrayList;
14
15 import org.eclipse.swt.graphics.Color;
16 import org.eclipse.swt.graphics.Image;
17
18 import org.eclipse.core.runtime.ListenerList;
19 import org.eclipse.core.runtime.SafeRunner;
20
21 import org.eclipse.core.resources.IStorage;
22
23 import org.eclipse.jface.util.SafeRunnable;
24 import org.eclipse.jface.viewers.IColorProvider;
25 import org.eclipse.jface.viewers.ILabelDecorator;
26 import org.eclipse.jface.viewers.ILabelProvider;
27 import org.eclipse.jface.viewers.ILabelProviderListener;
28 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
29 import org.eclipse.jface.viewers.StyledCellLabelProvider;
30 import org.eclipse.jface.viewers.StyledString;
31 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
32
33 import org.eclipse.jdt.ui.JavaElementLabels;
34
35 public class JavaUILabelProvider implements ILabelProvider, IColorProvider, IStyledLabelProvider {
36
37         protected ListenerList fListeners = new ListenerList();
38
39         protected JavaElementImageProvider fImageLabelProvider;
40         protected StorageLabelProvider fStorageLabelProvider;
41
42         private ArrayList<ILabelDecorator> fLabelDecorators;
43
44         private int fImageFlags;
45         private long fTextFlags;
46
47         /**
48          * Creates a new label provider with default flags.
49          */
50         public JavaUILabelProvider() {
51                 this(JavaElementLabels.ALL_DEFAULT, JavaElementImageProvider.OVERLAY_ICONS);
52         }
53
54         /**
55          * @param textFlags Flags defined in <code>JavaElementLabels</code>.
56          * @param imageFlags Flags defined in <code>JavaElementImageProvider</code>.
57          */
58         public JavaUILabelProvider(long textFlags, int imageFlags) {
59                 fImageLabelProvider= new JavaElementImageProvider();
60                 fLabelDecorators= null;
61
62                 fStorageLabelProvider= new StorageLabelProvider();
63                 fImageFlags= imageFlags;
64                 fTextFlags= textFlags;
65         }
66
67         /**
68          * Adds a decorator to the label provider
69          * @param decorator the decorator to add
70          */
71         public void addLabelDecorator(ILabelDecorator decorator) {
72                 if (fLabelDecorators == null) {
73                         fLabelDecorators= new ArrayList<ILabelDecorator>(2);
74                 }
75                 fLabelDecorators.add(decorator);
76         }
77
78         /**
79          * Sets the textFlags.
80          * @param textFlags The textFlags to set
81          */
82         public final void setTextFlags(long textFlags) {
83                 fTextFlags= textFlags;
84         }
85
86         /**
87          * Sets the imageFlags
88          * @param imageFlags The imageFlags to set
89          */
90         public final void setImageFlags(int imageFlags) {
91                 fImageFlags= imageFlags;
92         }
93
94         /**
95          * Gets the image flags.
96          * Can be overwritten by super classes.
97          * @return Returns a int
98          */
99         public final int getImageFlags() {
100                 return fImageFlags;
101         }
102
103         /**
104          * Gets the text flags.
105          * @return Returns a int
106          */
107         public final long getTextFlags() {
108                 return fTextFlags;
109         }
110
111         /**
112          * Evaluates the image flags for a element.
113          * Can be overwritten by super classes.
114          * @param element the element to compute the image flags for
115          * @return Returns a int
116          */
117         protected int evaluateImageFlags(Object element) {
118                 return getImageFlags();
119         }
120
121         /**
122          * Evaluates the text flags for a element. Can be overwritten by super classes.
123          * @param element the element to compute the text flags for
124          * @return Returns a int
125          */
126         protected long evaluateTextFlags(Object element) {
127                 return getTextFlags();
128         }
129
130         protected Image decorateImage(Image image, Object element) {
131                 if (fLabelDecorators != null && image != null) {
132                         for (int i= 0; i < fLabelDecorators.size(); i++) {
133                                 ILabelDecorator decorator= fLabelDecorators.get(i);
134                                 image= decorator.decorateImage(image, element);
135                         }
136                 }
137                 return image;
138         }
139
140         /* (non-Javadoc)
141          * @see ILabelProvider#getImage
142          */
143         public Image getImage(Object element) {
144                 Image result= fImageLabelProvider.getImageLabel(element, evaluateImageFlags(element));
145                 if (result == null && (element instanceof IStorage)) {
146                         result= fStorageLabelProvider.getImage(element);
147                 }
148
149                 return decorateImage(result, element);
150         }
151
152         protected String decorateText(String text, Object element) {
153                 if (fLabelDecorators != null && text.length() > 0) {
154                         for (int i= 0; i < fLabelDecorators.size(); i++) {
155                                 ILabelDecorator decorator= fLabelDecorators.get(i);
156                                 String decorated= decorator.decorateText(text, element);
157                                 if (decorated != null) {
158                                         text= decorated;
159                                 }
160                         }
161                 }
162                 return text;
163         }
164
165
166         /* (non-Javadoc)
167          * @see ILabelProvider#getText
168          */
169         public String getText(Object element) {
170                 String result= JavaElementLabels.getTextLabel(element, evaluateTextFlags(element));
171                 if (result.length() == 0 && (element instanceof IStorage)) {
172                         result= fStorageLabelProvider.getText(element);
173                 }
174                 return decorateText(result, element);
175         }
176
177         public StyledString getStyledText(Object element) {
178                 StyledString string= JavaElementLabels.getStyledTextLabel(element, (evaluateTextFlags(element) | JavaElementLabels.COLORIZE));
179                 if (string.length() == 0 && (element instanceof IStorage)) {
180                         string= new StyledString(fStorageLabelProvider.getText(element));
181                 }
182                 String decorated= decorateText(string.getString(), element);
183                 if (decorated != null) {
184                         return StyledCellLabelProvider.styleDecoratedString(decorated, StyledString.DECORATIONS_STYLER, string);
185                 }
186                 return string;
187         }
188
189         /* (non-Javadoc)
190          * @see IBaseLabelProvider#dispose
191          */
192         public void dispose() {
193                 if (fLabelDecorators != null) {
194                         for (int i= 0; i < fLabelDecorators.size(); i++) {
195                                 ILabelDecorator decorator= fLabelDecorators.get(i);
196                                 decorator.dispose();
197                         }
198                         fLabelDecorators= null;
199                 }
200                 fStorageLabelProvider.dispose();
201                 fImageLabelProvider.dispose();
202         }
203
204         /* (non-Javadoc)
205          * @see IBaseLabelProvider#addListener(ILabelProviderListener)
206          */
207         public void addListener(ILabelProviderListener listener) {
208                 if (fLabelDecorators != null) {
209                         for (int i= 0; i < fLabelDecorators.size(); i++) {
210                                 ILabelDecorator decorator= fLabelDecorators.get(i);
211                                 decorator.addListener(listener);
212                         }
213                 }
214                 fListeners.add(listener);
215         }
216
217         /* (non-Javadoc)
218          * @see IBaseLabelProvider#isLabelProperty(Object, String)
219          */
220         public boolean isLabelProperty(Object element, String property) {
221                 return true;
222         }
223
224         /* (non-Javadoc)
225          * @see IBaseLabelProvider#removeListener(ILabelProviderListener)
226          */
227         public void removeListener(ILabelProviderListener listener) {
228                 if (fLabelDecorators != null) {
229                         for (int i= 0; i < fLabelDecorators.size(); i++) {
230                                 ILabelDecorator decorator= fLabelDecorators.get(i);
231                                 decorator.removeListener(listener);
232                         }
233                 }
234                 fListeners.remove(listener);
235         }
236
237         public static ILabelDecorator[] getDecorators(boolean errortick, ILabelDecorator extra) {
238                 if (errortick) {
239                         if (extra == null) {
240                                 return new ILabelDecorator[] {};
241                         } else {
242                                 return new ILabelDecorator[] { extra };
243                         }
244                 }
245                 if (extra != null) {
246                         return new ILabelDecorator[] { extra };
247                 }
248                 return null;
249         }
250
251         /* (non-Javadoc)
252          * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
253          */
254         public Color getForeground(Object element) {
255                 return null;
256         }
257
258         /* (non-Javadoc)
259          * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
260          */
261         public Color getBackground(Object element) {
262                 return null;
263         }
264
265     /**
266      * Fires a label provider changed event to all registered listeners
267      * Only listeners registered at the time this method is called are notified.
268      *
269      * @param event a label provider changed event
270      *
271      * @see ILabelProviderListener#labelProviderChanged
272      */
273     protected void fireLabelProviderChanged(final LabelProviderChangedEvent event) {
274         Object[] listeners = fListeners.getListeners();
275         for (int i = 0; i < listeners.length; ++i) {
276             final ILabelProviderListener l = (ILabelProviderListener) listeners[i];
277             SafeRunner.run(new SafeRunnable() {
278                 public void run() {
279                     l.labelProviderChanged(event);
280                 }
281             });
282         }
283     }
284
285
286 }