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