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