Project

General

Profile

Download (13 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2016 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.element;
10

    
11
/**
12
 * @author k.luther
13
 * @date 22.06.2016
14
 *
15
 */
16

    
17
import java.util.ArrayList;
18
import java.util.Collections;
19
import java.util.List;
20
import java.util.Set;
21

    
22
import org.eclipse.jface.util.PropertyChangeEvent;
23
import org.eclipse.swt.SWT;
24
import org.eclipse.swt.events.SelectionAdapter;
25
import org.eclipse.swt.events.SelectionEvent;
26
import org.eclipse.swt.widgets.Button;
27

    
28
import eu.etaxonomy.cdm.model.common.Language;
29
import eu.etaxonomy.cdm.model.term.Representation;
30
import eu.etaxonomy.cdm.model.term.TermBase;
31
import eu.etaxonomy.cdm.model.term.TermType;
32
import eu.etaxonomy.cdm.persistence.dto.TermDto;
33
import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
34
import eu.etaxonomy.taxeditor.model.ImageResources;
35
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
36
import eu.etaxonomy.taxeditor.store.CdmStore;
37
import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
38

    
39

    
40
public class RepresentationElement extends AbstractCdmFormElement {
41

    
42
        protected TermComboElement<Language> combo_language;
43

    
44
        protected TextWithLabelElement element_Label;
45
        protected TextWithLabelElement element_abbrevLabel;
46
        protected TextWithLabelElement element_plural;
47
        protected TextWithLabelElement element_text;
48

    
49
        protected Button button;
50

    
51
        protected Representation selectedRepresentation;
52
        protected TermBase term;
53
        protected TermDto termDto;
54

    
55
		private Button removeRepresentation;
56

    
57
        public RepresentationElement(CdmFormFactory formFactory,
58
                ICdmFormElement formElement, TermBase term,
59
                Integer textHeight, int style, boolean fill) {
60
            this(formFactory, formElement, null, term, textHeight, style, fill);
61
        }
62

    
63
        public RepresentationElement(CdmFormFactory formFactory,
64
                ICdmFormElement formElement, Representation representation, TermBase term,
65
                Integer textHeight, int style, boolean fill) {
66
            super(formFactory, formElement);
67

    
68
            formFactory.addPropertyChangeListener(this);
69

    
70
            element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
71
            element_abbrevLabel = this.formFactory.createTextWithLabelElement(formElement, "abbrev. Label", null, style);
72
            element_plural = this.formFactory.createTextWithLabelElement(formElement, "Plural", null, style);
73
            element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
74
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
75
                createRepresentationEditingElements(formElement, style);
76
            }
77
            setTerm(term, fill);
78
            if(representation!=null){
79
                setSelectedRepresentation(representation);
80
            }
81

    
82
        }
83

    
84
        public RepresentationElement(CdmFormFactory formFactory,
85
                ICdmFormElement formElement, Representation representation, TermDto term,
86
                Integer textHeight, int style, boolean fill) {
87
            super(formFactory, formElement);
88

    
89
            formFactory.addPropertyChangeListener(this);
90

    
91
            element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
92
            element_abbrevLabel = this.formFactory.createTextWithLabelElement(formElement, "abbrev. Label", null, style);
93
            element_plural = this.formFactory.createTextWithLabelElement(formElement, "Plural", null, style);
94
            element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
95
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
96
                createRepresentationEditingElements(formElement, style);
97
            }
98
            setTermDto(term, fill);
99
            if(representation!=null){
100
                setSelectedRepresentation(representation);
101
            }
102

    
103
        }
104

    
105
        protected void createRepresentationEditingElements(
106
                ICdmFormElement formElement, int style) {
107
        	removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
108
    				SWT.PUSH);
109
    		removeRepresentation.setImage(ImageResources
110
    				.getImage(ImageResources.TRASH_ICON));
111
    		removeRepresentation.setToolTipText("Remove representation");
112
    		removeRepresentation.addSelectionListener(new DeleteListener(this));
113
    		addControl(removeRepresentation);
114

    
115
            combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
116
                            "", null, false, style);
117

    
118
       }
119

    
120
        public List<Language> getLanguages() {
121

    
122
            ArrayList<Language> languageList = new ArrayList<Language>();
123
            Set<Representation> reps = null;
124
            if (term != null){
125
                reps = term.getRepresentations();
126
            }else{
127
                reps = termDto.getRepresentations();
128
            }
129

    
130
            for (Representation rep: reps){
131
                languageList.add(rep.getLanguage());
132
            }
133

    
134
            Collections.sort(languageList, new DefaultTermComparator<Language>());
135

    
136
            return languageList;
137
        }
138

    
139
        public void setTerm(
140
                TermBase term, boolean update) {
141
            this.term = term;
142
            if (term.getRepresentations().isEmpty()){
143
            	//if the term has no representation at all, create a default one.
144
            	Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
145
            	term.addRepresentation(rep);
146
            }
147

    
148
            if (selectedRepresentation != null) {
149
               combo_language.setTerms(getLanguages());
150

    
151
            } else{
152
            	 setEnabledControls(false);
153
                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
154
                	 removeRepresentation.setEnabled(false);
155
                 }
156
            }
157
            if (update){
158
            	updateControls();
159
            }
160
        }
161

    
162
        public void setTermDto(
163
                TermDto term, boolean update) {
164
            this.termDto = term;
165
            if (term.getRepresentations().isEmpty()){
166
                //if the term has no representation at all, create a default one.
167
                Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
168
                term.addRepresentation(rep);
169
            }
170

    
171
            if (selectedRepresentation != null) {
172
               combo_language.setTerms(getLanguages());
173

    
174
            } else{
175
                 setEnabledControls(false);
176
                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
177
                     removeRepresentation.setEnabled(false);
178
                 }
179
            }
180
            if (update){
181
                updateControls();
182
            }
183
        }
184

    
185
        private void setEnabledControls(boolean enabled){
186
            element_Label.setEnabled(enabled);
187
            element_abbrevLabel.setEnabled(enabled);
188
            element_plural.setEnabled(enabled);
189
            element_text.setEnabled(enabled);
190
        }
191

    
192
        protected void updateControls() {
193
            Representation preferredRepresentation = null;
194
            if (term != null){
195
                 preferredRepresentation = term
196
                    .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
197
            }else{
198
                 preferredRepresentation = termDto
199
                        .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
200
            }
201

    
202
            element_Label.setText(preferredRepresentation != null? preferredRepresentation.getLabel(): null);
203
            element_abbrevLabel.setText(preferredRepresentation != null? preferredRepresentation.getAbbreviatedLabel(): null);
204
            element_plural.setText(preferredRepresentation != null? preferredRepresentation.getPlural(): null);
205
            element_text.setText(preferredRepresentation != null? preferredRepresentation.getDescription(): null);
206
            selectedRepresentation = preferredRepresentation;
207
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
208
                combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
209
                boolean removePossible = false;
210
                if (term != null){
211
                    removePossible = term.getRepresentations().size() > 1 ;
212
                }else{
213
                    removePossible = termDto.getRepresentations().size() > 1 ;
214
                }
215
                removeRepresentation.setEnabled(removePossible);
216

    
217
            }
218
        }
219

    
220
        public TermBase getTerm() {
221
            return term;
222
        }
223

    
224
        @Override
225
        public void propertyChange(PropertyChangeEvent event) {
226
            if (event == null) {
227
                return;
228
            }
229
            Object eventSource = event.getSource();
230

    
231
            if (eventSource == element_abbrevLabel) {
232
                String abbrevLabel = ((TextWithLabelElement) eventSource)
233
                        .getText();
234
                selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
235
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
236
            }
237
            else if (eventSource == element_plural){
238
                String plural = ((TextWithLabelElement) eventSource)
239
                        .getText();
240
                selectedRepresentation.setPlural(plural);
241
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
242
            } else if (eventSource == element_Label){
243
                String label = ((TextWithLabelElement) eventSource)
244
                        .getText();
245
                selectedRepresentation.setLabel(label);
246
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
247
            } else if (eventSource == element_text){
248
                String text = ((TextWithLabelElement) eventSource)
249
                        .getText();
250
                selectedRepresentation.setText(text);
251
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
252
            } else if (eventSource == button){
253
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
254
            } else if (eventSource == combo_language){
255
                if (combo_language.getSelection() != null){
256
                    setEnabledControls(true);
257
                    boolean removePossible = false;
258
                    if (term != null){
259
                        removePossible = term.getRepresentations().size() > 1 ;
260
                    }else{
261
                        removePossible = termDto.getRepresentations().size() > 1 ;
262
                    }
263
                    removeRepresentation.setEnabled(removePossible);
264

    
265
                    Language selectedLanguage = combo_language.getSelection();
266
                    if (selectedLanguage != null) {
267
                        selectedRepresentation = getTerm().getRepresentation(selectedLanguage);
268
                        if (selectedRepresentation == null){
269
                            selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
270
                        }
271
                        element_Label.setText(selectedRepresentation.getLabel());
272
                        element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
273
                        element_plural.setText(selectedRepresentation.getPlural());
274
                        element_text.setText(selectedRepresentation.getDescription());
275

    
276
                    }else {
277
                        setEnabledControls(false);
278
                    }
279
                } else{
280
                    setEnabledControls(false);
281
                    removeRepresentation.setEnabled(false);
282
                }
283
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
284
            }
285
        }
286

    
287
        public Representation getSelectedRepresentation() {
288
            return selectedRepresentation;
289
        }
290

    
291
        public void setSelectedRepresentation(Representation selectedRepresentation) {
292
            if (selectedRepresentation == null){
293
                selectedRepresentation = Representation.NewInstance("", "", "", null);
294
            }
295
            this.selectedRepresentation = selectedRepresentation;
296
        }
297

    
298
        private class DeleteListener extends SelectionAdapter {
299

    
300
    		private final RepresentationElement element;
301

    
302
    		public DeleteListener(RepresentationElement element) {
303
    			this.element = element;
304
    		}
305

    
306
    		@Override
307
    		public void widgetSelected(SelectionEvent e) {
308
    		    if (term != null){
309
    		        term.removeRepresentation(selectedRepresentation);
310
    		    }else {
311
    		        termDto.getRepresentations().remove(selectedRepresentation);
312
    		    }
313
    			firePropertyChangeEvent(new CdmPropertyChangeEvent(
314
    					this, e));
315
    			updateControls();
316
    		}
317
    	}
318
    }
319

    
320

    
(42-42/53)