3 * Copyright (C) 2016 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.ui
.element
;
18 import java
.util
.ArrayList
;
19 import java
.util
.Arrays
;
20 import java
.util
.Collections
;
21 import java
.util
.List
;
23 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
24 import org
.eclipse
.swt
.SWT
;
25 import org
.eclipse
.swt
.events
.SelectionAdapter
;
26 import org
.eclipse
.swt
.events
.SelectionEvent
;
27 import org
.eclipse
.swt
.events
.SelectionListener
;
28 import org
.eclipse
.swt
.widgets
.Button
;
30 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
31 import eu
.etaxonomy
.cdm
.model
.common
.Representation
;
32 import eu
.etaxonomy
.cdm
.model
.common
.TermBase
;
33 import eu
.etaxonomy
.cdm
.model
.common
.TermType
;
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
.TermComboElement
;
41 public class RepresentationElement
extends AbstractCdmFormElement
implements
44 protected TermComboElement
<Language
> combo_language
;
46 protected TextWithLabelElement element_Label
;
47 protected TextWithLabelElement element_abbrevLabel
;
48 protected TextWithLabelElement element_text
;
50 protected Button button
;
52 protected Representation selectedRepresentation
;
53 protected TermBase term
;
55 private Button removeRepresentation
;
57 // protected final boolean isTranslationWizard;
62 * Constructor for MultilanguageTextElement.
66 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
69 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
73 * a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
75 * a {@link java.lang.Integer} object.
79 public RepresentationElement(CdmFormFactory formFactory
,
80 ICdmFormElement formElement
, TermBase term
,
81 Integer textHeight
, int style
, boolean fill
) {
82 super(formFactory
, formElement
);
84 formFactory
.addPropertyChangeListener(this);
86 element_Label
= this.formFactory
.createTextWithLabelElement(formElement
, "Label", null, style
);
87 element_abbrevLabel
= this.formFactory
88 .createTextWithLabelElement(formElement
, "abbrev. Label",
90 element_text
= this.formFactory
.createMultiLineTextWithLabel(formElement
, "Description", textHeight
, style
);
91 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
92 createRepresentationEditingElements(formElement
, style
);
100 * Constructor for MultilanguageTextElement.
104 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
107 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
109 * @param representation
110 * a {@link eu.etaxonomy.cdm.model.common.Representation} object.
112 * a {@link eu.etaxonomy.cdm.model.common.TermBase} object.
114 * a {@link java.lang.Integer} object.
118 public RepresentationElement(CdmFormFactory formFactory
,
119 ICdmFormElement formElement
, Representation representation
, TermBase term
,
120 Integer textHeight
, int style
, boolean fill
) {
121 super(formFactory
, formElement
);
123 formFactory
.addPropertyChangeListener(this);
125 element_Label
= this.formFactory
.createTextWithLabelElement(formElement
, "Label", null, style
);
126 element_abbrevLabel
= this.formFactory
127 .createTextWithLabelElement(formElement
, "abbrev. Label",
129 element_text
= this.formFactory
.createMultiLineTextWithLabel(formElement
, "Description", textHeight
, style
);
130 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
131 createRepresentationEditingElements(formElement
, style
);
134 setSelectedRepresentation(representation
);
139 protected void createRepresentationEditingElements(
140 ICdmFormElement formElement
, int style
) {
141 removeRepresentation
= formFactory
.createButton(getLayoutComposite(), null,
143 removeRepresentation
.setImage(ImageResources
144 .getImage(ImageResources
.TRASH_ICON
));
145 removeRepresentation
.setToolTipText("Remove representation");
146 removeRepresentation
.addSelectionListener(new DeleteListener(this));
147 addControl(removeRepresentation
);
149 combo_language
= formFactory
.createDefinedTermComboElement(TermType
.Language
, formElement
,
150 "", null, false, style
);
152 combo_language
.addSelectionListener(this);
154 //addControl(formFactory.createLabel(getLayoutComposite(), ""));
157 public List
<Language
> getLanguages() {
159 ArrayList
<Language
> languageList
= new ArrayList
<Language
>();
160 for (Representation rep
: term
.getRepresentations()){
161 languageList
.add(rep
.getLanguage());
164 Collections
.sort(languageList
, new DefaultTermComparator
<Language
>());
173 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
174 * .events.SelectionEvent)
178 public void widgetSelected(SelectionEvent e
) {
179 Language selectedLanguage
= combo_language
.getSelection();
180 if (selectedLanguage
!= null) {
181 selectedRepresentation
= getTerm().getRepresentation(
183 if (selectedRepresentation
== null){
184 selectedRepresentation
= Representation
.NewInstance("", "", "", selectedLanguage
);
186 element_Label
.setText(selectedRepresentation
.getLabel());
187 element_abbrevLabel
.setText(selectedRepresentation
.getAbbreviatedLabel());
188 element_text
.setText(selectedRepresentation
.getDescription());
192 element_Label
.setEnabled(false);
193 element_abbrevLabel
.setEnabled(false);
194 element_text
.setEnabled(false);
203 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
204 * .swt.events.SelectionEvent)
208 public void widgetDefaultSelected(SelectionEvent e
) {
213 * Setter for the field <code>multilanguageText</code>.
216 * @param multilanguageText
217 * the multilanguageText to set
220 TermBase term
, boolean update
) {
222 if (term
.getRepresentations().isEmpty()){
223 //if the term has no representation at all, create a default one.
224 Representation rep
= Representation
.NewInstance("", "empty representation", "", PreferencesUtil
.getGlobalLanguage());
225 term
.addRepresentation(rep
);
228 if (selectedRepresentation
!= null) {
229 combo_language
.setTerms(getLanguages());
232 element_Label
.setEnabled(false);
233 element_abbrevLabel
.setEnabled(false);
234 element_text
.setEnabled(false);
235 removeRepresentation
.setEnabled(false);
245 protected void updateControls() {
246 Representation preferredRepresentation
= term
247 .getPreferredRepresentation(PreferencesUtil
.getGlobalLanguage() );
249 element_Label
.setText(preferredRepresentation
.getLabel());
250 element_abbrevLabel
.setText(preferredRepresentation
.getAbbreviatedLabel());
251 element_text
.setText(preferredRepresentation
.getDescription());
252 selectedRepresentation
= preferredRepresentation
;
253 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
254 combo_language
.setSelection(preferredRepresentation
== null?CdmStore
.getDefaultLanguage():preferredRepresentation
.getLanguage());
255 boolean removePossible
= term
.getRepresentations().size() > 1 ;
256 removeRepresentation
.setEnabled(removePossible
);
263 * Getter for the field <code>multilanguageText</code>.
266 * @return the multilanguageText
268 public TermBase
getTerm() {
276 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
277 * .eclipse.jface.util.PropertyChangeEvent)
281 public void propertyChange(PropertyChangeEvent event
) {
285 Object eventSource
= event
.getSource();
287 if (eventSource
== element_abbrevLabel
) {
288 String abbrevLabel
= ((TextWithLabelElement
) eventSource
)
290 selectedRepresentation
.setAbbreviatedLabel(abbrevLabel
);
291 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
292 } else if (eventSource
== element_Label
){
293 String label
= ((TextWithLabelElement
) eventSource
)
295 selectedRepresentation
.setLabel(label
);
296 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
297 } else if (eventSource
== element_text
){
298 String text
= ((TextWithLabelElement
) eventSource
)
300 selectedRepresentation
.setText(text
);
301 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
302 } else if (eventSource
== button
){
303 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
304 } else if (eventSource
== combo_language
){
305 if (combo_language
.getSelection() != null){
306 element_Label
.setEnabled(true);
307 element_abbrevLabel
.setEnabled(true);
308 element_text
.setEnabled(true);
309 boolean removePossible
= term
.getRepresentations().size() > 1 ;
310 removeRepresentation
.setEnabled(removePossible
);
312 element_Label
.setEnabled(false);
313 element_abbrevLabel
.setEnabled(false);
314 element_text
.setEnabled(false);
315 removeRepresentation
.setEnabled(false);
317 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
322 * @return the selectedRepresentation
324 public Representation
getSelectedRepresentation() {
325 return selectedRepresentation
;
329 * @param selectedRepresentation the selectedRepresentation to set
331 public void setSelectedRepresentation(Representation selectedRepresentation
) {
332 if (selectedRepresentation
== null){
333 selectedRepresentation
= Representation
.NewInstance("", "", "", null);
335 this.selectedRepresentation
= selectedRepresentation
;
338 private class DeleteListener
extends SelectionAdapter
{
340 private final RepresentationElement element
;
342 public DeleteListener(RepresentationElement element
) {
343 this.element
= element
;
347 public void widgetSelected(SelectionEvent e
) {
348 term
.removeRepresentation(selectedRepresentation
);
349 firePropertyChangeEvent(new CdmPropertyChangeEvent(