Project

General

Profile

Download (4.63 KB) Statistics
| Branch: | Tag: | Revision:
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.term.Representation;
27
import eu.etaxonomy.cdm.model.description.Character;
28
import eu.etaxonomy.cdm.model.term.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.getTerm().getRepresentation(PreferencesUtil.getGlobalLanguage());
106
                        Representation propertyRepresentation = property.getTerm().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
}
(3-3/9)