b17f8e903cc3c1a6e299eed1666c2e498137da7b
[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, boolean fill) {
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, fill);
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, boolean fill) {
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, fill);
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, true, style);
138
139 combo_language.addSelectionListener(this);
140
141 addControl(formFactory.createLabel(getLayoutComposite(), ""));
142
143
144 }
145
146 public List<Language> getLanguages() {
147
148 ArrayList<Language> languageList = new ArrayList<Language>();
149 for (Representation rep: term.getRepresentations()){
150 languageList.add(rep.getLanguage());
151 }
152
153 Collections.sort(languageList, new DefaultTermComparator<Language>());
154
155 return languageList;
156 }
157
158 /*
159 * (non-Javadoc)
160 *
161 * @see
162 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
163 * .events.SelectionEvent)
164 */
165 /** {@inheritDoc} */
166 @Override
167 public void widgetSelected(SelectionEvent e) {
168 Language selectedLanguage = combo_language.getSelection();
169 if (selectedLanguage != null) {
170 selectedRepresentation = getTerm().getRepresentation(
171 selectedLanguage);
172 if (selectedRepresentation == null){
173 selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
174 }
175 element_Label.setText(selectedRepresentation.getLabel());
176 element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
177 element_text.setText(selectedRepresentation.getDescription());
178
179 }
180
181 }
182
183 /*
184 * (non-Javadoc)
185 *
186 * @see
187 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
188 * .swt.events.SelectionEvent)
189 */
190 /** {@inheritDoc} */
191 @Override
192 public void widgetDefaultSelected(SelectionEvent e) {
193 }
194
195 /**
196 * <p>
197 * Setter for the field <code>multilanguageText</code>.
198 * </p>
199 *
200 * @param multilanguageText
201 * the multilanguageText to set
202 */
203 public void setTerm(
204 TermBase term, boolean update) {
205 this.term = term;
206
207 if (selectedRepresentation != null) {
208 combo_language.setTerms(getLanguages());
209 }
210 if (update){
211 updateControls();
212 }
213 }
214
215 /**
216 *
217 */
218 protected void updateControls() {
219 Representation preferredRepresentation = term
220 .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
221
222 element_Label.setText(preferredRepresentation.getLabel());
223 element_abbrevLabel.setText(preferredRepresentation.getAbbreviatedLabel());
224 element_text.setText(preferredRepresentation.getDescription());
225 selectedRepresentation = preferredRepresentation;
226 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
227 combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
228 }
229 }
230
231 /**
232 * <p>
233 * Getter for the field <code>multilanguageText</code>.
234 * </p>
235 *
236 * @return the multilanguageText
237 */
238 public TermBase getTerm() {
239 return term;
240 }
241
242 /*
243 * (non-Javadoc)
244 *
245 * @see
246 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
247 * .eclipse.jface.util.PropertyChangeEvent)
248 */
249 /** {@inheritDoc} */
250 @Override
251 public void propertyChange(PropertyChangeEvent event) {
252 if (event == null) {
253 return;
254 }
255 Object eventSource = event.getSource();
256
257 if (eventSource == element_abbrevLabel) {
258 String abbrevLabel = ((TextWithLabelElement) eventSource)
259 .getText();
260 selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
261 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
262 } else if (eventSource == element_Label){
263 String label = ((TextWithLabelElement) eventSource)
264 .getText();
265 selectedRepresentation.setLabel(label);
266 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
267 } else if (eventSource == element_text){
268 String text = ((TextWithLabelElement) eventSource)
269 .getText();
270 selectedRepresentation.setText(text);
271 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
272 } else if (eventSource == button){
273 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
274 }
275 }
276
277 /**
278 * @return the selectedRepresentation
279 */
280 public Representation getSelectedRepresentation() {
281 return selectedRepresentation;
282 }
283
284 /**
285 * @param selectedRepresentation the selectedRepresentation to set
286 */
287 public void setSelectedRepresentation(Representation selectedRepresentation) {
288 if (selectedRepresentation == null){
289 selectedRepresentation = Representation.NewInstance("", "", "", null);
290 }
291 this.selectedRepresentation = selectedRepresentation;
292 }
293 }
294
295