/*
* @(#)ImageTransferable.java
*
* Copyright (c) 1996-2010 The authors and contributors of JHotDraw.
* You may not use, copy or modify this file, except in compliance with the
* accompanying license terms.
*/
package org.jhotdraw.gui.datatransfer;
import org.jhotdraw.util.Images;
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
import javax.imageio.ImageIO;
/**
* A Transferable with an Image as its transfer class.
*
* @author Werner Randelshofer
* @version $Id$
*/
public class ImageTransferable implements Transferable {
private Image image;
public static final DataFlavor IMAGE_PNG_FLAVOR;
static {
try {
IMAGE_PNG_FLAVOR = new DataFlavor("image/png");
} catch (Exception e) {
InternalError error = new InternalError("Unable to crate image/png data flavor");
error.initCause(e);
throw error;
}
}
/** Creates a new instance. */
public ImageTransferable(Image image) {
this.image = image;
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(DataFlavor.imageFlavor) ||
flavor.equals(IMAGE_PNG_FLAVOR);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
/*if (! isDataFlavorSupported(flavor)) {
throw new UnsupportedFlavorException(flavor);
}*/
if (flavor.equals(DataFlavor.imageFlavor)) {
return image;
} else if (flavor.equals(IMAGE_PNG_FLAVOR)) {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
ImageIO.write(Images.toBufferedImage(image), "PNG", buf);
return new ByteArrayInputStream(buf.toByteArray());
} else {
throw new UnsupportedFlavorException(flavor);
}
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.imageFlavor, IMAGE_PNG_FLAVOR };
}
}