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
) {
40 byte[] bytes
= toByteArray((T
[]) object
);
42 super.javaToNative(bytes
, transferData
);
46 * @see org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(org.eclipse.swt.dnd.TransferData)
49 protected Object
nativeToJava(TransferData transferData
) {
50 byte[] bytes
= (byte[]) super.nativeToJava(transferData
);
51 return fromByteArray(bytes
);
54 protected byte[] toByteArray(T
[] elements
) {
55 ByteArrayOutputStream byteOut
= new ByteArrayOutputStream();
56 DataOutputStream out
= new DataOutputStream(byteOut
);
62 for(T element
: elements
){
63 writeElementUuid(element
, out
);
66 bytes
= byteOut
.toByteArray();
67 } catch (IOException e
) {
68 // when in doubt send nothing
73 private void writeElementUuid(T element
, DataOutputStream out
) throws IOException
{
74 out
.writeUTF(element
.getUuid().toString());
77 protected Object
fromByteArray(byte[] bytes
) {
78 DataInputStream in
= new DataInputStream(
79 new ByteArrayInputStream(bytes
));
82 List
<T
> elements
= new ArrayList
<T
>();
86 UUID uuid
= readElementUuid(in
);
87 elements
.add(loadElement(uuid
));
89 }catch(EOFException e
){
90 return elements
.toArray();
92 } catch (IOException e
) {
97 public abstract T
loadElement(UUID uuid
);
102 * @throws IOException
104 public UUID
readElementUuid(DataInputStream in
) throws IOException
{
105 return UUID
.fromString(in
.readUTF());