3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.model
;
13 import java
.io
.ByteArrayInputStream
;
14 import java
.io
.ByteArrayOutputStream
;
15 import java
.io
.DataInputStream
;
16 import java
.io
.DataOutputStream
;
17 import java
.io
.EOFException
;
18 import java
.io
.IOException
;
19 import java
.util
.ArrayList
;
20 import java
.util
.List
;
21 import java
.util
.UUID
;
23 import org
.eclipse
.swt
.dnd
.ByteArrayTransfer
;
24 import org
.eclipse
.swt
.dnd
.TransferData
;
26 import eu
.etaxonomy
.cdm
.model
.common
.ICdmBase
;
30 * @created Feb 8, 2011
33 public abstract class CdmObjectTransfer
<T
extends ICdmBase
> extends ByteArrayTransfer
{
36 * @see org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData)
39 protected void javaToNative(Object object
, TransferData transferData
) {
41 byte[] bytes
= toByteArray((T
[]) object
);
43 super.javaToNative(bytes
, transferData
);
48 * @see org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(org.eclipse.swt.dnd.TransferData)
51 protected Object
nativeToJava(TransferData transferData
) {
52 byte[] bytes
= (byte[]) super.nativeToJava(transferData
);
54 return fromByteArray(bytes
);
60 protected byte[] toByteArray(T
[] elements
) {
61 ByteArrayOutputStream byteOut
= new ByteArrayOutputStream();
62 DataOutputStream out
= new DataOutputStream(byteOut
);
68 for(T element
: elements
){
69 writeElementUuid(element
, out
);
72 bytes
= byteOut
.toByteArray();
73 } catch (IOException e
) {
74 // when in doubt send nothing
79 private void writeElementUuid(T element
, DataOutputStream out
) throws IOException
{
80 out
.writeUTF(element
.getUuid().toString());
83 protected Object
fromByteArray(byte[] bytes
) {
84 DataInputStream in
= new DataInputStream(
85 new ByteArrayInputStream(bytes
));
88 List
<T
> elements
= new ArrayList
<T
>();
92 UUID uuid
= readElementUuid(in
);
93 elements
.add(loadElement(uuid
));
95 }catch(EOFException e
){
96 return elements
.toArray();
98 } catch (IOException e
) {
103 public abstract T
loadElement(UUID uuid
);
108 * @throws IOException
110 public UUID
readElementUuid(DataInputStream in
) throws IOException
{
111 return UUID
.fromString(in
.readUTF());