Project

General

Profile

Download (13.8 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.AbstractTermDto;
33
import eu.etaxonomy.cdm.persistence.dto.TermDto;
34
import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
35
import eu.etaxonomy.taxeditor.model.ImageResources;
36
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
37
import eu.etaxonomy.taxeditor.store.CdmStore;
38
import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
39

    
40

    
41
public class RepresentationElement extends AbstractCdmFormElement implements IEnableableFormElement{
42

    
43
        protected TermComboElement<Language> combo_language;
44

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

    
50
        protected Button button;
51

    
52
        protected Representation selectedRepresentation;
53
        protected TermBase term;
54
        protected AbstractTermDto termDto;
55

    
56
		private Button removeRepresentation;
57

    
58
		boolean isEnabled = true;
59

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

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

    
71
            formFactory.addPropertyChangeListener(this);
72

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

    
85
        }
86

    
87
        public RepresentationElement(CdmFormFactory formFactory,
88
                ICdmFormElement formElement, Representation representation, AbstractTermDto term,
89
                Integer textHeight, int style, boolean fill) {
90
            super(formFactory, formElement);
91

    
92
            formFactory.addPropertyChangeListener(this);
93

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

    
107
        }
108

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

    
119
            combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
120
                            "", null, false, style);
121

    
122
       }
123

    
124
        public List<Language> getLanguages() {
125

    
126
            ArrayList<Language> languageList = new ArrayList<Language>();
127
            Set<Representation> reps = null;
128
            if (term != null){
129
                reps = term.getRepresentations();
130
            }else{
131
                reps = termDto.getRepresentations();
132
            }
133

    
134
            for (Representation rep: reps){
135
                languageList.add(rep.getLanguage());
136
            }
137

    
138
            Collections.sort(languageList, new DefaultTermComparator<Language>());
139

    
140
            return languageList;
141
        }
142

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

    
152
//            if (selectedRepresentation != null) {
153
//               combo_language.setTerms(getLanguages());
154
//
155
//            } else{
156
//            	 setEnabledControls(false);
157
//                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
158
//                	 removeRepresentation.setEnabled(false);
159
//                 }
160
//            }
161
            if (update){
162
            	updateControls();
163
            }
164
        }
165

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

    
175
            if (selectedRepresentation != null) {
176
               combo_language.setTerms(getLanguages());
177

    
178
            } 
179
//            else if (!term.getRepresentations().isEmpty()){
180
//                 setEnabledControls(false);
181
//                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
182
//                     removeRepresentation.setEnabled(false);
183
//                 }
184
//            }
185
            if (update){
186
                updateControls();
187
            }
188
        }
189

    
190
        private void setEnabledControls(boolean enabled){
191
            element_Label.setEnabled(enabled);
192
            element_abbrevLabel.setEnabled(enabled);
193
            element_plural.setEnabled(enabled);
194
            element_text.setEnabled(enabled);
195
        }
196

    
197
        @Override
198
        public void setEnabled(boolean isEnabled){
199
            this.isEnabled = isEnabled;
200
            setEnabledControls(isEnabled);
201

    
202
        }
203

    
204
        @Override
205
        public boolean isEnabled(){
206
            return isEnabled;
207
        }
208

    
209
        protected void updateControls() {
210
            Representation preferredRepresentation = null;
211
            if (term != null){
212
                 preferredRepresentation = term
213
                    .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
214
            }else{
215
                 preferredRepresentation = termDto
216
                        .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
217
            }
218

    
219
            element_Label.setText(preferredRepresentation != null? preferredRepresentation.getLabel(): null);
220
            element_abbrevLabel.setText(preferredRepresentation != null? preferredRepresentation.getAbbreviatedLabel(): null);
221
            element_plural.setText(preferredRepresentation != null? preferredRepresentation.getPlural(): null);
222
            element_text.setText(preferredRepresentation != null? preferredRepresentation.getDescription(): null);
223
            selectedRepresentation = preferredRepresentation;
224
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
225
                combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
226
                boolean removePossible = false;
227
                if (term != null){
228
                    removePossible = term.getRepresentations().size() > 1 ;
229
                }else{
230
                    removePossible = termDto.getRepresentations().size() > 1 ;
231
                }
232
                removeRepresentation.setEnabled(removePossible);
233

    
234
            }
235
        }
236

    
237
        public TermBase getTerm() {
238
            return term;
239
        }
240
        public AbstractTermDto getTermDto() {
241
            return termDto;
242
        }
243

    
244
        @Override
245
        public void propertyChange(PropertyChangeEvent event) {
246
            if (event == null) {
247
                return;
248
            }
249
            Object eventSource = event.getSource();
250

    
251
            if (eventSource == element_abbrevLabel) {
252
                String abbrevLabel = ((TextWithLabelElement) eventSource)
253
                        .getText();
254
                selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
255
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
256
            }
257
            else if (eventSource == element_plural){
258
                String plural = ((TextWithLabelElement) eventSource)
259
                        .getText();
260
                selectedRepresentation.setPlural(plural);
261
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
262
            } else if (eventSource == element_Label){
263
                String label = ((TextWithLabelElement) eventSource)
264
                        .getText();
265
                selectedRepresentation.setLabel(label);
266
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
267
            } else if (eventSource == element_text){
268
                String text = ((TextWithLabelElement) eventSource)
269
                        .getText();
270
                selectedRepresentation.setText(text);
271
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
272
            } else if (eventSource == button){
273
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
274
            } else if (eventSource == combo_language){
275
                if (combo_language.getSelection() != null){
276
                    setEnabledControls(true);
277
                    boolean removePossible = false;
278
                    if (term != null){
279
                        removePossible = term.getRepresentations().size() > 1 ;
280
                    }else{
281
                        removePossible = termDto.getRepresentations().size() > 1 ;
282
                    }
283
                    removeRepresentation.setEnabled(removePossible);
284

    
285
                    Language selectedLanguage = combo_language.getSelection();
286
                    if (selectedLanguage != null) {
287
                    	if (getTerm() != null){
288
                    		selectedRepresentation = getTerm().getRepresentation(selectedLanguage);
289
                    	}else{
290
                    		selectedRepresentation = getTermDto().getRepresentation(selectedLanguage);
291
                    	}
292
                        if (selectedRepresentation == null){
293
                            selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
294
                        }
295
                        element_Label.setText(selectedRepresentation.getLabel());
296
                        element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
297
                        element_plural.setText(selectedRepresentation.getPlural());
298
                        element_text.setText(selectedRepresentation.getDescription());
299

    
300
                    }else {
301
                        setEnabledControls(false);
302
                    }
303
                } else{
304
                    setEnabledControls(false);
305
                    removeRepresentation.setEnabled(false);
306
                }
307
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
308
            }
309
        }
310

    
311
        public Representation getSelectedRepresentation() {
312
            return selectedRepresentation;
313
        }
314

    
315
        public void setSelectedRepresentation(Representation selectedRepresentation) {
316
            if (selectedRepresentation == null){
317
                selectedRepresentation = Representation.NewInstance("", "", "", null);
318
            }
319
            this.selectedRepresentation = selectedRepresentation;
320
        }
321

    
322
        private class DeleteListener extends SelectionAdapter {
323

    
324
    		private final RepresentationElement element;
325

    
326
    		public DeleteListener(RepresentationElement element) {
327
    			this.element = element;
328
    		}
329

    
330
    		@Override
331
    		public void widgetSelected(SelectionEvent e) {
332
    		    if (term != null){
333
    		        term.removeRepresentation(selectedRepresentation);
334
    		    }else {
335
    		        termDto.getRepresentations().remove(selectedRepresentation);
336
    		    }
337
    			firePropertyChangeEvent(new CdmPropertyChangeEvent(
338
    					this, e));
339
    			updateControls();
340
    		}
341
    	}
342
    }
343

    
344

    
(46-46/58)