content: package tern.eclipse.swt.samples;
  
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileNotFoundException;
  import java.util.ArrayList;
  import java.util.List;
  
  import org.eclipse.jface.viewers.ILabelProvider;
  import org.eclipse.jface.viewers.ILabelProviderListener;
  import org.eclipse.jface.viewers.LabelProviderChangedEvent;
  import org.eclipse.swt.graphics.Image;
  
  /**
   * This class provides the labels for the file tree
   */
  
  public class FileTreeLabelProvider implements ILabelProvider {
  	// The listeners
  	private List listeners;
  
  	// Images for tree nodes
  	private Image file;
  
  	private Image dir;
  
  	// Label provider state: preserve case of file names/directories
  	boolean preserveCase;
  
  	/**
  	 * Constructs a FileTreeLabelProvider
  	 */
  	public FileTreeLabelProvider() {
  		// Create the list to hold the listeners
  		listeners = new ArrayList();
  		preserveCase = true;
  		// Create the images
  		try {
  			file = new Image(null, new FileInputStream("images/file.gif"));
  			dir = new Image(null, new FileInputStream("images/directory.gif"));
  		} catch (FileNotFoundException e) {
  			// Swallow it; we'll do without images
  		}
  	}
  
  	/**
  	 * Sets the preserve case attribute
  	 * 
  	 * @param preserveCase
  	 *            the preserve case attribute
  	 */
  	public void setPreserveCase(boolean preserveCase) {
  		this.preserveCase = preserveCase;
  
  		// Since this attribute affects how the labels are computed,
  		// notify all the listeners of the change.
  		LabelProviderChangedEvent event = new LabelProviderChangedEvent(this);
  		for (int i = 0, n = listeners.size(); i < n; i++) {
  			ILabelProviderListener ilpl = (ILabelProviderListener) listeners
  					.get(i);
  			ilpl.labelProviderChanged(event);
  		}
  	}
  
  	/**
  	 * Gets the image to display for a node in the tree
  	 * 
  	 * @param arg0
  	 *            the node
  	 * @return Image
  	 */
  	public Image getImage(Object arg0) {
  		// If the node represents a directory, return the directory image.
  		// Otherwise, return the file image.
  		return ((File) arg0).isDirectory() ? dir : file;
  	}
  
  	/**
  	 * Gets the text to display for a node in the tree
  	 * 
  	 * @param arg0
  	 *            the node
  	 * @return String
  	 */
  	public String getText(Object arg0) {
  		// Get the name of the file
  		String text = ((File) arg0).getName();
  
  		// If name is blank, get the path
  		if (text.length() == 0) {
  			text = ((File) arg0).getPath();
  		}
  
  		// Check the case settings before returning the text
  		return preserveCase ? text : text.toUpperCase();
  	}
  
  	/**
  	 * Adds a listener to this label provider
  	 * 
  	 * @param arg0
  	 *            the listener
  	 */
  	public void addListener(ILabelProviderListener arg0) {
  		listeners.add(arg0);
  	}
  
  	/**
  	 * Called when this LabelProvider is being disposed
  	 */
  	public void dispose() {
  		// Dispose the images
  		if (dir != null)
  			dir.dispose();
  		if (file != null)
  			file.dispose();
  	}
  
  	/**
  	 * Returns whether changes to the specified property on the specified
  	 * element would affect the label for the element
  	 * 
  	 * @param arg0
  	 *            the element
  	 * @param arg1
  	 *            the property
  	 * @return boolean
  	 */
  	public boolean isLabelProperty(Object arg0, String arg1) {
  		return false;
  	}
  
  	/**
  	 * Removes the listener
  	 * 
  	 * @param arg0
  	 *            the listener to remove
  	 */
  	public void removeListener(ILabelProviderListener arg0) {
  		listeners.remove(arg0);
  	}
  }
  