Package org.eclipse.swt.dnd
Class ByteArrayTransfer
java.lang.Object
org.eclipse.swt.dnd.Transfer
org.eclipse.swt.dnd.ByteArrayTransfer
- Direct Known Subclasses:
- EditorInputTransfer,- FileTransfer,- HTMLTransfer,- ImageTransfer,- LocalSelectionTransfer,- MarkerTransfer,- PluginTransfer,- ResourceTransfer,- RTFTransfer,- TextTransfer,- URLTransfer
The class 
ByteArrayTransfer provides a platform specific
 mechanism for converting a java byte[] to a platform
 specific representation of the byte array and vice versa.
 ByteArrayTransfer is never used directly but is sub-classed
 by transfer agents that convert between data in a java format such as a
 String and a platform specific byte array.
 
If the data you are converting does not map to a
 byte[], you should sub-class Transfer directly
 and do your own mapping to a platform data type.
The following snippet shows a subclass of ByteArrayTransfer that transfers
 data defined by the class MyType.
 public class MyType {
        public String fileName;
        public long fileLength;
        public long lastModified;
 }
 
 public class MyTypeTransfer extends ByteArrayTransfer {
        private static final String MYTYPENAME = "my_type_name";
        private static final int MYTYPEID = registerType(MYTYPENAME);
        private static MyTypeTransfer _instance = new MyTypeTransfer();
 private MyTypeTransfer() {}
 public static MyTypeTransfer getInstance () {
        return _instance;
 }
 public void javaToNative (Object object, TransferData transferData) {
        if (object == null || !(object instanceof MyType[])) return;
        if (isSupportedType(transferData)) {
                MyType[] myTypes = (MyType[]) 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);
                        for (int i = 0, length = myTypes.length; i < length;  i++){
                                byte[] buffer = myTypes[i].fileName.getBytes();
                                writeOut.writeInt(buffer.length);
                                writeOut.write(buffer);
                                writeOut.writeLong(myTypes[i].fileLength);
                                writeOut.writeLong(myTypes[i].lastModified);
                        }
                        byte[] buffer = out.toByteArray();
                        writeOut.close();
                        super.javaToNative(buffer, transferData);
                } catch (IOException e) {
                }
        }
 }
 public Object nativeToJava(TransferData transferData){
        if (isSupportedType(transferData)) {
                byte[] buffer = (byte[])super.nativeToJava(transferData);
                if (buffer == null) return null;
                MyType[] myData = new MyType[0];
                try {
                        ByteArrayInputStream in = new ByteArrayInputStream(buffer);
                        DataInputStream readIn = new DataInputStream(in);
                        while(readIn.available() > 20) {
                                MyType datum = new MyType();
                                int size = readIn.readInt();
                                byte[] name = new byte[size];
                                readIn.read(name);
                                datum.fileName = new String(name);
                                datum.fileLength = readIn.readLong();
                                datum.lastModified = readIn.readLong();
                                MyType[] newMyData = new MyType[myData.length + 1];
                                System.arraycopy(myData, 0, newMyData, 0, myData.length);
                                newMyData[myData.length] = datum;
                                myData = newMyData;
                        }
                        readIn.close();
                } catch (IOException ex) {
                        return null;
                }
                return myData;
        }
        return null;
 }
 protected String[] getTypeNames(){
        return new String[]{MYTYPENAME};
 }
 protected int[] getTypeIds(){
        return new int[] {MYTYPEID};
 }
 }
 - See Also:
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionReturns a list of the platform specific data types that can be converted using this transfer agent.booleanisSupportedType(TransferData transferData) Returns true if theTransferDatadata type can be converted using this transfer agent, or false otherwise (including if transferData isnull).protected voidjavaToNative(Object object, TransferData transferData) This implementation ofjavaToNativeconverts a javabyte[]to a platform specific representation.protected ObjectnativeToJava(TransferData transferData) This implementation ofnativeToJavaconverts a platform specific representation of a byte array to a javabyte[].Methods inherited from class org.eclipse.swt.dnd.TransfergetTypeIds, getTypeNames, registerType, validate
- 
Constructor Details- 
ByteArrayTransferpublic ByteArrayTransfer()
 
- 
- 
Method Details- 
getSupportedTypesDescription copied from class:TransferReturns a list of the platform specific data types that can be converted using this transfer agent.Only the data type fields of the TransferDataobjects are filled in.- Specified by:
- getSupportedTypesin class- Transfer
- Returns:
- a list of the data types that can be converted using this transfer agent
 
- 
isSupportedTypeDescription copied from class:TransferReturns true if theTransferDatadata type can be converted using this transfer agent, or false otherwise (including if transferData isnull).- Specified by:
- isSupportedTypein class- Transfer
- Parameters:
- transferData- a platform specific description of a data type; only the data type fields of the- TransferDataobject need to be filled in
- Returns:
- true if the transferData data type can be converted using this transfer agent
 
- 
javaToNativeThis implementation ofjavaToNativeconverts a javabyte[]to a platform specific representation.- Specified by:
- javaToNativein class- Transfer
- Parameters:
- object- a java- byte[]containing the data to be converted
- transferData- an empty- TransferDataobject that will be filled in on return with the platform specific format of the data
- See Also:
 
- 
nativeToJavaThis implementation ofnativeToJavaconverts a platform specific representation of a byte array to a javabyte[].- Specified by:
- nativeToJavain class- Transfer
- Parameters:
- transferData- the platform specific representation of the data to be converted
- Returns:
- a java byte[]containing the converted data if the conversion was successful; otherwise null
- See Also:
 
 
-