]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDescriptorRegistry.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / viewsupport / ImageDescriptorRegistry.java
diff --git a/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDescriptorRegistry.java b/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDescriptorRegistry.java
new file mode 100644 (file)
index 0000000..f33e2f3
--- /dev/null
@@ -0,0 +1,150 @@
+/*******************************************************************************
+ * 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.HashMap;
+import java.util.Iterator;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.DecorationOverlayIcon;
+import org.eclipse.jface.viewers.IDecoration;
+
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.jdt.core.IAccessRule;
+
+import org.eclipse.jdt.ui.ISharedImages;
+import org.eclipse.jdt.ui.JavaElementImageDescriptor;
+import org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration;
+
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.AccessRulesLabelProvider;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElementAttribute;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListLabelProvider;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPUserLibraryElement;
+
+/**
+ * A registry that maps <code>ImageDescriptors</code> to <code>Image</code>.
+ */
+public class ImageDescriptorRegistry {
+
+       private HashMap<ImageDescriptor, Image> fRegistry= new HashMap<ImageDescriptor, Image>(10);
+       private Display fDisplay;
+
+       /**
+        * Creates a new image descriptor registry for the given display. All images
+        * managed by this registry will be disposed when the display gets disposed.
+        */
+       public ImageDescriptorRegistry() {
+               fDisplay= PlatformUI.getWorkbench().getDisplay();
+               Assert.isNotNull(fDisplay);
+               hookDisplay();
+       }
+
+       /**
+        * Returns the image associated with the given image descriptor.
+        *
+        * @param descriptor the image descriptor for which the registry manages an image,
+        *  or <code>null</code> for a missing image descriptor
+        * @return the image associated with the image descriptor or <code>null</code>
+        *  if the image descriptor can't create the requested image.
+        */
+       public Image get(ImageDescriptor descriptor) {
+               if (descriptor == null)
+                       descriptor= ImageDescriptor.getMissingImageDescriptor();
+
+               Image result= fRegistry.get(descriptor);
+               if (result != null)
+                       return result;
+
+               result= descriptor.createImage();
+               if (result != null)
+                       fRegistry.put(descriptor, result);
+               return result;
+       }
+
+       /**
+        * Disposes all images managed by this registry.
+        */
+       public void dispose() {
+               for (Iterator<Image> iter= fRegistry.values().iterator(); iter.hasNext(); ) {
+                       Image image= iter.next();
+                       image.dispose();
+               }
+               fRegistry.clear();
+       }
+
+       private void hookDisplay() {
+               fDisplay.disposeExec(new Runnable() {
+                       public void run() {
+                               dispose();
+                       }
+               });
+       }
+
+       public Image generated_5429915211795607587(CPListLabelProvider cplistlabelprovider, Object element) {
+               if (element instanceof CPListElement) {
+                       CPListElement cpentry= (CPListElement) element;
+                       ImageDescriptor imageDescriptor= cplistlabelprovider.getCPListElementBaseImage(cpentry);
+                       if (imageDescriptor != null) {
+                               if (cpentry.isMissing() || cpentry.hasMissingChildren()) {
+                                       imageDescriptor= new JavaElementImageDescriptor(imageDescriptor, JavaElementImageDescriptor.ERROR, JavaElementImageProvider.SMALL_SIZE);
+                               }
+                               return get(imageDescriptor);
+                       }
+               } else if (element instanceof CPListElementAttribute) {
+                       CPListElementAttribute attribute= (CPListElementAttribute) element;
+                       String key= (attribute).getKey();
+                       if (key.equals(CPListElement.SOURCEATTACHMENT)) {
+                               return get(JavaPluginImages.DESC_OBJS_SOURCE_ATTACH_ATTRIB);
+                       } else if (key.equals(CPListElement.OUTPUT)) {
+                               return get(JavaPluginImages.DESC_OBJS_OUTPUT_FOLDER_ATTRIB);
+                       } else if (key.equals(CPListElement.EXCLUSION)) {
+                               return get(JavaPluginImages.DESC_OBJS_EXCLUSION_FILTER_ATTRIB);
+                       } else if (key.equals(CPListElement.INCLUSION)) {
+                               return get(JavaPluginImages.DESC_OBJS_INCLUSION_FILTER_ATTRIB);
+                       } else if (key.equals(CPListElement.ACCESSRULES)) {
+                               return get(JavaPluginImages.DESC_OBJS_ACCESSRULES_ATTRIB);
+                       } else if (key.equals(CPListElement.IGNORE_OPTIONAL_PROBLEMS)) {
+                               Image image= get(cplistlabelprovider.getCPListElementBaseImage(attribute.getParent()));
+                               if (image != null) {
+                                       ImageDescriptor overlay= JavaPluginImages.DESC_OVR_IGNORE_OPTIONAL_PROBLEMS;
+                                       ImageDescriptor imageDescriptor= new DecorationOverlayIcon(image, overlay, IDecoration.BOTTOM_LEFT);
+                                       return get(imageDescriptor);
+                               }
+                       } else {
+                               ClasspathAttributeConfiguration config= cplistlabelprovider.fAttributeDescriptors.get(key);
+                               if (config != null) {
+                                       return get(config.getImageDescriptor(attribute.getClasspathAttributeAccess()));
+                               }
+                       }
+                       return  cplistlabelprovider.fSharedImages.getImage(ISharedImages.IMG_OBJS_CLASSPATH_VAR_ENTRY);
+               } else if (element instanceof CPUserLibraryElement) {
+                       if (((CPUserLibraryElement) element).hasMissingChildren()) {
+                               ImageDescriptor descriptor= cplistlabelprovider.fSharedImages.getImageDescriptor(ISharedImages.IMG_OBJS_LIBRARY);
+                               if (descriptor != null) {
+                                       return get(new JavaElementImageDescriptor(descriptor, JavaElementImageDescriptor.ERROR, JavaElementImageProvider.SMALL_SIZE));
+                               }
+                       }
+                       return cplistlabelprovider.fSharedImages.getImage(ISharedImages.IMG_OBJS_LIBRARY);
+               } else if (element instanceof IAccessRule) {
+                       IAccessRule rule= (IAccessRule) element;
+                       return AccessRulesLabelProvider.getResolutionImage(rule.getKind());
+               }
+               return null;
+       }
+}