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
.description
.Character
;
27 import eu
.etaxonomy
.cdm
.model
.term
.DefinedTerm
;
28 import eu
.etaxonomy
.cdm
.model
.term
.Representation
;
29 import eu
.etaxonomy
.cdm
.model
.term
.TermNode
;
30 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
31 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
38 public class CharacterTransfer
extends ByteArrayTransfer
{
40 private static CharacterTransfer instance
= new CharacterTransfer();
41 private static final String TYPE_NAME
= "characters-transfer-format";
42 private static final int TYPEID
= registerType(TYPE_NAME
);
45 public static synchronized CharacterTransfer
getInstance() {
49 private CharacterTransfer() {
53 protected int[] getTypeIds() {
54 return new int[] { TYPEID
};
58 protected String
[] getTypeNames() {
59 return new String
[] { TYPE_NAME
};
63 protected void javaToNative(Object object
, TransferData transferData
) {
65 Collection
<Character
> characters
= (Collection
<Character
>)object
;
66 ByteArrayOutputStream byteOut
= new ByteArrayOutputStream();
67 DataOutputStream out
= new DataOutputStream(byteOut
);
73 for(Character character
: characters
){
74 out
.writeUTF(character
.getStructure().getUuid().toString()
76 +character
.getProperty().getUuid().toString());
79 bytes
= byteOut
.toByteArray();
80 } catch (IOException e
) {
81 // when in doubt send nothing
84 super.javaToNative(bytes
, transferData
);
90 protected Object
nativeToJava(TransferData transferData
) {
91 byte[] bytes
= (byte[]) super.nativeToJava(transferData
);
93 DataInputStream in
= new DataInputStream(
94 new ByteArrayInputStream(bytes
));
97 List
<Character
> characters
= new ArrayList
<>();
101 String string
= in
.readUTF();
102 String
[] split
= string
.split(",");
103 IFeatureNodeService featureNodeService
= CdmStore
.getService(IFeatureNodeService
.class);
104 TermNode
<DefinedTerm
> structure
= featureNodeService
.load(UUID
.fromString(split
[0]));
105 TermNode
<DefinedTerm
> property
= featureNodeService
.load(UUID
.fromString(split
[1]));
106 Representation structureRepresentation
= structure
.getTerm().getRepresentation(PreferencesUtil
.getGlobalLanguage());
107 Representation propertyRepresentation
= property
.getTerm().getRepresentation(PreferencesUtil
.getGlobalLanguage());
109 String abbrevLabel
= null;
110 if(structureRepresentation
.getLabel()!=null && propertyRepresentation
.getLabel()!=null){
111 label
= structureRepresentation
.getLabel()+" "+propertyRepresentation
.getLabel();
113 if(structureRepresentation
.getAbbreviatedLabel()!=null && propertyRepresentation
.getAbbreviatedLabel()!=null){
114 abbrevLabel
= structureRepresentation
.getAbbreviatedLabel()+" "+propertyRepresentation
.getAbbreviatedLabel();
116 characters
.add(Character
.NewInstance(structure
, property
, null, label
, abbrevLabel
));
118 }catch(EOFException e
){
119 return characters
.toArray();
121 } catch (IOException e
) {