Project

General

Profile

Download (4.48 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.ui.combo;
10

    
11
import java.util.ArrayList;
12
import java.util.Comparator;
13
import java.util.List;
14

    
15
import org.eclipse.jface.resource.FontDescriptor;
16
import org.eclipse.jface.util.PropertyChangeEvent;
17
import org.eclipse.swt.SWT;
18
import org.eclipse.swt.events.SelectionEvent;
19

    
20
import eu.etaxonomy.cdm.model.common.Language;
21
import eu.etaxonomy.cdm.model.common.Representation;
22
import eu.etaxonomy.cdm.model.common.TermType;
23
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
24
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
25
import eu.etaxonomy.taxeditor.store.CdmStore;
26
import eu.etaxonomy.taxeditor.store.TermManager;
27
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
28
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
29
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
30

    
31
/**
32
 * @author k.luther
33
 * @since 08.10.2018
34
 *
35
 */
36
public class NameRelationshipTypeCombo<T extends InverseTermWrapper> extends AbstractComboElement<T> {
37

    
38

    
39
   List<InverseTermWrapper> wrapperList = new ArrayList<>();
40
   T wrapperSelection;
41
   List<NameRelationshipType> terms = new ArrayList();
42
   boolean useAbbrevLabel;
43

    
44

    
45
    /**
46
     * @param cdmFormFactory
47
     * @param parentElement
48
     * @param termType
49
     * @param labelString
50
     * @param selection
51
     * @param addEmptyElement
52
     * @param style
53
     * @param useAbbrevLabel
54
     * @param comparator
55
     */
56
    public NameRelationshipTypeCombo(CdmFormFactory cdmFormFactory, ICdmFormElement parentElement,
57
            String labelString,  boolean addEmptyElement, int style, boolean useAbbrevLabel,
58
            Comparator<T> comparator) {
59
     super(cdmFormFactory, parentElement);
60
     // labelString, selection, addEmptyElement, style,  comparator
61
     terms = getTermManager().getPreferredTerms(TermType.NameRelationshipType);
62
     this.useAbbrevLabel = useAbbrevLabel;
63
     populateTerms();
64
     label.setText(labelString);
65
     FontDescriptor descriptor = FontDescriptor.createFrom(label.getFont());
66
  // setStyle method returns a new font descriptor for the given style
67
     descriptor = descriptor.setStyle(SWT.ITALIC);
68
     label.setFont(descriptor.createFont(label.getDisplay()));
69

    
70
     combo.addSelectionListener(this);
71
     combo.addDisposeListener(this);
72
     PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
73

    
74

    
75
    }
76

    
77
    /**
78
     * Fills the combo with elements and sets up the convenience functions
79
     * for selection index
80
     *
81
     * @param preferredTerms
82
     */
83

    
84
    protected void populateTerms() {
85

    
86
        combo.removeAll();
87

    
88

    
89
        fillInverseTermWrapperList();
90

    
91
        int i = 1;
92

    
93
        for (InverseTermWrapper termWrapper : wrapperList) {
94
            String label = termWrapper.getLabel();
95
            combo.add(label);
96
            i++;
97

    
98
        }
99

    
100
    }
101

    
102
    /**
103
     *
104
     */
105
    private void fillInverseTermWrapperList() {
106
        for (NameRelationshipType term: terms){
107
            wrapperList.add(new InverseTermWrapper(term, false, useAbbrevLabel));
108
            List<Language> languages = new ArrayList();
109
            languages.add(CdmStore.getDefaultLanguage());
110
            Representation rep = term.getPreferredInverseRepresentation(languages);
111

    
112
            if (rep != null && !rep.getLabel().equals(term.getLabel(CdmStore.getDefaultLanguage()))){
113
                wrapperList.add(new InverseTermWrapper(term, true, useAbbrevLabel));
114
            }
115
        }
116

    
117
    }
118

    
119

    
120
    /** {@inheritDoc} */
121
    @Override
122
    public void widgetSelected(SelectionEvent e) {
123
        wrapperSelection = (T) wrapperList.get(combo.getSelectionIndex());
124
        firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
125
    }
126

    
127
    /** {@inheritDoc} */
128
    @Override
129
    public void propertyChange(PropertyChangeEvent event) {
130
        super.propertyChange(event);
131
        if (event != null
132
                && PreferencesUtil.PREFERRED_TERMS_CHANGE.equals(event
133
                        .getProperty())) {
134
            populateTerms();
135
        }
136
    }
137

    
138

    
139
    @Override
140
    public T getSelection() {
141
        return wrapperSelection;
142
    }
143

    
144
    /**
145
     * {@inheritDoc}
146
     */
147
    @Override
148
    public void setSelection(T selection) {
149
        // TODO Auto-generated method stub
150

    
151
    }
152
    protected TermManager getTermManager() {
153
        return CdmStore.getTermManager();
154
    }
155
}
(6-6/11)