Project

General

Profile

Download (13.1 KB) Statistics
| Branch: | Tag: | Revision:
1 cd123c06 Katja Luther
/**
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.Arrays;
19
import java.util.Collections;
20
import java.util.List;
21
22
import org.eclipse.jface.util.PropertyChangeEvent;
23 cec14c01 Katja Luther
import org.eclipse.swt.SWT;
24
import org.eclipse.swt.events.SelectionAdapter;
25 cd123c06 Katja Luther
import org.eclipse.swt.events.SelectionEvent;
26
import org.eclipse.swt.events.SelectionListener;
27
import org.eclipse.swt.widgets.Button;
28
29
import eu.etaxonomy.cdm.model.common.Language;
30
import eu.etaxonomy.cdm.model.common.Representation;
31
import eu.etaxonomy.cdm.model.common.TermBase;
32
import eu.etaxonomy.cdm.model.common.TermType;
33
import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
34 cec14c01 Katja Luther
import eu.etaxonomy.taxeditor.model.ImageResources;
35 cd123c06 Katja Luther
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
36
import eu.etaxonomy.taxeditor.store.CdmStore;
37
import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
38
39 cec14c01 Katja Luther
40 cd123c06 Katja Luther
public class RepresentationElement  extends AbstractCdmFormElement implements
41
SelectionListener{
42
43 01b09f61 Katja Luther
        protected TermComboElement<Language> combo_language;
44 cd123c06 Katja Luther
45
        protected TextWithLabelElement element_Label;
46
        protected TextWithLabelElement element_abbrevLabel;
47
        protected TextWithLabelElement element_text;
48
49 01b09f61 Katja Luther
        protected Button button;
50 cec14c01 Katja Luther
       
51 01b09f61 Katja Luther
        protected Representation selectedRepresentation;
52
        protected TermBase term;
53 cd123c06 Katja Luther
54 cec14c01 Katja Luther
		private Button removeRepresentation;
55
56 01b09f61 Katja Luther
       // protected final boolean isTranslationWizard;
57 cd123c06 Katja Luther
58
59
        /**
60
         * <p>
61
         * Constructor for MultilanguageTextElement.
62
         * </p>
63
         *
64
         * @param formFactory
65
         *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
66
         *            object.
67
         * @param formElement
68
         *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
69
         *            object.
70
         *
71
         * @param term
72
         *            a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
73
         * @param textHeight
74
         *            a {@link java.lang.Integer} object.
75
         * @param style
76
         *            a int.
77
         */
78
        public RepresentationElement(CdmFormFactory formFactory,
79
                ICdmFormElement formElement, TermBase term,
80 3fa460e5 Katja Luther
                Integer textHeight, int style, boolean fill) {
81 cd123c06 Katja Luther
            super(formFactory, formElement);
82 01b09f61 Katja Luther
83 cd123c06 Katja Luther
            formFactory.addPropertyChangeListener(this);
84
85
            element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
86
            element_abbrevLabel = this.formFactory
87
                    .createTextWithLabelElement(formElement, "abbrev. Label",
88
                            null, style);
89
            element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
90
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
91
                createRepresentationEditingElements(formElement, style);
92
            }
93 3fa460e5 Katja Luther
            setTerm(term, fill);
94 cd123c06 Katja Luther
95
        }
96
97
        /**
98
         * <p>
99
         * Constructor for MultilanguageTextElement.
100
         * </p>
101
         *
102
         * @param formFactory
103
         *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
104
         *            object.
105
         * @param formElement
106
         *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
107
         *            object.
108
         * @param representation
109
         *            a {@link eu.etaxonomy.cdm.model.common.Representation} object.
110
         * @param term
111
         *            a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
112
         * @param textHeight
113
         *            a {@link java.lang.Integer} object.
114
         * @param style
115
         *            a int.
116
         */
117
        public RepresentationElement(CdmFormFactory formFactory,
118
                ICdmFormElement formElement, Representation representation, TermBase term,
119 3fa460e5 Katja Luther
                Integer textHeight, int style, boolean fill) {
120 cd123c06 Katja Luther
            super(formFactory, formElement);
121 01b09f61 Katja Luther
122 cd123c06 Katja Luther
            formFactory.addPropertyChangeListener(this);
123
124
            element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
125
            element_abbrevLabel = this.formFactory
126
                    .createTextWithLabelElement(formElement, "abbrev. Label",
127
                            null, style);
128
            element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
129
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
130
                createRepresentationEditingElements(formElement, style);
131
            }
132 3fa460e5 Katja Luther
            setTerm(term, fill);
133 cd123c06 Katja Luther
            setSelectedRepresentation(representation);
134
135
136
        }
137
138 01b09f61 Katja Luther
        protected void createRepresentationEditingElements(
139 cd123c06 Katja Luther
                ICdmFormElement formElement, int style) {
140 cec14c01 Katja Luther
        	removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
141
    				SWT.PUSH);
142
    		removeRepresentation.setImage(ImageResources
143
    				.getImage(ImageResources.TRASH_ICON));
144
    		removeRepresentation.setToolTipText("Remove representation");
145
    		removeRepresentation.addSelectionListener(new DeleteListener(this));
146
    		addControl(removeRepresentation);
147
    		
148 cd123c06 Katja Luther
            combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
149 1103732d Katja Luther
                            "", null, false, style);
150 b5bbb82f Katja Luther
151 cd123c06 Katja Luther
            combo_language.addSelectionListener(this);
152 cec14c01 Katja Luther
            
153
            //addControl(formFactory.createLabel(getLayoutComposite(), ""));
154 6c56ee87 Katja Luther
       }
155 cd123c06 Katja Luther
156
        public List<Language> getLanguages() {
157
158
            ArrayList<Language> languageList = new ArrayList<Language>();
159
            for (Representation rep: term.getRepresentations()){
160
                languageList.add(rep.getLanguage());
161
            }
162
163
            Collections.sort(languageList, new DefaultTermComparator<Language>());
164
165
            return languageList;
166
        }
167
168
        /*
169
         * (non-Javadoc)
170
         *
171
         * @see
172
         * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
173
         * .events.SelectionEvent)
174
         */
175
        /** {@inheritDoc} */
176
        @Override
177
        public void widgetSelected(SelectionEvent e) {
178
            Language selectedLanguage = combo_language.getSelection();
179
            if (selectedLanguage != null) {
180
                selectedRepresentation = getTerm().getRepresentation(
181
                        selectedLanguage);
182
                if (selectedRepresentation == null){
183
                    selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
184
                }
185
                element_Label.setText(selectedRepresentation.getLabel());
186
                element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
187
                element_text.setText(selectedRepresentation.getDescription());
188 1103732d Katja Luther
                
189 8eea1bc4 Katja Luther
            }else {
190 1103732d Katja Luther
            	 
191 8eea1bc4 Katja Luther
            	 element_Label.setEnabled(false);
192
                 element_abbrevLabel.setEnabled(false);
193
                 element_text.setEnabled(false);
194 cd123c06 Katja Luther
            }
195
196
        }
197
198
        /*
199
         * (non-Javadoc)
200
         *
201
         * @see
202
         * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
203
         * .swt.events.SelectionEvent)
204
         */
205
        /** {@inheritDoc} */
206
        @Override
207
        public void widgetDefaultSelected(SelectionEvent e) {
208
        }
209
210
        /**
211
         * <p>
212
         * Setter for the field <code>multilanguageText</code>.
213
         * </p>
214
         *
215
         * @param multilanguageText
216
         *            the multilanguageText to set
217
         */
218
        public void setTerm(
219 3fa460e5 Katja Luther
                TermBase term, boolean update) {
220 cd123c06 Katja Luther
            this.term = term;
221 6c56ee87 Katja Luther
            if (term.getRepresentations().isEmpty()){
222
            	//if the term has no representation at all, create a default one.
223 8eea1bc4 Katja Luther
            	Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
224 6c56ee87 Katja Luther
            	term.addRepresentation(rep);
225
            }
226 cd123c06 Katja Luther
227
            if (selectedRepresentation != null) {
228
               combo_language.setTerms(getLanguages());
229 cec14c01 Katja Luther
               
230 8eea1bc4 Katja Luther
            } else{
231
            	 element_Label.setEnabled(false);
232
                 element_abbrevLabel.setEnabled(false);
233
                 element_text.setEnabled(false);
234 db09bbf4 Katja Luther
                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
235
                	 removeRepresentation.setEnabled(false);
236
                 }
237 cd123c06 Katja Luther
            }
238 3fa460e5 Katja Luther
            if (update){
239
            	updateControls();
240
            }
241 cd123c06 Katja Luther
        }
242
243
        /**
244
         *
245
         */
246 01b09f61 Katja Luther
        protected void updateControls() {
247 cd123c06 Katja Luther
            Representation preferredRepresentation = term
248 3fa460e5 Katja Luther
                    .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
249 cd123c06 Katja Luther
250
            element_Label.setText(preferredRepresentation.getLabel());
251
            element_abbrevLabel.setText(preferredRepresentation.getAbbreviatedLabel());
252
            element_text.setText(preferredRepresentation.getDescription());
253
            selectedRepresentation = preferredRepresentation;
254
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
255
                combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
256 c1fd631d Katja Luther
                boolean removePossible = term.getRepresentations().size() > 1 ;
257 cec14c01 Katja Luther
                removeRepresentation.setEnabled(removePossible);
258
                
259 cd123c06 Katja Luther
            }
260
        }
261
262
        /**
263
         * <p>
264
         * Getter for the field <code>multilanguageText</code>.
265
         * </p>
266
         *
267
         * @return the multilanguageText
268
         */
269
        public TermBase getTerm() {
270
            return term;
271
        }
272
273
        /*
274
         * (non-Javadoc)
275
         *
276
         * @see
277
         * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
278
         * .eclipse.jface.util.PropertyChangeEvent)
279
         */
280
        /** {@inheritDoc} */
281
        @Override
282
        public void propertyChange(PropertyChangeEvent event) {
283
            if (event == null) {
284
                return;
285
            }
286
            Object eventSource = event.getSource();
287
288
            if (eventSource == element_abbrevLabel) {
289
                String abbrevLabel = ((TextWithLabelElement) eventSource)
290
                        .getText();
291
                selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
292
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
293
            } else if (eventSource == element_Label){
294
                String label = ((TextWithLabelElement) eventSource)
295
                        .getText();
296
                selectedRepresentation.setLabel(label);
297
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
298
            } else if (eventSource == element_text){
299
                String text = ((TextWithLabelElement) eventSource)
300
                        .getText();
301
                selectedRepresentation.setText(text);
302
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
303 3fa460e5 Katja Luther
            } else if (eventSource == button){
304
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
305 8eea1bc4 Katja Luther
            } else if (eventSource == combo_language){
306
            	if (combo_language.getSelection() != null){
307
            		element_Label.setEnabled(true);
308
            		element_abbrevLabel.setEnabled(true);
309
            		element_text.setEnabled(true);
310 c1fd631d Katja Luther
            		 boolean removePossible = term.getRepresentations().size() > 1 ;
311 cec14c01 Katja Luther
                     removeRepresentation.setEnabled(removePossible);
312 8eea1bc4 Katja Luther
            	} else{
313
            		 element_Label.setEnabled(false);
314
                     element_abbrevLabel.setEnabled(false);
315
                     element_text.setEnabled(false);
316 cec14c01 Katja Luther
                     removeRepresentation.setEnabled(false);
317 8eea1bc4 Katja Luther
            	}
318
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
319 cd123c06 Katja Luther
            }
320
        }
321
322
        /**
323
         * @return the selectedRepresentation
324
         */
325
        public Representation getSelectedRepresentation() {
326
            return selectedRepresentation;
327
        }
328
329
        /**
330
         * @param selectedRepresentation the selectedRepresentation to set
331
         */
332
        public void setSelectedRepresentation(Representation selectedRepresentation) {
333
            if (selectedRepresentation == null){
334
                selectedRepresentation = Representation.NewInstance("", "", "", null);
335
            }
336
            this.selectedRepresentation = selectedRepresentation;
337
        }
338 cec14c01 Katja Luther
        
339
        private class DeleteListener extends SelectionAdapter {
340
341
    		private final RepresentationElement element;
342
343
    		public DeleteListener(RepresentationElement element) {
344
    			this.element = element;
345
    		}
346
347
    		@Override
348
    		public void widgetSelected(SelectionEvent e) {
349
    			term.removeRepresentation(selectedRepresentation);
350
    			firePropertyChangeEvent(new CdmPropertyChangeEvent(
351
    					this, e));
352
    			updateControls();
353
    		}
354
    	}
355 cd123c06 Katja Luther
    }
356