Project

General

Profile

Download (4.51 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
            i++;
98

    
99
        }
100

    
101
    }
102

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

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

    
118
    }
119

    
120

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

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

    
139

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

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

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