]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - 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
diff --git a/case-study/jdt-before/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java b/case-study/jdt-before/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java
new file mode 100644 (file)
index 0000000..72883b0
--- /dev/null
@@ -0,0 +1,286 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import java.util.ArrayList;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.SafeRunner;
+
+import org.eclipse.core.resources.IStorage;
+
+import org.eclipse.jface.util.SafeRunnable;
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.jface.viewers.StyledCellLabelProvider;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
+
+import org.eclipse.jdt.ui.JavaElementLabels;
+
+public class JavaUILabelProvider implements ILabelProvider, IColorProvider, IStyledLabelProvider {
+
+       protected ListenerList fListeners = new ListenerList();
+
+       protected JavaElementImageProvider fImageLabelProvider;
+       protected StorageLabelProvider fStorageLabelProvider;
+
+       private ArrayList<ILabelDecorator> fLabelDecorators;
+
+       private int fImageFlags;
+       private long fTextFlags;
+
+       /**
+        * Creates a new label provider with default flags.
+        */
+       public JavaUILabelProvider() {
+               this(JavaElementLabels.ALL_DEFAULT, JavaElementImageProvider.OVERLAY_ICONS);
+       }
+
+       /**
+        * @param textFlags Flags defined in <code>JavaElementLabels</code>.
+        * @param imageFlags Flags defined in <code>JavaElementImageProvider</code>.
+        */
+       public JavaUILabelProvider(long textFlags, int imageFlags) {
+               fImageLabelProvider= new JavaElementImageProvider();
+               fLabelDecorators= null;
+
+               fStorageLabelProvider= new StorageLabelProvider();
+               fImageFlags= imageFlags;
+               fTextFlags= textFlags;
+       }
+
+       /**
+        * Adds a decorator to the label provider
+        * @param decorator the decorator to add
+        */
+       public void addLabelDecorator(ILabelDecorator decorator) {
+               if (fLabelDecorators == null) {
+                       fLabelDecorators= new ArrayList<ILabelDecorator>(2);
+               }
+               fLabelDecorators.add(decorator);
+       }
+
+       /**
+        * Sets the textFlags.
+        * @param textFlags The textFlags to set
+        */
+       public final void setTextFlags(long textFlags) {
+               fTextFlags= textFlags;
+       }
+
+       /**
+        * Sets the imageFlags
+        * @param imageFlags The imageFlags to set
+        */
+       public final void setImageFlags(int imageFlags) {
+               fImageFlags= imageFlags;
+       }
+
+       /**
+        * Gets the image flags.
+        * Can be overwritten by super classes.
+        * @return Returns a int
+        */
+       public final int getImageFlags() {
+               return fImageFlags;
+       }
+
+       /**
+        * Gets the text flags.
+        * @return Returns a int
+        */
+       public final long getTextFlags() {
+               return fTextFlags;
+       }
+
+       /**
+        * Evaluates the image flags for a element.
+        * Can be overwritten by super classes.
+        * @param element the element to compute the image flags for
+        * @return Returns a int
+        */
+       protected int evaluateImageFlags(Object element) {
+               return getImageFlags();
+       }
+
+       /**
+        * Evaluates the text flags for a element. Can be overwritten by super classes.
+        * @param element the element to compute the text flags for
+        * @return Returns a int
+        */
+       protected long evaluateTextFlags(Object element) {
+               return getTextFlags();
+       }
+
+       protected Image decorateImage(Image image, Object element) {
+               if (fLabelDecorators != null && image != null) {
+                       for (int i= 0; i < fLabelDecorators.size(); i++) {
+                               ILabelDecorator decorator= fLabelDecorators.get(i);
+                               image= decorator.decorateImage(image, element);
+                       }
+               }
+               return image;
+       }
+
+       /* (non-Javadoc)
+        * @see ILabelProvider#getImage
+        */
+       public Image getImage(Object element) {
+               Image result= fImageLabelProvider.getImageLabel(element, evaluateImageFlags(element));
+               if (result == null && (element instanceof IStorage)) {
+                       result= fStorageLabelProvider.getImage(element);
+               }
+
+               return decorateImage(result, element);
+       }
+
+       protected String decorateText(String text, Object element) {
+               if (fLabelDecorators != null && text.length() > 0) {
+                       for (int i= 0; i < fLabelDecorators.size(); i++) {
+                               ILabelDecorator decorator= fLabelDecorators.get(i);
+                               String decorated= decorator.decorateText(text, element);
+                               if (decorated != null) {
+                                       text= decorated;
+                               }
+                       }
+               }
+               return text;
+       }
+
+
+       /* (non-Javadoc)
+        * @see ILabelProvider#getText
+        */
+       public String getText(Object element) {
+               String result= JavaElementLabels.getTextLabel(element, evaluateTextFlags(element));
+               if (result.length() == 0 && (element instanceof IStorage)) {
+                       result= fStorageLabelProvider.getText(element);
+               }
+               return decorateText(result, element);
+       }
+
+       public StyledString getStyledText(Object element) {
+               StyledString string= JavaElementLabels.getStyledTextLabel(element, (evaluateTextFlags(element) | JavaElementLabels.COLORIZE));
+               if (string.length() == 0 && (element instanceof IStorage)) {
+                       string= new StyledString(fStorageLabelProvider.getText(element));
+               }
+               String decorated= decorateText(string.getString(), element);
+               if (decorated != null) {
+                       return StyledCellLabelProvider.styleDecoratedString(decorated, StyledString.DECORATIONS_STYLER, string);
+               }
+               return string;
+       }
+
+       /* (non-Javadoc)
+        * @see IBaseLabelProvider#dispose
+        */
+       public void dispose() {
+               if (fLabelDecorators != null) {
+                       for (int i= 0; i < fLabelDecorators.size(); i++) {
+                               ILabelDecorator decorator= fLabelDecorators.get(i);
+                               decorator.dispose();
+                       }
+                       fLabelDecorators= null;
+               }
+               fStorageLabelProvider.dispose();
+               fImageLabelProvider.dispose();
+       }
+
+       /* (non-Javadoc)
+        * @see IBaseLabelProvider#addListener(ILabelProviderListener)
+        */
+       public void addListener(ILabelProviderListener listener) {
+               if (fLabelDecorators != null) {
+                       for (int i= 0; i < fLabelDecorators.size(); i++) {
+                               ILabelDecorator decorator= fLabelDecorators.get(i);
+                               decorator.addListener(listener);
+                       }
+               }
+               fListeners.add(listener);
+       }
+
+       /* (non-Javadoc)
+        * @see IBaseLabelProvider#isLabelProperty(Object, String)
+        */
+       public boolean isLabelProperty(Object element, String property) {
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see IBaseLabelProvider#removeListener(ILabelProviderListener)
+        */
+       public void removeListener(ILabelProviderListener listener) {
+               if (fLabelDecorators != null) {
+                       for (int i= 0; i < fLabelDecorators.size(); i++) {
+                               ILabelDecorator decorator= fLabelDecorators.get(i);
+                               decorator.removeListener(listener);
+                       }
+               }
+               fListeners.remove(listener);
+       }
+
+       public static ILabelDecorator[] getDecorators(boolean errortick, ILabelDecorator extra) {
+               if (errortick) {
+                       if (extra == null) {
+                               return new ILabelDecorator[] {};
+                       } else {
+                               return new ILabelDecorator[] { extra };
+                       }
+               }
+               if (extra != null) {
+                       return new ILabelDecorator[] { extra };
+               }
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
+        */
+       public Color getForeground(Object element) {
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
+        */
+       public Color getBackground(Object element) {
+               return null;
+       }
+
+    /**
+     * Fires a label provider changed event to all registered listeners
+     * Only listeners registered at the time this method is called are notified.
+     *
+     * @param event a label provider changed event
+     *
+     * @see ILabelProviderListener#labelProviderChanged
+     */
+    protected void fireLabelProviderChanged(final LabelProviderChangedEvent event) {
+        Object[] listeners = fListeners.getListeners();
+        for (int i = 0; i < listeners.length; ++i) {
+            final ILabelProviderListener l = (ILabelProviderListener) listeners[i];
+            SafeRunner.run(new SafeRunnable() {
+                public void run() {
+                    l.labelProviderChanged(event);
+                }
+            });
+        }
+    }
+
+
+}