Project

General

Profile

Download (13.1 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.Arrays;
19
import java.util.Collections;
20
import java.util.List;
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.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
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.TermComboElement;
38

    
39

    
40
public class RepresentationElement  extends AbstractCdmFormElement implements
41
SelectionListener{
42

    
43
        protected TermComboElement<Language> combo_language;
44

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

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

    
54
		private Button removeRepresentation;
55

    
56
       // protected final boolean isTranslationWizard;
57

    
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
                Integer textHeight, int style, boolean fill) {
81
            super(formFactory, formElement);
82

    
83
            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
            setTerm(term, fill);
94

    
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
                Integer textHeight, int style, boolean fill) {
120
            super(formFactory, formElement);
121

    
122
            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
            setTerm(term, fill);
133
            setSelectedRepresentation(representation);
134

    
135

    
136
        }
137

    
138
        protected void createRepresentationEditingElements(
139
                ICdmFormElement formElement, int style) {
140
        	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
            combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
149
                            "", null, false, style);
150

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

    
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
                
189
            }else {
190
            	 
191
            	 element_Label.setEnabled(false);
192
                 element_abbrevLabel.setEnabled(false);
193
                 element_text.setEnabled(false);
194
            }
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
                TermBase term, boolean update) {
220
            this.term = term;
221
            if (term.getRepresentations().isEmpty()){
222
            	//if the term has no representation at all, create a default one.
223
            	Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
224
            	term.addRepresentation(rep);
225
            }
226

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

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

    
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
                boolean removePossible = term.getRepresentations().size() > 1 ;
257
                removeRepresentation.setEnabled(removePossible);
258
                
259
            }
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
            } else if (eventSource == button){
304
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
305
            } 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
            		 boolean removePossible = term.getRepresentations().size() > 1 ;
311
                     removeRepresentation.setEnabled(removePossible);
312
            	} else{
313
            		 element_Label.setEnabled(false);
314
                     element_abbrevLabel.setEnabled(false);
315
                     element_text.setEnabled(false);
316
                     removeRepresentation.setEnabled(false);
317
            	}
318
            	firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
319
            }
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
        
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
    }
356

    
357

    
(36-36/45)