fix #6101: add a check for multilanguage preference
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / RepresentationElement.java
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