Merge branch 'release/5.5.0'
[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.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;
31
32 /**
33 * @author pplitzner
34 * @since Nov 30, 2018
35 *
36 */
37 public class CharacterTransfer extends ByteArrayTransfer {
38
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);
42
43
44 public static synchronized CharacterTransfer getInstance() {
45 return instance;
46 }
47
48 private CharacterTransfer() {
49 }
50
51 @Override
52 protected int[] getTypeIds() {
53 return new int[] { TYPEID };
54 }
55
56 @Override
57 protected String[] getTypeNames() {
58 return new String[] { TYPE_NAME };
59 }
60
61 @Override
62 protected void javaToNative(Object object, TransferData transferData) {
63 if (object != null){
64 Collection<Character> characters = (Collection<Character>)object;
65 ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
66 DataOutputStream out = new DataOutputStream(byteOut);
67
68 byte[] bytes = null;
69
70 try {
71
72 for(Character character : characters){
73 out.writeUTF(character.getStructure().getUuid().toString()
74 +","
75 +character.getProperty().getUuid().toString());
76 }
77 out.close();
78 bytes = byteOut.toByteArray();
79 } catch (IOException e) {
80 // when in doubt send nothing
81 }
82 if (bytes != null) {
83 super.javaToNative(bytes, transferData);
84 }
85 }
86 }
87
88 @Override
89 protected Object nativeToJava(TransferData transferData) {
90 byte[] bytes = (byte[]) super.nativeToJava(transferData);
91 if (bytes != null){
92 DataInputStream in = new DataInputStream(
93 new ByteArrayInputStream(bytes));
94
95 try {
96 List<Character> characters = new ArrayList<>();
97
98 try{
99 while(true){
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.getFeature().getRepresentation(PreferencesUtil.getGlobalLanguage());
106 Representation propertyRepresentation = property.getFeature().getRepresentation(PreferencesUtil.getGlobalLanguage());
107 String label = null;
108 String abbrevLabel = null;
109 if(structureRepresentation.getLabel()!=null && propertyRepresentation.getLabel()!=null){
110 label = structureRepresentation.getLabel()+" "+propertyRepresentation.getLabel();
111 }
112 if(structureRepresentation.getAbbreviatedLabel()!=null && propertyRepresentation.getAbbreviatedLabel()!=null){
113 abbrevLabel = structureRepresentation.getAbbreviatedLabel()+" "+propertyRepresentation.getAbbreviatedLabel();
114 }
115 characters.add(Character.NewInstance(structure, property, null, label, abbrevLabel));
116 }
117 }catch(EOFException e){
118 return characters.toArray();
119 }
120 } catch (IOException e) {
121 return null;
122 }
123 }
124 return null;
125 }
126
127 }