#5908: fix that the combo box on the left hand side contains only available languages
[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.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
48 protected Representation selectedRepresentation;
49 protected TermBase term;
50
51 // protected final boolean isTranslationWizard;
52
53
54 /**
55 * <p>
56 * Constructor for MultilanguageTextElement.
57 * </p>
58 *
59 * @param formFactory
60 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
61 * object.
62 * @param formElement
63 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
64 * object.
65 *
66 * @param term
67 * a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
68 * @param textHeight
69 * a {@link java.lang.Integer} object.
70 * @param style
71 * a int.
72 */
73 public RepresentationElement(CdmFormFactory formFactory,
74 ICdmFormElement formElement, TermBase term,
75 Integer textHeight, int style) {
76 super(formFactory, formElement);
77
78 formFactory.addPropertyChangeListener(this);
79
80 element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
81 element_abbrevLabel = this.formFactory
82 .createTextWithLabelElement(formElement, "abbrev. Label",
83 null, style);
84 element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
85 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
86 createRepresentationEditingElements(formElement, style);
87 }
88 setTerm(term);
89
90 }
91
92 /**
93 * <p>
94 * Constructor for MultilanguageTextElement.
95 * </p>
96 *
97 * @param formFactory
98 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
99 * object.
100 * @param formElement
101 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
102 * object.
103 * @param representation
104 * a {@link eu.etaxonomy.cdm.model.common.Representation} object.
105 * @param term
106 * a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
107 * @param textHeight
108 * a {@link java.lang.Integer} object.
109 * @param style
110 * a int.
111 */
112 public RepresentationElement(CdmFormFactory formFactory,
113 ICdmFormElement formElement, Representation representation, TermBase term,
114 Integer textHeight, int style) {
115 super(formFactory, formElement);
116
117 formFactory.addPropertyChangeListener(this);
118
119 element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
120 element_abbrevLabel = this.formFactory
121 .createTextWithLabelElement(formElement, "abbrev. Label",
122 null, style);
123 element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
124 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
125 createRepresentationEditingElements(formElement, style);
126 }
127 setTerm(term);
128 setSelectedRepresentation(representation);
129
130
131 }
132
133 protected void createRepresentationEditingElements(
134 ICdmFormElement formElement, int style) {
135
136 combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
137 "", null, style);
138 combo_language.addSelectionListener(this);
139
140 addControl(formFactory.createLabel(getLayoutComposite(), ""));
141
142
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 }
179
180 }
181
182 /*
183 * (non-Javadoc)
184 *
185 * @see
186 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
187 * .swt.events.SelectionEvent)
188 */
189 /** {@inheritDoc} */
190 @Override
191 public void widgetDefaultSelected(SelectionEvent e) {
192 }
193
194 /**
195 * <p>
196 * Setter for the field <code>multilanguageText</code>.
197 * </p>
198 *
199 * @param multilanguageText
200 * the multilanguageText to set
201 */
202 public void setTerm(
203 TermBase term) {
204 this.term = term;
205
206 if (selectedRepresentation != null) {
207 combo_language.setTerms(getLanguages());
208 }
209 updateControls();
210 }
211
212 /**
213 *
214 */
215 protected void updateControls() {
216 Representation preferredRepresentation = term
217 .getPreferredRepresentation(Arrays.asList(new Language[] { CdmStore
218 .getDefaultLanguage() }));
219
220 element_Label.setText(preferredRepresentation.getLabel());
221 element_abbrevLabel.setText(preferredRepresentation.getAbbreviatedLabel());
222 element_text.setText(preferredRepresentation.getDescription());
223 selectedRepresentation = preferredRepresentation;
224 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
225 combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
226 }
227 }
228
229 /**
230 * <p>
231 * Getter for the field <code>multilanguageText</code>.
232 * </p>
233 *
234 * @return the multilanguageText
235 */
236 public TermBase getTerm() {
237 return term;
238 }
239
240 /*
241 * (non-Javadoc)
242 *
243 * @see
244 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
245 * .eclipse.jface.util.PropertyChangeEvent)
246 */
247 /** {@inheritDoc} */
248 @Override
249 public void propertyChange(PropertyChangeEvent event) {
250 if (event == null) {
251 return;
252 }
253 Object eventSource = event.getSource();
254
255 if (eventSource == element_abbrevLabel) {
256 String abbrevLabel = ((TextWithLabelElement) eventSource)
257 .getText();
258 selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
259 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
260 } else if (eventSource == element_Label){
261 String label = ((TextWithLabelElement) eventSource)
262 .getText();
263 selectedRepresentation.setLabel(label);
264 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
265 } else if (eventSource == element_text){
266 String text = ((TextWithLabelElement) eventSource)
267 .getText();
268 selectedRepresentation.setText(text);
269 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
270 }
271 }
272
273 /**
274 * @return the selectedRepresentation
275 */
276 public Representation getSelectedRepresentation() {
277 return selectedRepresentation;
278 }
279
280 /**
281 * @param selectedRepresentation the selectedRepresentation to set
282 */
283 public void setSelectedRepresentation(Representation selectedRepresentation) {
284 if (selectedRepresentation == null){
285 selectedRepresentation = Representation.NewInstance("", "", "", null);
286 }
287 this.selectedRepresentation = selectedRepresentation;
288 }
289 }
290
291