fix #8162 adapt terms to new package structure in TaxEditor
[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
21 import org.eclipse.jface.util.PropertyChangeEvent;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.events.SelectionAdapter;
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.term.Representation;
30 import eu.etaxonomy.cdm.model.term.TermBase;
31 import eu.etaxonomy.cdm.model.term.TermType;
32 import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
33 import eu.etaxonomy.taxeditor.model.ImageResources;
34 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
35 import eu.etaxonomy.taxeditor.store.CdmStore;
36 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
37
38
39 public class RepresentationElement extends AbstractCdmFormElement implements
40 SelectionListener{
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
54 private Button removeRepresentation;
55
56 public RepresentationElement(CdmFormFactory formFactory,
57 ICdmFormElement formElement, TermBase term,
58 Integer textHeight, int style, boolean fill) {
59 this(formFactory, formElement, null, term, textHeight, style, fill);
60 }
61
62 public RepresentationElement(CdmFormFactory formFactory,
63 ICdmFormElement formElement, Representation representation, TermBase term,
64 Integer textHeight, int style, boolean fill) {
65 super(formFactory, formElement);
66
67 formFactory.addPropertyChangeListener(this);
68
69 element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
70 element_abbrevLabel = this.formFactory.createTextWithLabelElement(formElement, "abbrev. Label", null, style);
71 element_plural = this.formFactory.createTextWithLabelElement(formElement, "Plural", null, style);
72 element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
73 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
74 createRepresentationEditingElements(formElement, style);
75 }
76 setTerm(term, fill);
77 if(representation!=null){
78 setSelectedRepresentation(representation);
79 }
80
81 }
82
83 protected void createRepresentationEditingElements(
84 ICdmFormElement formElement, int style) {
85 removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
86 SWT.PUSH);
87 removeRepresentation.setImage(ImageResources
88 .getImage(ImageResources.TRASH_ICON));
89 removeRepresentation.setToolTipText("Remove representation");
90 removeRepresentation.addSelectionListener(new DeleteListener(this));
91 addControl(removeRepresentation);
92
93 combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
94 "", null, false, style);
95
96 combo_language.addSelectionListener(this);
97
98 }
99
100 public List<Language> getLanguages() {
101
102 ArrayList<Language> languageList = new ArrayList<Language>();
103 for (Representation rep: term.getRepresentations()){
104 languageList.add(rep.getLanguage());
105 }
106
107 Collections.sort(languageList, new DefaultTermComparator<Language>());
108
109 return languageList;
110 }
111
112 @Override
113 public void widgetSelected(SelectionEvent e) {
114 Language selectedLanguage = combo_language.getSelection();
115 if (selectedLanguage != null) {
116 selectedRepresentation = getTerm().getRepresentation(
117 selectedLanguage);
118 if (selectedRepresentation == null){
119 selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
120 }
121 element_Label.setText(selectedRepresentation.getLabel());
122 element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
123 element_plural.setText(selectedRepresentation.getPlural());
124 element_text.setText(selectedRepresentation.getDescription());
125
126 }else {
127 setEnabledControls(false);
128 }
129
130 }
131
132 @Override
133 public void widgetDefaultSelected(SelectionEvent e) {
134 }
135
136 public void setTerm(
137 TermBase term, boolean update) {
138 this.term = term;
139 if (term.getRepresentations().isEmpty()){
140 //if the term has no representation at all, create a default one.
141 Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
142 term.addRepresentation(rep);
143 }
144
145 if (selectedRepresentation != null) {
146 combo_language.setTerms(getLanguages());
147
148 } else{
149 setEnabledControls(false);
150 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
151 removeRepresentation.setEnabled(false);
152 }
153 }
154 if (update){
155 updateControls();
156 }
157 }
158
159 private void setEnabledControls(boolean enabled){
160 element_Label.setEnabled(enabled);
161 element_abbrevLabel.setEnabled(enabled);
162 element_plural.setEnabled(enabled);
163 element_text.setEnabled(enabled);
164 }
165
166 protected void updateControls() {
167 Representation preferredRepresentation = term
168 .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
169
170 element_Label.setText(preferredRepresentation.getLabel());
171 element_abbrevLabel.setText(preferredRepresentation.getAbbreviatedLabel());
172 element_plural.setText(preferredRepresentation.getPlural());
173 element_text.setText(preferredRepresentation.getDescription());
174 selectedRepresentation = preferredRepresentation;
175 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
176 combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
177 boolean removePossible = term.getRepresentations().size() > 1 ;
178 removeRepresentation.setEnabled(removePossible);
179
180 }
181 }
182
183 public TermBase getTerm() {
184 return term;
185 }
186
187 @Override
188 public void propertyChange(PropertyChangeEvent event) {
189 if (event == null) {
190 return;
191 }
192 Object eventSource = event.getSource();
193
194 if (eventSource == element_abbrevLabel) {
195 String abbrevLabel = ((TextWithLabelElement) eventSource)
196 .getText();
197 selectedRepresentation.setAbbreviatedLabel(abbrevLabel);
198 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
199 }
200 else if (eventSource == element_plural){
201 String plural = ((TextWithLabelElement) eventSource)
202 .getText();
203 selectedRepresentation.setPlural(plural);
204 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
205 } else if (eventSource == element_Label){
206 String label = ((TextWithLabelElement) eventSource)
207 .getText();
208 selectedRepresentation.setLabel(label);
209 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
210 } else if (eventSource == element_text){
211 String text = ((TextWithLabelElement) eventSource)
212 .getText();
213 selectedRepresentation.setText(text);
214 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
215 } else if (eventSource == button){
216 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
217 } else if (eventSource == combo_language){
218 if (combo_language.getSelection() != null){
219 setEnabledControls(true);
220 boolean removePossible = term.getRepresentations().size() > 1 ;
221 removeRepresentation.setEnabled(removePossible);
222 } else{
223 setEnabledControls(false);
224 removeRepresentation.setEnabled(false);
225 }
226 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
227 }
228 }
229
230 public Representation getSelectedRepresentation() {
231 return selectedRepresentation;
232 }
233
234 public void setSelectedRepresentation(Representation selectedRepresentation) {
235 if (selectedRepresentation == null){
236 selectedRepresentation = Representation.NewInstance("", "", "", null);
237 }
238 this.selectedRepresentation = selectedRepresentation;
239 }
240
241 private class DeleteListener extends SelectionAdapter {
242
243 private final RepresentationElement element;
244
245 public DeleteListener(RepresentationElement element) {
246 this.element = element;
247 }
248
249 @Override
250 public void widgetSelected(SelectionEvent e) {
251 term.removeRepresentation(selectedRepresentation);
252 firePropertyChangeEvent(new CdmPropertyChangeEvent(
253 this, e));
254 updateControls();
255 }
256 }
257 }
258
259