001    /*
002     * file FolderLabelProvider.java
003     * 
004     * Licensed Materials - Property of IBM
005     * Restricted Materials of IBM - you are allowed to copy, modify and 
006     * redistribute this file as part of any program that interfaces with 
007     * IBM Rational CM API.
008     *
009     * com.ibm.rational.teamapi.scout.FolderLabelProvider
010     *
011     * © Copyright IBM Corporation 2004, 2008.  All Rights Reserved.
012     * Note to U.S. Government Users Restricted Rights:  Use, duplication or 
013     * disclosure restricted by GSA ADP  Schedule Contract with IBM Corp.
014     */
015    
016    package com.ibm.rational.teamapi.scout;
017    
018    import java.util.HashMap;
019    import java.util.Iterator;
020    import java.util.Map;
021    
022    import org.eclipse.jface.resource.ImageDescriptor;
023    import org.eclipse.jface.viewers.LabelProvider;
024    import org.eclipse.swt.graphics.Image;
025    
026    /**
027     * A LabelProvider for ProxyElememts.
028     */
029    public class FolderLabelProvider extends LabelProvider {        
030            private Map<ImageDescriptor, Image> imageCache = 
031            new HashMap<ImageDescriptor, Image>(11);
032            
033            /*
034             * @see ILabelProvider#getImage(Object)
035             */
036            public Image getImage(Object element) {
037                    ImageDescriptor descriptor = null;
038                    if (((ProxyElement)element).couldBeFolder()) {
039                            descriptor = ScoutPlugin.getImageDescriptor("folder.gif");
040                    } else
041                            descriptor = ScoutPlugin.getImageDescriptor("resource.gif");
042    
043                    //obtain the cached image corresponding to the descriptor
044                    Image image = (Image)imageCache.get(descriptor);
045                    if (image == null) {
046                            image = descriptor.createImage();
047                            imageCache.put(descriptor, image);
048                    }
049                    return image;
050            }
051    
052            /*
053             * @see ILabelProvider#getText(Object)
054             */
055            public String getText(Object element) 
056        {
057            return ((ProxyElement)element).getText();
058            }
059    
060        /**
061         * Dispose of the images in the cache.
062         */
063            public void dispose() {
064                    for (Iterator i = imageCache.values().iterator(); i.hasNext();) {
065                            ((Image) i.next()).dispose();
066                    }
067                    imageCache.clear();
068            }
069    }