2 * Copyright (C) 2016 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.ui
.element
;
17 import java
.util
.ArrayList
;
18 import java
.util
.Collections
;
19 import java
.util
.List
;
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
;
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
;
41 public class RepresentationElement
extends AbstractCdmFormElement
implements IEnableableFormElement
{
43 protected TermComboElement
<Language
> combo_language
;
45 protected TextWithLabelElement element_Label
;
46 protected TextWithLabelElement element_abbrevLabel
;
47 protected TextWithLabelElement element_plural
;
48 protected TextWithLabelElement element_text
;
50 protected Button button
;
52 protected Representation selectedRepresentation
;
53 protected TermBase term
;
54 protected AbstractTermDto termDto
;
56 private Button removeRepresentation
;
58 boolean isEnabled
= true;
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
);
66 public RepresentationElement(CdmFormFactory formFactory
,
67 ICdmFormElement formElement
, Representation representation
, TermBase term
,
68 Integer textHeight
, int style
, boolean fill
) {
69 super(formFactory
, formElement
);
71 formFactory
.addPropertyChangeListener(this);
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
);
81 //if(representation!=null){
82 setSelectedRepresentation(representation
);
87 public RepresentationElement(CdmFormFactory formFactory
,
88 ICdmFormElement formElement
, Representation representation
, AbstractTermDto term
,
89 Integer textHeight
, int style
, boolean fill
) {
90 super(formFactory
, formElement
);
92 formFactory
.addPropertyChangeListener(this);
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
);
101 setTermDto(term
, fill
);
102 if(representation
!=null){
103 setSelectedRepresentation(representation
);
109 protected void createRepresentationEditingElements(
110 ICdmFormElement formElement
, int style
) {
111 removeRepresentation
= formFactory
.createButton(getLayoutComposite(), null,
113 removeRepresentation
.setImage(ImageResources
114 .getImage(ImageResources
.TRASH_ICON
));
115 removeRepresentation
.setToolTipText("Remove representation");
116 removeRepresentation
.addSelectionListener(new DeleteListener(this));
117 addControl(removeRepresentation
);
119 combo_language
= formFactory
.createDefinedTermComboElement(TermType
.Language
, formElement
,
120 "", null, false, style
);
124 public List
<Language
> getLanguages() {
126 ArrayList
<Language
> languageList
= new ArrayList
<Language
>();
127 Set
<Representation
> reps
= null;
129 reps
= term
.getRepresentations();
131 reps
= termDto
.getRepresentations();
134 for (Representation rep
: reps
){
135 languageList
.add(rep
.getLanguage());
138 Collections
.sort(languageList
, new DefaultTermComparator
<Language
>());
144 TermBase term
, boolean update
) {
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
);
152 // if (selectedRepresentation != null) {
153 // combo_language.setTerms(getLanguages());
156 // setEnabledControls(false);
157 // if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
158 // removeRepresentation.setEnabled(false);
166 public void setTermDto(
167 AbstractTermDto term
, boolean update
) {
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
);
175 if (selectedRepresentation
!= null) {
176 combo_language
.setTerms(getLanguages());
179 // else if (!term.getRepresentations().isEmpty()){
180 // setEnabledControls(false);
181 // if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
182 // removeRepresentation.setEnabled(false);
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
);
198 public void setEnabled(boolean isEnabled
){
199 this.isEnabled
= isEnabled
;
200 setEnabledControls(isEnabled
);
205 public boolean isEnabled(){
209 protected void updateControls() {
210 Representation preferredRepresentation
= null;
212 preferredRepresentation
= term
213 .getPreferredRepresentation(PreferencesUtil
.getGlobalLanguage() );
215 preferredRepresentation
= termDto
216 .getPreferredRepresentation(PreferencesUtil
.getGlobalLanguage() );
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;
228 removePossible
= term
.getRepresentations().size() > 1 ;
230 removePossible
= termDto
.getRepresentations().size() > 1 ;
232 removeRepresentation
.setEnabled(removePossible
);
237 public TermBase
getTerm() {
240 public AbstractTermDto
getTermDto() {
245 public void propertyChange(PropertyChangeEvent event
) {
249 Object eventSource
= event
.getSource();
251 if (eventSource
== element_abbrevLabel
) {
252 String abbrevLabel
= ((TextWithLabelElement
) eventSource
)
254 selectedRepresentation
.setAbbreviatedLabel(abbrevLabel
);
255 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
257 else if (eventSource
== element_plural
){
258 String plural
= ((TextWithLabelElement
) eventSource
)
260 selectedRepresentation
.setPlural(plural
);
261 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
262 } else if (eventSource
== element_Label
){
263 String label
= ((TextWithLabelElement
) eventSource
)
265 selectedRepresentation
.setLabel(label
);
266 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
267 } else if (eventSource
== element_text
){
268 String text
= ((TextWithLabelElement
) eventSource
)
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;
279 removePossible
= term
.getRepresentations().size() > 1 ;
281 removePossible
= termDto
.getRepresentations().size() > 1 ;
283 removeRepresentation
.setEnabled(removePossible
);
285 Language selectedLanguage
= combo_language
.getSelection();
286 if (selectedLanguage
!= null) {
287 if (getTerm() != null){
288 selectedRepresentation
= getTerm().getRepresentation(selectedLanguage
);
290 selectedRepresentation
= getTermDto().getRepresentation(selectedLanguage
);
292 if (selectedRepresentation
== null){
293 selectedRepresentation
= Representation
.NewInstance("", "", "", selectedLanguage
);
295 element_Label
.setText(selectedRepresentation
.getLabel());
296 element_abbrevLabel
.setText(selectedRepresentation
.getAbbreviatedLabel());
297 element_plural
.setText(selectedRepresentation
.getPlural());
298 element_text
.setText(selectedRepresentation
.getDescription());
301 setEnabledControls(false);
304 setEnabledControls(false);
305 removeRepresentation
.setEnabled(false);
307 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
311 public Representation
getSelectedRepresentation() {
312 return selectedRepresentation
;
315 public void setSelectedRepresentation(Representation selectedRepresentation
) {
316 if (selectedRepresentation
== null){
317 selectedRepresentation
= Representation
.NewInstance("", "", "", null);
319 this.selectedRepresentation
= selectedRepresentation
;
322 private class DeleteListener
extends SelectionAdapter
{
324 private final RepresentationElement element
;
326 public DeleteListener(RepresentationElement element
) {
327 this.element
= element
;
331 public void widgetSelected(SelectionEvent e
) {
333 term
.removeRepresentation(selectedRepresentation
);
335 termDto
.getRepresentations().remove(selectedRepresentation
);
337 firePropertyChangeEvent(new CdmPropertyChangeEvent(