/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package net.sourceforge.phpdt.internal.ui.viewsupport; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IFileEditorMapping; import org.eclipse.ui.PlatformUI; /** * Standard label provider for IStorage objects. Use this class when you want to * present IStorage objects in a viewer. */ public class StorageLabelProvider extends LabelProvider { private IEditorRegistry fEditorRegistry = PlatformUI.getWorkbench() .getEditorRegistry(); private Map fJarImageMap = new HashMap(10); private Image fDefaultImage; /* * (non-Javadoc) * * @see ILabelProvider#getImage */ public Image getImage(Object element) { if (element instanceof IStorage) return getImageForJarEntry((IStorage) element); return super.getImage(element); } /* * (non-Javadoc) * * @see ILabelProvider#getText */ public String getText(Object element) { if (element instanceof IStorage) return ((IStorage) element).getName(); return super.getText(element); } /* * (non-Javadoc) * * @see IBaseLabelProvider#dispose */ public void dispose() { if (fJarImageMap != null) { Iterator each = fJarImageMap.values().iterator(); while (each.hasNext()) { Image image = (Image) each.next(); image.dispose(); } fJarImageMap = null; } if (fDefaultImage != null) fDefaultImage.dispose(); fDefaultImage = null; } /* * Gets and caches an image for a JarEntryFile. The image for a JarEntryFile * is retrieved from the EditorRegistry. */ private Image getImageForJarEntry(IStorage element) { if (fJarImageMap == null) return getDefaultImage(); if (element == null || element.getName() == null) return getDefaultImage(); // Try to find icon for full name String name = element.getName(); Image image = (Image) fJarImageMap.get(name); if (image != null) return image; IFileEditorMapping[] mappings = fEditorRegistry.getFileEditorMappings(); int i = 0; while (i < mappings.length) { if (mappings[i].getLabel().equals(name)) break; i++; } String key = name; if (i == mappings.length) { // Try to find icon for extension IPath path = element.getFullPath(); if (path == null) return getDefaultImage(); key = path.getFileExtension(); if (key == null) return getDefaultImage(); image = (Image) fJarImageMap.get(key); if (image != null) return image; } // Get the image from the editor registry ImageDescriptor desc = fEditorRegistry.getImageDescriptor(name); image = desc.createImage(); fJarImageMap.put(key, image); return image; } private Image getDefaultImage() { if (fDefaultImage == null) fDefaultImage = fEditorRegistry.getImageDescriptor((String) null) .createImage(); return fDefaultImage; } }