SWT Jface Eclipse Java

/**
 * Transfer type to transfer SWT ImageData objects.
 */
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.ByteArrayTransfer;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
public class ImageTransfer extends ByteArrayTransfer {
  private static final String TYPENAME = "imagedata";
  private static final int TYPEID = registerType(TYPENAME);
  private static ImageTransfer _instance = new ImageTransfer();
  public static ImageTransfer getInstance() {
    return _instance;
  }
  public void javaToNative(Object object, TransferData transferData) {
    if (!checkImage(object) || !isSupportedType(transferData)) {
      DND.error(DND.ERROR_INVALID_DATA);
    }
    ImageData imdata = (ImageData) object;
    try {
      // write data to a byte array and then ask super to convert to
      // pMedium
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      DataOutputStream writeOut = new DataOutputStream(out);
      ImageLoader loader = new ImageLoader();
      loader.data = new ImageData[] { imdata };
      loader.save(writeOut, SWT.IMAGE_BMP);
      writeOut.close();
      byte[] buffer = out.toByteArray();
      super.javaToNative(buffer, transferData);
      out.close();
    } catch (IOException e) {
    }
  }
  public Object nativeToJava(TransferData transferData) {
    if (!isSupportedType(transferData))
      return null;
    byte[] buffer = (byte[]) super.nativeToJava(transferData);
    if (buffer == null)
      return null;
    ImageData imdata;
    try {
      ByteArrayInputStream in = new ByteArrayInputStream(buffer);
      DataInputStream readIn = new DataInputStream(in);
      imdata = new ImageData(readIn);
      readIn.close();
    } catch (IOException ex) {
      return null;
    }
    return imdata;
  }
  protected String[] getTypeNames() {
    return new String[] { TYPENAME };
  }
  protected int[] getTypeIds() {
    return new int[] { TYPEID };
  }
  boolean checkImage(Object object) {
    return (object != null && object instanceof ImageData);
  }
  protected boolean validate(Object object) {
    return checkImage(object);
  }
}