remove debug message
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / featuretree / CharacterTransfer.java
1 /**
2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9 package eu.etaxonomy.taxeditor.featuretree;
10
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;
21
22 import org.eclipse.swt.dnd.ByteArrayTransfer;
23 import org.eclipse.swt.dnd.TransferData;
24
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;
32
33 /**
34 * @author pplitzner
35 * @since Nov 30, 2018
36 *
37 */
38 public class CharacterTransfer extends ByteArrayTransfer {
39
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);
43
44
45 public static synchronized CharacterTransfer getInstance() {
46 return instance;
47 }
48
49 private CharacterTransfer() {
50 }
51
52 @Override
53 protected int[] getTypeIds() {
54 return new int[] { TYPEID };
55 }
56
57 @Override
58 protected String[] getTypeNames() {
59 return new String[] { TYPE_NAME };
60 }
61
62 @Override
63 protected void javaToNative(Object object, TransferData transferData) {
64 if (object != null){
65 Collection<Character> characters = (Collection<Character>)object;
66 ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
67 DataOutputStream out = new DataOutputStream(byteOut);
68
69 byte[] bytes = null;
70
71 try {
72
73 for(Character character : characters){
74 out.writeUTF(character.getStructure().getUuid().toString()
75 +","
76 +character.getProperty().getUuid().toString());
77 }
78 out.close();
79 bytes = byteOut.toByteArray();
80 } catch (IOException e) {
81 // when in doubt send nothing
82 }
83 if (bytes != null) {
84 super.javaToNative(bytes, transferData);
85 }
86 }
87 }
88
89 @Override
90 protected Object nativeToJava(TransferData transferData) {
91 byte[] bytes = (byte[]) super.nativeToJava(transferData);
92 if (bytes != null){
93 DataInputStream in = new DataInputStream(
94 new ByteArrayInputStream(bytes));
95
96 try {
97 List<Character> characters = new ArrayList<>();
98
99 try{
100 while(true){
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());
108 String label = null;
109 String abbrevLabel = null;
110 if(structureRepresentation.getLabel()!=null && propertyRepresentation.getLabel()!=null){
111 label = structureRepresentation.getLabel()+" "+propertyRepresentation.getLabel();
112 }
113 if(structureRepresentation.getAbbreviatedLabel()!=null && propertyRepresentation.getAbbreviatedLabel()!=null){
114 abbrevLabel = structureRepresentation.getAbbreviatedLabel()+" "+propertyRepresentation.getAbbreviatedLabel();
115 }
116 characters.add(Character.NewInstance(structure, property, null, label, abbrevLabel));
117 }
118 }catch(EOFException e){
119 return characters.toArray();
120 }
121 } catch (IOException e) {
122 return null;
123 }
124 }
125 return null;
126 }
127
128 }