--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+}