2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.taxeditor
.featuretree
;
11 import java
.io
.ByteArrayInputStream
;
12 import java
.io
.ByteArrayOutputStream
;
13 import java
.io
.DataInputStream
;
14 import java
.io
.DataOutputStream
;
15 import java
.io
.EOFException
;
16 import java
.io
.IOException
;
17 import java
.util
.ArrayList
;
18 import java
.util
.Collection
;
19 import java
.util
.List
;
20 import java
.util
.UUID
;
22 import org
.eclipse
.swt
.dnd
.ByteArrayTransfer
;
23 import org
.eclipse
.swt
.dnd
.TransferData
;
25 import eu
.etaxonomy
.cdm
.api
.service
.IFeatureNodeService
;
26 import eu
.etaxonomy
.cdm
.model
.common
.Representation
;
27 import eu
.etaxonomy
.cdm
.model
.description
.Character
;
28 import eu
.etaxonomy
.cdm
.model
.description
.FeatureNode
;
29 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
30 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
37 public class CharacterTransfer
extends ByteArrayTransfer
{
39 private static CharacterTransfer instance
= new CharacterTransfer();
40 private static final String TYPE_NAME
= "characters-transfer-format";
41 private static final int TYPEID
= registerType(TYPE_NAME
);
44 public static synchronized CharacterTransfer
getInstance() {
48 private CharacterTransfer() {
52 protected int[] getTypeIds() {
53 return new int[] { TYPEID
};
57 protected String
[] getTypeNames() {
58 return new String
[] { TYPE_NAME
};
62 protected void javaToNative(Object object
, TransferData transferData
) {
64 Collection
<Character
> characters
= (Collection
<Character
>)object
;
65 ByteArrayOutputStream byteOut
= new ByteArrayOutputStream();
66 DataOutputStream out
= new DataOutputStream(byteOut
);
72 for(Character character
: characters
){
73 out
.writeUTF(character
.getStructure().getUuid().toString()
75 +character
.getProperty().getUuid().toString());
78 bytes
= byteOut
.toByteArray();
79 } catch (IOException e
) {
80 // when in doubt send nothing
83 super.javaToNative(bytes
, transferData
);
89 protected Object
nativeToJava(TransferData transferData
) {
90 byte[] bytes
= (byte[]) super.nativeToJava(transferData
);
92 DataInputStream in
= new DataInputStream(
93 new ByteArrayInputStream(bytes
));
96 List
<Character
> characters
= new ArrayList
<>();
100 String string
= in
.readUTF();
101 String
[] split
= string
.split(",");
102 IFeatureNodeService featureNodeService
= CdmStore
.getService(IFeatureNodeService
.class);
103 FeatureNode structure
= featureNodeService
.load(UUID
.fromString(split
[0]));
104 FeatureNode property
= featureNodeService
.load(UUID
.fromString(split
[1]));
105 Representation structureRepresentation
= structure
.getTerm().getRepresentation(PreferencesUtil
.getGlobalLanguage());
106 Representation propertyRepresentation
= property
.getTerm().getRepresentation(PreferencesUtil
.getGlobalLanguage());
108 String abbrevLabel
= null;
109 if(structureRepresentation
.getLabel()!=null && propertyRepresentation
.getLabel()!=null){
110 label
= structureRepresentation
.getLabel()+" "+propertyRepresentation
.getLabel();
112 if(structureRepresentation
.getAbbreviatedLabel()!=null && propertyRepresentation
.getAbbreviatedLabel()!=null){
113 abbrevLabel
= structureRepresentation
.getAbbreviatedLabel()+" "+propertyRepresentation
.getAbbreviatedLabel();
115 characters
.add(Character
.NewInstance(structure
, property
, null, label
, abbrevLabel
));
117 }catch(EOFException e
){
118 return characters
.toArray();
120 } catch (IOException e
) {