Project

General

Profile

Download (11.6 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2016 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.taxeditor.ui.element;
11

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

    
18
import java.util.ArrayList;
19
import java.util.Arrays;
20
import java.util.Collections;
21
import java.util.List;
22

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

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

    
37
public class RepresentationElement  extends AbstractCdmFormElement implements
38
SelectionListener{
39

    
40
        protected TermComboElement<Language> combo_language;
41

    
42
        protected TextWithLabelElement element_Label;
43
        protected TextWithLabelElement element_abbrevLabel;
44
        protected TextWithLabelElement element_text;
45

    
46
        protected Button button;
47
        //protected Button deleteButton;
48

    
49
        protected Representation selectedRepresentation;
50
        protected TermBase term;
51

    
52
       // protected final boolean isTranslationWizard;
53

    
54

    
55
        /**
56
         * <p>
57
         * Constructor for MultilanguageTextElement.
58
         * </p>
59
         *
60
         * @param formFactory
61
         *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
62
         *            object.
63
         * @param formElement
64
         *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
65
         *            object.
66
         *
67
         * @param term
68
         *            a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
69
         * @param textHeight
70
         *            a {@link java.lang.Integer} object.
71
         * @param style
72
         *            a int.
73
         */
74
        public RepresentationElement(CdmFormFactory formFactory,
75
                ICdmFormElement formElement, TermBase term,
76
                Integer textHeight, int style, boolean fill) {
77
            super(formFactory, formElement);
78

    
79
            formFactory.addPropertyChangeListener(this);
80

    
81
            element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
82
            element_abbrevLabel = this.formFactory
83
                    .createTextWithLabelElement(formElement, "abbrev. Label",
84
                            null, style);
85
            element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
86
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
87
                createRepresentationEditingElements(formElement, style);
88
            }
89
            setTerm(term, fill);
90

    
91
        }
92

    
93
        /**
94
         * <p>
95
         * Constructor for MultilanguageTextElement.
96
         * </p>
97
         *
98
         * @param formFactory
99
         *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
100
         *            object.
101
         * @param formElement
102
         *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
103
         *            object.
104
         * @param representation
105
         *            a {@link eu.etaxonomy.cdm.model.common.Representation} object.
106
         * @param term
107
         *            a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
108
         * @param textHeight
109
         *            a {@link java.lang.Integer} object.
110
         * @param style
111
         *            a int.
112
         */
113
        public RepresentationElement(CdmFormFactory formFactory,
114
                ICdmFormElement formElement, Representation representation, TermBase term,
115
                Integer textHeight, int style, boolean fill) {
116
            super(formFactory, formElement);
117

    
118
            formFactory.addPropertyChangeListener(this);
119

    
120
            element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
121
            element_abbrevLabel = this.formFactory
122
                    .createTextWithLabelElement(formElement, "abbrev. Label",
123
                            null, style);
124
            element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
125
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
126
                createRepresentationEditingElements(formElement, style);
127
            }
128
            setTerm(term, fill);
129
            setSelectedRepresentation(representation);
130

    
131

    
132
        }
133

    
134
        protected void createRepresentationEditingElements(
135
                ICdmFormElement formElement, int style) {
136

    
137
            combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
138
                            "", null, false, style);
139

    
140
            combo_language.addSelectionListener(this);
141

    
142
            addControl(formFactory.createLabel(getLayoutComposite(), ""));
143
       }
144

    
145
        public List<Language> getLanguages() {
146

    
147
            ArrayList<Language> languageList = new ArrayList<Language>();
148
            for (Representation rep: term.getRepresentations()){
149
                languageList.add(rep.getLanguage());
150
            }
151

    
152
            Collections.sort(languageList, new DefaultTermComparator<Language>());
153

    
154
            return languageList;
155
        }
156

    
157
        /*
158
         * (non-Javadoc)
159
         *
160
         * @see
161
         * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
162
         * .events.SelectionEvent)
163
         */
164
        /** {@inheritDoc} */
165
        @Override
166
        public void widgetSelected(SelectionEvent e) {
167
            Language selectedLanguage = combo_language.getSelection();
168
            if (selectedLanguage != null) {
169
                selectedRepresentation = getTerm().getRepresentation(
170
                        selectedLanguage);
171
                if (selectedRepresentation == null){
172
                    selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
173
                }
174
                element_Label.setText(selectedRepresentation.getLabel());
175
                element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
176
                element_text.setText(selectedRepresentation.getDescription());
177
                
178
            }else {
179
            	 
180
            	 element_Label.setEnabled(false);
181
                 element_abbrevLabel.setEnabled(false);
182
                 element_text.setEnabled(false);
183
            }
184

    
185
        }
186

    
187
        /*
188
         * (non-Javadoc)
189
         *
190
         * @see
191
         * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
192
         * .swt.events.SelectionEvent)
193
         */
194
        /** {@inheritDoc} */
195
        @Override
196
        public void widgetDefaultSelected(SelectionEvent e) {
197
        }
198

    
199
        /**
200
         * <p>
201
         * Setter for the field <code>multilanguageText</code>.
202
         * </p>
203
         *
204
         * @param multilanguageText
205
         *            the multilanguageText to set
206
         */
207
        public void setTerm(
208
                TermBase term, boolean update) {
209
            this.term = term;
210
            if (term.getRepresentations().isEmpty()){
211
            	//if the term has no representation at all, create a default one.
212
            	Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
213
            	term.addRepresentation(rep);
214
            }
215

    
216
            if (selectedRepresentation != null) {
217
               combo_language.setTerms(getLanguages());
218
            } else{
219
            	 element_Label.setEnabled(false);
220
                 element_abbrevLabel.setEnabled(false);
221
                 element_text.setEnabled(false);
222
            }
223
            if (update){
224
            	updateControls();
225
            }
226
        }
227

    
228
        /**
229
         *
230
         */
231
        protected void updateControls() {
232
            Representation preferredRepresentation = term
233
                    .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
234

    
235
            element_Label.setText(preferredRepresentation.getLabel());
236
            element_abbrevLabel.setText(preferredRepresentation.getAbbreviatedLabel());
237
            element_text.setText(preferredRepresentation.getDescription());
238
            selectedRepresentation = preferredRepresentation;
239
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
240
                combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
241
            }
242
        }
243

    
244
        /**
245
         * <p>
246
         * Getter for the field <code>multilanguageText</code>.
247
         * </p>
248
         *
249
         * @return the multilanguageText
250
         */
251
        public TermBase getTerm() {
252
            return term;
253
        }
254

    
255
        /*
256
         * (non-Javadoc)
257
         *
258
         * @see
259
         * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
260
         * .eclipse.jface.util.PropertyChangeEvent)
261
         */
262
        /** {@inheritDoc} */
263
        @Override
264
        public void propertyChange(PropertyChangeEvent event) {
265
            if (event == null) {
266
                return;
267
            }
268
            Object eventSource = event.getSource();
269

    
270
            if (eventSource == element_abbrevLabel) {
271
                String abbrevLabel = ((TextWithLabelElement) eventSource)
272
                        .getText();
273
                selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
274
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
275
            } else if (eventSource == element_Label){
276
                String label = ((TextWithLabelElement) eventSource)
277
                        .getText();
278
                selectedRepresentation.setLabel(label);
279
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
280
            } else if (eventSource == element_text){
281
                String text = ((TextWithLabelElement) eventSource)
282
                        .getText();
283
                selectedRepresentation.setText(text);
284
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
285
            } else if (eventSource == button){
286
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
287
            } else if (eventSource == combo_language){
288
            	if (combo_language.getSelection() != null){
289
            		element_Label.setEnabled(true);
290
            		element_abbrevLabel.setEnabled(true);
291
            		element_text.setEnabled(true);
292
            	} else{
293
            		 element_Label.setEnabled(false);
294
                     element_abbrevLabel.setEnabled(false);
295
                     element_text.setEnabled(false);
296
            	}
297
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
298
            }
299
        }
300

    
301
        /**
302
         * @return the selectedRepresentation
303
         */
304
        public Representation getSelectedRepresentation() {
305
            return selectedRepresentation;
306
        }
307

    
308
        /**
309
         * @param selectedRepresentation the selectedRepresentation to set
310
         */
311
        public void setSelectedRepresentation(Representation selectedRepresentation) {
312
            if (selectedRepresentation == null){
313
                selectedRepresentation = Representation.NewInstance("", "", "", null);
314
            }
315
            this.selectedRepresentation = selectedRepresentation;
316
        }
317
    }
318

    
319

    
(36-36/44)