package com.windowtester.gef.test.views; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.eclipse.swt.dnd.ByteArrayTransfer; import org.eclipse.swt.dnd.TransferData; public class Draw2dTestTransfer extends ByteArrayTransfer { private static final String TYPE_NAME = Draw2dTestTransfer.class.getName(); private static final int TYPE_ID = registerType( TYPE_NAME ); private static Draw2dTestTransfer _instance = new Draw2dTestTransfer(); /** sigleton accessor */ public static Draw2dTestTransfer getInstance() { return _instance; } @Override protected String[] getTypeNames() { return new String[] { TYPE_NAME }; } @Override protected int[] getTypeIds() { return new int[] { TYPE_ID }; } /** * serialize the transfer object */ @Override public void javaToNative(Object object, TransferData transferData ) { try { ObjectOutputStream writeOut = null; try { // write data to a byte array and then ask super to convert to pMedium ByteArrayOutputStream out = new ByteArrayOutputStream(); writeOut = new ObjectOutputStream(out); writeOut.writeObject(object); byte[] byteBuffer = out.toByteArray(); super.javaToNative(byteBuffer, transferData); } finally { if(writeOut != null) { writeOut.close(); } } } catch(IOException e) { e.printStackTrace(); } } /** * deserialize the data transfer object */ @Override public Object nativeToJava( TransferData transferData ) { if(isSupportedType(transferData)) { byte[] buffer = (byte[]) super.nativeToJava(transferData); if(buffer == null) return null; try { ObjectInputStream ois = null; try { ByteArrayInputStream in = new ByteArrayInputStream(buffer); ois = new ObjectInputStream(in); return ois.readObject(); } finally { if(ois != null) ois.close(); } } catch(Exception iox) { iox.printStackTrace(); return null; } } return null; } }