import java.awt.*;
import java.awt.datatransfer.*;

/**
 * A wrapper for an Image that provides all of the functionality
 * require by the Transferable interface.
 *
 * @author Prof. David Bernstein, James Madison University
 * @version Works with a "standard" TransferHandler
 */
public class ImageSelection implements Transferable
{
  private Image    image;

  private  DataFlavor JVM_LOCAL_OBJECT;
  
  /**
   * Construct a TransferableImage.
   * 
   * @param image  The Image to decorate
   */
  public ImageSelection(Image image)
  {
    this.image = image;
    
    try
    {
      JVM_LOCAL_OBJECT = new DataFlavor("application/x-java-jvm-local-objectref;class=java.awt.image.BufferedImage");
    }
    catch (ClassNotFoundException cnfe)
    {
      JVM_LOCAL_OBJECT = DataFlavor.imageFlavor;
    }
  }

  // Required by the Transferable interface
  
  /**
   * Get the DataFlavor objects supported by this Transferable.
   * 
   * @return The DataFlavor objects
   */
  public DataFlavor[] getTransferDataFlavors()
  {
    return new DataFlavor[] { JVM_LOCAL_OBJECT };
  }

  /**
   * Is the given DataFlavor supported by this Transferable?
   * 
   * @param DataFlavor  The DataFlavor of interest
   * @return true if it is supported; false otherwise
   */
  public boolean isDataFlavorSupported(DataFlavor flavor)
  {
    for (DataFlavor supported: getTransferDataFlavors())
    {
      if (flavor.equals(supported)) return true;
    }
    return false;
  }

  /**
   * Get the Transferable Object for a particular DataFlavor.
   * 
   * @param flavor   The DataFlavor of interest
   */
  public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException
  {
    if (!isDataFlavorSupported(flavor)) throw new UnsupportedFlavorException(flavor);
    
    return image;
  }
}
