cleanup
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / RepresentationElement.java
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.Collections;
19 import java.util.List;
20 import java.util.Set;
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.widgets.Button;
27
28 import eu.etaxonomy.cdm.model.common.Language;
29 import eu.etaxonomy.cdm.model.term.Representation;
30 import eu.etaxonomy.cdm.model.term.TermBase;
31 import eu.etaxonomy.cdm.model.term.TermType;
32 import eu.etaxonomy.cdm.persistence.dto.TermDto;
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.term.TermComboElement;
38
39
40 public class RepresentationElement extends AbstractCdmFormElement {
41
42 protected TermComboElement<Language> combo_language;
43
44 protected TextWithLabelElement element_Label;
45 protected TextWithLabelElement element_abbrevLabel;
46 protected TextWithLabelElement element_plural;
47 protected TextWithLabelElement element_text;
48
49 protected Button button;
50
51 protected Representation selectedRepresentation;
52 protected TermBase term;
53 protected TermDto termDto;
54
55 private Button removeRepresentation;
56
57 public RepresentationElement(CdmFormFactory formFactory,
58 ICdmFormElement formElement, TermBase term,
59 Integer textHeight, int style, boolean fill) {
60 this(formFactory, formElement, null, term, textHeight, style, fill);
61 }
62
63 public RepresentationElement(CdmFormFactory formFactory,
64 ICdmFormElement formElement, Representation representation, TermBase term,
65 Integer textHeight, int style, boolean fill) {
66 super(formFactory, formElement);
67
68 formFactory.addPropertyChangeListener(this);
69
70 element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
71 element_abbrevLabel = this.formFactory.createTextWithLabelElement(formElement, "abbrev. Label", null, style);
72 element_plural = this.formFactory.createTextWithLabelElement(formElement, "Plural", null, style);
73 element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
74 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
75 createRepresentationEditingElements(formElement, style);
76 }
77 setTerm(term, fill);
78 if(representation!=null){
79 setSelectedRepresentation(representation);
80 }
81
82 }
83
84 public RepresentationElement(CdmFormFactory formFactory,
85 ICdmFormElement formElement, Representation representation, TermDto term,
86 Integer textHeight, int style, boolean fill) {
87 super(formFactory, formElement);
88
89 formFactory.addPropertyChangeListener(this);
90
91 element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
92 element_abbrevLabel = this.formFactory.createTextWithLabelElement(formElement, "abbrev. Label", null, style);
93 element_plural = this.formFactory.createTextWithLabelElement(formElement, "Plural", null, style);
94 element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
95 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
96 createRepresentationEditingElements(formElement, style);
97 }
98 setTermDto(term, fill);
99 if(representation!=null){
100 setSelectedRepresentation(representation);
101 }
102
103 }
104
105 protected void createRepresentationEditingElements(
106 ICdmFormElement formElement, int style) {
107 removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
108 SWT.PUSH);
109 removeRepresentation.setImage(ImageResources
110 .getImage(ImageResources.TRASH_ICON));
111 removeRepresentation.setToolTipText("Remove representation");
112 removeRepresentation.addSelectionListener(new DeleteListener(this));
113 addControl(removeRepresentation);
114
115 combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
116 "", null, false, style);
117
118 }
119
120 public List<Language> getLanguages() {
121
122 ArrayList<Language> languageList = new ArrayList<Language>();
123 Set<Representation> reps = null;
124 if (term != null){
125 reps = term.getRepresentations();
126 }else{
127 reps = termDto.getRepresentations();
128 }
129
130 for (Representation rep: reps){
131 languageList.add(rep.getLanguage());
132 }
133
134 Collections.sort(languageList, new DefaultTermComparator<Language>());
135
136 return languageList;
137 }
138
139 public void setTerm(
140 TermBase term, boolean update) {
141 this.term = term;
142 if (term.getRepresentations().isEmpty()){
143 //if the term has no representation at all, create a default one.
144 Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
145 term.addRepresentation(rep);
146 }
147
148 if (selectedRepresentation != null) {
149 combo_language.setTerms(getLanguages());
150
151 } else{
152 setEnabledControls(false);
153 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
154 removeRepresentation.setEnabled(false);
155 }
156 }
157 if (update){
158 updateControls();
159 }
160 }
161
162 public void setTermDto(
163 TermDto term, boolean update) {
164 this.termDto = term;
165 if (term.getRepresentations().isEmpty()){
166 //if the term has no representation at all, create a default one.
167 Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
168 term.addRepresentation(rep);
169 }
170
171 if (selectedRepresentation != null) {
172 combo_language.setTerms(getLanguages());
173
174 } else{
175 setEnabledControls(false);
176 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
177 removeRepresentation.setEnabled(false);
178 }
179 }
180 if (update){
181 updateControls();
182 }
183 }
184
185 private void setEnabledControls(boolean enabled){
186 element_Label.setEnabled(enabled);
187 element_abbrevLabel.setEnabled(enabled);
188 element_plural.setEnabled(enabled);
189 element_text.setEnabled(enabled);
190 }
191
192 protected void updateControls() {
193 Representation preferredRepresentation = null;
194 if (term != null){
195 preferredRepresentation = term
196 .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
197 }else{
198 preferredRepresentation = termDto
199 .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
200 }
201
202 element_Label.setText(preferredRepresentation != null? preferredRepresentation.getLabel(): null);
203 element_abbrevLabel.setText(preferredRepresentation != null? preferredRepresentation.getAbbreviatedLabel(): null);
204 element_plural.setText(preferredRepresentation != null? preferredRepresentation.getPlural(): null);
205 element_text.setText(preferredRepresentation != null? preferredRepresentation.getDescription(): null);
206 selectedRepresentation = preferredRepresentation;
207 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
208 combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
209 boolean removePossible = false;
210 if (term != null){
211 removePossible = term.getRepresentations().size() > 1 ;
212 }else{
213 removePossible = termDto.getRepresentations().size() > 1 ;
214 }
215 removeRepresentation.setEnabled(removePossible);
216
217 }
218 }
219
220 public TermBase getTerm() {
221 return term;
222 }
223
224 @Override
225 public void propertyChange(PropertyChangeEvent event) {
226 if (event == null) {
227 return;
228 }
229 Object eventSource = event.getSource();
230
231 if (eventSource == element_abbrevLabel) {
232 String abbrevLabel = ((TextWithLabelElement) eventSource)
233 .getText();
234 selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
235 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
236 }
237 else if (eventSource == element_plural){
238 String plural = ((TextWithLabelElement) eventSource)
239 .getText();
240 selectedRepresentation.setPlural(plural);
241 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
242 } else if (eventSource == element_Label){
243 String label = ((TextWithLabelElement) eventSource)
244 .getText();
245 selectedRepresentation.setLabel(label);
246 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
247 } else if (eventSource == element_text){
248 String text = ((TextWithLabelElement) eventSource)
249 .getText();
250 selectedRepresentation.setText(text);
251 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
252 } else if (eventSource == button){
253 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
254 } else if (eventSource == combo_language){
255 if (combo_language.getSelection() != null){
256 setEnabledControls(true);
257 boolean removePossible = false;
258 if (term != null){
259 removePossible = term.getRepresentations().size() > 1 ;
260 }else{
261 removePossible = termDto.getRepresentations().size() > 1 ;
262 }
263 removeRepresentation.setEnabled(removePossible);
264
265 Language selectedLanguage = combo_language.getSelection();
266 if (selectedLanguage != null) {
267 selectedRepresentation = getTerm().getRepresentation(selectedLanguage);
268 if (selectedRepresentation == null){
269 selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
270 }
271 element_Label.setText(selectedRepresentation.getLabel());
272 element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
273 element_plural.setText(selectedRepresentation.getPlural());
274 element_text.setText(selectedRepresentation.getDescription());
275
276 }else {
277 setEnabledControls(false);
278 }
279 } else{
280 setEnabledControls(false);
281 removeRepresentation.setEnabled(false);
282 }
283 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
284 }
285 }
286
287 public Representation getSelectedRepresentation() {
288 return selectedRepresentation;
289 }
290
291 public void setSelectedRepresentation(Representation selectedRepresentation) {
292 if (selectedRepresentation == null){
293 selectedRepresentation = Representation.NewInstance("", "", "", null);
294 }
295 this.selectedRepresentation = selectedRepresentation;
296 }
297
298 private class DeleteListener extends SelectionAdapter {
299
300 private final RepresentationElement element;
301
302 public DeleteListener(RepresentationElement element) {
303 this.element = element;
304 }
305
306 @Override
307 public void widgetSelected(SelectionEvent e) {
308 if (term != null){
309 term.removeRepresentation(selectedRepresentation);
310 }else {
311 termDto.getRepresentations().remove(selectedRepresentation);
312 }
313 firePropertyChangeEvent(new CdmPropertyChangeEvent(
314 this, e));
315 updateControls();
316 }
317 }
318 }
319
320