Project

General

Profile

Download (13.1 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.SWT;
25
import org.eclipse.swt.events.SelectionAdapter;
26
import org.eclipse.swt.events.SelectionEvent;
27
import org.eclipse.swt.events.SelectionListener;
28
import org.eclipse.swt.widgets.Button;
29

    
30
import eu.etaxonomy.cdm.model.common.Language;
31
import eu.etaxonomy.cdm.model.common.Representation;
32
import eu.etaxonomy.cdm.model.common.TermBase;
33
import eu.etaxonomy.cdm.model.common.TermType;
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.TermComboElement;
39

    
40

    
41
public class RepresentationElement  extends AbstractCdmFormElement implements
42
SelectionListener{
43

    
44
        protected TermComboElement<Language> combo_language;
45

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

    
50
        protected Button button;
51
       
52
        protected Representation selectedRepresentation;
53
        protected TermBase term;
54

    
55
		private Button removeRepresentation;
56

    
57
       // protected final boolean isTranslationWizard;
58

    
59

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

    
84
            formFactory.addPropertyChangeListener(this);
85

    
86
            element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
87
            element_abbrevLabel = this.formFactory
88
                    .createTextWithLabelElement(formElement, "abbrev. Label",
89
                            null, style);
90
            element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
91
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
92
                createRepresentationEditingElements(formElement, style);
93
            }
94
            setTerm(term, fill);
95

    
96
        }
97

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

    
123
            formFactory.addPropertyChangeListener(this);
124

    
125
            element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
126
            element_abbrevLabel = this.formFactory
127
                    .createTextWithLabelElement(formElement, "abbrev. Label",
128
                            null, style);
129
            element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
130
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
131
                createRepresentationEditingElements(formElement, style);
132
            }
133
            setTerm(term, fill);
134
            setSelectedRepresentation(representation);
135

    
136

    
137
        }
138

    
139
        protected void createRepresentationEditingElements(
140
                ICdmFormElement formElement, int style) {
141
        	removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
142
    				SWT.PUSH);
143
    		removeRepresentation.setImage(ImageResources
144
    				.getImage(ImageResources.TRASH_ICON));
145
    		removeRepresentation.setToolTipText("Remove representation");
146
    		removeRepresentation.addSelectionListener(new DeleteListener(this));
147
    		addControl(removeRepresentation);
148
    		
149
            combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
150
                            "", null, false, style);
151

    
152
            combo_language.addSelectionListener(this);
153
            
154
            //addControl(formFactory.createLabel(getLayoutComposite(), ""));
155
       }
156

    
157
        public List<Language> getLanguages() {
158

    
159
            ArrayList<Language> languageList = new ArrayList<Language>();
160
            for (Representation rep: term.getRepresentations()){
161
                languageList.add(rep.getLanguage());
162
            }
163

    
164
            Collections.sort(languageList, new DefaultTermComparator<Language>());
165

    
166
            return languageList;
167
        }
168

    
169
        /*
170
         * (non-Javadoc)
171
         *
172
         * @see
173
         * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
174
         * .events.SelectionEvent)
175
         */
176
        /** {@inheritDoc} */
177
        @Override
178
        public void widgetSelected(SelectionEvent e) {
179
            Language selectedLanguage = combo_language.getSelection();
180
            if (selectedLanguage != null) {
181
                selectedRepresentation = getTerm().getRepresentation(
182
                        selectedLanguage);
183
                if (selectedRepresentation == null){
184
                    selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
185
                }
186
                element_Label.setText(selectedRepresentation.getLabel());
187
                element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
188
                element_text.setText(selectedRepresentation.getDescription());
189
                
190
            }else {
191
            	 
192
            	 element_Label.setEnabled(false);
193
                 element_abbrevLabel.setEnabled(false);
194
                 element_text.setEnabled(false);
195
            }
196

    
197
        }
198

    
199
        /*
200
         * (non-Javadoc)
201
         *
202
         * @see
203
         * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
204
         * .swt.events.SelectionEvent)
205
         */
206
        /** {@inheritDoc} */
207
        @Override
208
        public void widgetDefaultSelected(SelectionEvent e) {
209
        }
210

    
211
        /**
212
         * <p>
213
         * Setter for the field <code>multilanguageText</code>.
214
         * </p>
215
         *
216
         * @param multilanguageText
217
         *            the multilanguageText to set
218
         */
219
        public void setTerm(
220
                TermBase term, boolean update) {
221
            this.term = term;
222
            if (term.getRepresentations().isEmpty()){
223
            	//if the term has no representation at all, create a default one.
224
            	Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
225
            	term.addRepresentation(rep);
226
            }
227

    
228
            if (selectedRepresentation != null) {
229
               combo_language.setTerms(getLanguages());
230
               
231
            } else{
232
            	 element_Label.setEnabled(false);
233
                 element_abbrevLabel.setEnabled(false);
234
                 element_text.setEnabled(false);
235
                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
236
                	 removeRepresentation.setEnabled(false);
237
                 }
238
            }
239
            if (update){
240
            	updateControls();
241
            }
242
        }
243

    
244
        /**
245
         *
246
         */
247
        protected void updateControls() {
248
            Representation preferredRepresentation = term
249
                    .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
250

    
251
            element_Label.setText(preferredRepresentation.getLabel());
252
            element_abbrevLabel.setText(preferredRepresentation.getAbbreviatedLabel());
253
            element_text.setText(preferredRepresentation.getDescription());
254
            selectedRepresentation = preferredRepresentation;
255
            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
256
                combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
257
                boolean removePossible = term.getRepresentations().size() > 1 ;
258
                removeRepresentation.setEnabled(removePossible);
259
                
260
            }
261
        }
262

    
263
        /**
264
         * <p>
265
         * Getter for the field <code>multilanguageText</code>.
266
         * </p>
267
         *
268
         * @return the multilanguageText
269
         */
270
        public TermBase getTerm() {
271
            return term;
272
        }
273

    
274
        /*
275
         * (non-Javadoc)
276
         *
277
         * @see
278
         * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
279
         * .eclipse.jface.util.PropertyChangeEvent)
280
         */
281
        /** {@inheritDoc} */
282
        @Override
283
        public void propertyChange(PropertyChangeEvent event) {
284
            if (event == null) {
285
                return;
286
            }
287
            Object eventSource = event.getSource();
288

    
289
            if (eventSource == element_abbrevLabel) {
290
                String abbrevLabel = ((TextWithLabelElement) eventSource)
291
                        .getText();
292
                selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
293
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
294
            } else if (eventSource == element_Label){
295
                String label = ((TextWithLabelElement) eventSource)
296
                        .getText();
297
                selectedRepresentation.setLabel(label);
298
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
299
            } else if (eventSource == element_text){
300
                String text = ((TextWithLabelElement) eventSource)
301
                        .getText();
302
                selectedRepresentation.setText(text);
303
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
304
            } else if (eventSource == button){
305
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
306
            } else if (eventSource == combo_language){
307
            	if (combo_language.getSelection() != null){
308
            		element_Label.setEnabled(true);
309
            		element_abbrevLabel.setEnabled(true);
310
            		element_text.setEnabled(true);
311
            		 boolean removePossible = term.getRepresentations().size() > 1 ;
312
                     removeRepresentation.setEnabled(removePossible);
313
            	} else{
314
            		 element_Label.setEnabled(false);
315
                     element_abbrevLabel.setEnabled(false);
316
                     element_text.setEnabled(false);
317
                     removeRepresentation.setEnabled(false);
318
            	}
319
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
320
            }
321
        }
322

    
323
        /**
324
         * @return the selectedRepresentation
325
         */
326
        public Representation getSelectedRepresentation() {
327
            return selectedRepresentation;
328
        }
329

    
330
        /**
331
         * @param selectedRepresentation the selectedRepresentation to set
332
         */
333
        public void setSelectedRepresentation(Representation selectedRepresentation) {
334
            if (selectedRepresentation == null){
335
                selectedRepresentation = Representation.NewInstance("", "", "", null);
336
            }
337
            this.selectedRepresentation = selectedRepresentation;
338
        }
339
        
340
        private class DeleteListener extends SelectionAdapter {
341

    
342
    		private final RepresentationElement element;
343

    
344
    		public DeleteListener(RepresentationElement element) {
345
    			this.element = element;
346
    		}
347

    
348
    		@Override
349
    		public void widgetSelected(SelectionEvent e) {
350
    			term.removeRepresentation(selectedRepresentation);
351
    			firePropertyChangeEvent(new CdmPropertyChangeEvent(
352
    					this, e));
353
    			updateControls();
354
    		}
355
    	}
356
    }
357

    
358

    
(36-36/44)