Project

General

Profile

Download (4.55 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.name.NameRelationshipType;
22
import eu.etaxonomy.cdm.model.term.Representation;
23
import eu.etaxonomy.cdm.model.term.TermType;
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
     addContentProposalAdapter();
66
     FontDescriptor descriptor = FontDescriptor.createFrom(label.getFont());
67
  // setStyle method returns a new font descriptor for the given style
68
     descriptor = descriptor.setStyle(SWT.ITALIC);
69
     label.setFont(descriptor.createFont(label.getDisplay()));
70

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

    
75

    
76
    }
77

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

    
85
    protected void populateTerms() {
86

    
87
        combo.removeAll();
88

    
89

    
90
        fillInverseTermWrapperList();
91

    
92
        int i = 1;
93

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

    
100
        }
101

    
102
    }
103

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

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

    
119
    }
120

    
121

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

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

    
140

    
141
    @Override
142
    public T getSelection() {
143
        return wrapperSelection;
144
    }
145

    
146
    /**
147
     * {@inheritDoc}
148
     */
149
    @Override
150
    public void setSelection(T selection) {
151
        wrapperSelection = selection;
152

    
153
    }
154
    protected TermManager getTermManager() {
155
        return CdmStore.getTermManager();
156
    }
157
}
(6-6/8)