2 * Copyright (C) 2007 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
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Arrays
;
13 import java
.util
.Collections
;
14 import java
.util
.HashMap
;
15 import java
.util
.List
;
18 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
19 import org
.eclipse
.jface
.window
.Window
;
20 import org
.eclipse
.jface
.wizard
.WizardDialog
;
21 import org
.eclipse
.swt
.SWT
;
22 import org
.eclipse
.swt
.events
.SelectionAdapter
;
23 import org
.eclipse
.swt
.events
.SelectionEvent
;
24 import org
.eclipse
.swt
.events
.SelectionListener
;
25 import org
.eclipse
.swt
.widgets
.Button
;
27 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
28 import eu
.etaxonomy
.cdm
.model
.common
.LanguageString
;
29 import eu
.etaxonomy
.cdm
.model
.common
.MultilanguageTextHelper
;
30 import eu
.etaxonomy
.cdm
.model
.term
.TermType
;
31 import eu
.etaxonomy
.taxeditor
.model
.DefaultTermComparator
;
32 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
33 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
34 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
35 import eu
.etaxonomy
.taxeditor
.ui
.combo
.term
.TermComboElement
;
36 import eu
.etaxonomy
.taxeditor
.ui
.translation
.TranslationWizard
;
41 * @created Sep 29, 2010
43 public class MultilanguageTextElement
extends AbstractCdmFormElement
implements
44 SelectionListener
, IEnableableFormElement
{
46 private class OpenTranslationWizard
extends SelectionAdapter
{
48 public OpenTranslationWizard() {
53 public void widgetSelected(SelectionEvent e
) {
54 Map
<Language
, LanguageString
> multilanguageText
= getMultilanguageText();
56 if (multilanguageText
==null || multilanguageText
.isEmpty()){
57 MessagingUtils
.warningDialog("No text to translate", getClass(), "The text is empty and therefore can not be translated");
61 TranslationWizard wizard
= new TranslationWizard(multilanguageText
);
62 WizardDialog dialog
= new WizardDialog(getLayoutComposite()
65 if (dialog
.open() == Window
.OK
) {
66 combo_language
.setTerms(getLanguages());
72 private TermComboElement
<Language
> combo_language
;
74 protected LanguageStringWithLabelElement element_languageString
;
76 private Button button
;
78 private boolean isEnabled
= true;
79 // private Button removeRepresentation;
81 private Map
<Language
, LanguageString
> multilanguageText
;
83 public MultilanguageTextElement(CdmFormFactory formFactory
,
84 ICdmFormElement formElement
, String labelString
,
85 Map
<Language
, LanguageString
> multilanguageText
,
86 Integer textHeight
, int style
) {
87 super(formFactory
, formElement
);
89 formFactory
.addPropertyChangeListener(this);
91 element_languageString
= this.formFactory
92 .createLanguageStringWithLabelElement(formElement
, labelString
,
93 null, textHeight
, true, style
);
95 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
96 createMultilanguageTextEditingElements(formElement
,
97 multilanguageText
, style
);
99 setMultilanguageText(multilanguageText
);
102 private void createMultilanguageTextEditingElements(
103 ICdmFormElement formElement
,
104 Map
<Language
, LanguageString
> multilanguageText
, int style
) {
105 combo_language
= formFactory
.createDefinedTermComboElement(TermType
.Language
, formElement
,
107 combo_language
.addSelectionListener(this);
108 // removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
110 // removeRepresentation.setImage(ImageResources
111 // .getImage(ImageResources.TRASH_ICON));
112 // removeRepresentation.setToolTipText("Remove representation");
113 // addControl(removeRepresentation);
114 // removeRepresentation.addSelectionListener(new DeleteListener(this));
115 addControl(formFactory
.createLabel(getLayoutComposite(), ""));
116 button
= formFactory
.createButton(getLayoutComposite(),
117 "Open In Translation Editor", SWT
.PUSH
);
119 button
.setLayoutData(LayoutConstants
.RIGHT());
120 button
.addSelectionListener(new OpenTranslationWizard());
123 private List
<Language
> getLanguages() {
125 ArrayList
<Language
> languageList
= new ArrayList
<Language
>(
126 getMultilanguageText().keySet());
128 Collections
.sort(languageList
, new DefaultTermComparator
<Language
>());
134 public void widgetSelected(SelectionEvent e
) {
135 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
136 Language selectedLanguage
= combo_language
.getSelection();
137 if (selectedLanguage
!= null) {
138 LanguageString selectedLanguageString
= getMultilanguageText().get(
141 element_languageString
.setLanguageString(selectedLanguageString
);
147 public void widgetDefaultSelected(SelectionEvent e
) {
150 public void setMultilanguageText(
151 Map
<Language
, LanguageString
> multilanguageText
) {
152 this.multilanguageText
= multilanguageText
;
154 if (multilanguageText
!= null) {
155 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
156 combo_language
.setTerms(getLanguages());
157 button
.setEnabled(false);
164 public void refresh(){
165 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
166 Language lang
= combo_language
.getSelection();
167 if (multilanguageText
.get(lang
)!= null){
168 this.element_languageString
.setText(multilanguageText
.get(combo_language
.getSelection()).getText());
170 this.element_languageString
.setText(null);
173 if (multilanguageText
!= null && multilanguageText
.get(CdmStore
.getDefaultLanguage()) != null){
174 this.element_languageString
.setText(multilanguageText
.get(CdmStore
.getDefaultLanguage()).getText());
179 private void updateControls() {
180 LanguageString preferredLanguageString
= MultilanguageTextHelper
181 .getPreferredLanguageString(getMultilanguageText(),
182 Arrays
.asList(new Language
[] { CdmStore
183 .getDefaultLanguage() }));
185 element_languageString
.setLanguageString(preferredLanguageString
);
187 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
188 combo_language
.setSelection(preferredLanguageString
== null?CdmStore
.getDefaultLanguage():preferredLanguageString
.getLanguage());
189 button
.setEnabled(true);
193 public Map
<Language
, LanguageString
> getMultilanguageText() {
194 return multilanguageText
;
198 public void propertyChange(PropertyChangeEvent event
) {
202 Object eventSource
= event
.getSource();
203 if (eventSource
== element_languageString
) {
204 LanguageString languageString
= ((LanguageStringWithLabelElement
) eventSource
)
205 .getLanguageString();
206 if (multilanguageText
== null){
207 multilanguageText
= new HashMap
<>();
209 multilanguageText
.put(languageString
.getLanguage(), languageString
);
210 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));
215 public void setEnabled(boolean enabled
){
218 button
.setEnabled(enabled
);
220 if(combo_language
!=null){
221 combo_language
.setEnabled(enabled
);
223 element_languageString
.setEnabled(enabled
);
226 public void setIndent(int indent
){
227 this.element_languageString
.setIndent(indent
);
231 public boolean isEnabled() {