/** * Copyright (c) 2014 by Brainwy Software Ltda. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.tree; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import org.eclipse.swt.dnd.ByteArrayTransfer; import org.eclipse.swt.dnd.TransferData; import org.python.pydev.core.log.Log; import org.python.pydev.tree.EnabledTreeDragReorder.DragData; class TreeItemDragDataTransfer extends ByteArrayTransfer { private static final TreeItemDragDataTransfer instance = new TreeItemDragDataTransfer(); private static final String TYPE_NAME = "tree-item-transfer-format" + System.currentTimeMillis() + ":" + instance.hashCode(); private static final int TYPEID = registerType(TYPE_NAME); private TreeItemDragDataTransfer() { } public static TreeItemDragDataTransfer getInstance() { return instance; } @Override protected int[] getTypeIds() { return new int[] { TYPEID }; } @Override protected String[] getTypeNames() { return new String[] { TYPE_NAME }; } @Override protected void javaToNative(Object object, TransferData transferData) { DragData dragData = (DragData) object; ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOut); byte[] bytes = null; if (dragData != null) { try { out.writeUTF(dragData.text); out.writeUTF(dragData.image); out.close(); bytes = byteOut.toByteArray(); } catch (IOException e) { Log.log(e); } if (bytes != null) { super.javaToNative(bytes, transferData); } } } @Override protected Object nativeToJava(TransferData transferData) { byte[] bytes = (byte[]) super.nativeToJava(transferData); if (bytes != null) { DataInputStream in = new DataInputStream( new ByteArrayInputStream(bytes)); try { String text = in.readUTF(); String image = in.readUTF(); return new DragData(text, image); } catch (IOException e) { return null; } } return null; } }