3 * Copyright (C) 2007 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.
11 package eu
.etaxonomy
.taxeditor
.ui
.element
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Arrays
;
15 import java
.util
.Collections
;
16 import java
.util
.List
;
19 import org
.eclipse
.core
.runtime
.IStatus
;
20 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
21 import org
.eclipse
.jface
.wizard
.WizardDialog
;
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
;
28 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
29 import eu
.etaxonomy
.cdm
.model
.common
.LanguageString
;
30 import eu
.etaxonomy
.cdm
.model
.common
.MultilanguageTextHelper
;
31 import eu
.etaxonomy
.taxeditor
.model
.DefaultTermComparator
;
32 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
33 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
34 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
35 import eu
.etaxonomy
.taxeditor
.ui
.campanula
.compatibility
.ICdmFormElement
;
36 import eu
.etaxonomy
.taxeditor
.ui
.combo
.TermComboElement
;
37 import eu
.etaxonomy
.taxeditor
.ui
.translation
.TranslationWizard
;
41 * MultilanguageTextElement class.
45 * @created Sep 29, 2010
48 public class MultilanguageTextElement
extends AbstractCdmFormElement
implements
51 private class OpenTranslationWizard
extends SelectionAdapter
{
53 public OpenTranslationWizard() {
61 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
62 * .swt.events.SelectionEvent)
65 public void widgetSelected(SelectionEvent e
) {
66 Map
<Language
, LanguageString
> multilanguageText
= getMultilanguageText();
68 if (multilanguageText
== null){
69 StoreUtil
.warningDialog("No text to transalte", getClass(), "The text is empty and therefore can not be translated");
72 TranslationWizard wizard
= new TranslationWizard(multilanguageText
);
73 WizardDialog dialog
= new WizardDialog(getLayoutComposite()
76 if (dialog
.open() == IStatus
.OK
) {
77 combo_language
.setTerms(getLanguages());
84 private TermComboElement
<Language
> combo_language
;
86 protected LanguageStringWithLabelElement element_languageString
;
88 private Button button
;
90 private Map
<Language
, LanguageString
> multilanguageText
;
94 * Constructor for MultilanguageTextElement.
98 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
101 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
104 * a {@link java.lang.String} object.
105 * @param multilanguageText
106 * a {@link java.util.Map} object.
108 * a {@link java.lang.Integer} object.
112 public MultilanguageTextElement(CdmFormFactory formFactory
,
113 ICdmFormElement formElement
, String labelString
,
114 Map
<Language
, LanguageString
> multilanguageText
,
115 Integer textHeight
, int style
) {
116 super(formFactory
, formElement
);
118 formFactory
.addPropertyChangeListener(this);
120 element_languageString
= this.formFactory
121 .createLanguageStringWithLabelElement(formElement
, labelString
,
122 null, textHeight
, style
);
124 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
125 createMultilanguageTextEditingElements(formElement
,
126 multilanguageText
, style
);
128 setMultilanguageText(multilanguageText
);
131 private void createMultilanguageTextEditingElements(
132 ICdmFormElement formElement
,
133 Map
<Language
, LanguageString
> multilanguageText
, int style
) {
134 combo_language
= formFactory
135 .createTermComboElement(Language
.class, formElement
,
137 combo_language
.addSelectionListener(this);
138 addControl(formFactory
.createLabel(getLayoutComposite(), ""));
139 button
= formFactory
.createButton(getLayoutComposite(),
140 "Open In Translation Editor", SWT
.PUSH
);
142 button
.setLayoutData(LayoutConstants
.RIGHT());
143 button
.addSelectionListener(new OpenTranslationWizard());
146 private List
<Language
> getLanguages() {
148 ArrayList
<Language
> languageList
= new ArrayList
<Language
>(
149 getMultilanguageText().keySet());
151 Collections
.sort(languageList
, new DefaultTermComparator
<Language
>());
160 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
161 * .events.SelectionEvent)
165 public void widgetSelected(SelectionEvent e
) {
166 Language selectedLanguage
= combo_language
.getSelection();
167 if (selectedLanguage
!= null) {
168 LanguageString selectedLanguageString
= getMultilanguageText().get(
171 element_languageString
.setLanguageString(selectedLanguageString
);
179 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
180 * .swt.events.SelectionEvent)
184 public void widgetDefaultSelected(SelectionEvent e
) {
189 * Setter for the field <code>multilanguageText</code>.
192 * @param multilanguageText
193 * the multilanguageText to set
195 public void setMultilanguageText(
196 Map
<Language
, LanguageString
> multilanguageText
) {
197 this.multilanguageText
= multilanguageText
;
199 if (multilanguageText
!= null) {
200 if (multilanguageText
.isEmpty()) {
201 multilanguageText
.put(
202 CdmStore
.getDefaultLanguage(),
203 LanguageString
.NewInstance("",
204 CdmStore
.getDefaultLanguage()));
206 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
207 combo_language
.setTerms(getLanguages());
208 button
.setEnabled(false);
217 private void updateControls() {
218 LanguageString preferredLanguageString
= MultilanguageTextHelper
219 .getPreferredLanguageString(getMultilanguageText(),
220 Arrays
.asList(new Language
[] { CdmStore
221 .getDefaultLanguage() }));
223 element_languageString
.setLanguageString(preferredLanguageString
);
224 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
225 combo_language
.setSelection(preferredLanguageString
.getLanguage());
226 button
.setEnabled(true);
232 * Getter for the field <code>multilanguageText</code>.
235 * @return the multilanguageText
237 public Map
<Language
, LanguageString
> getMultilanguageText() {
238 return multilanguageText
;
245 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
246 * .eclipse.jface.util.PropertyChangeEvent)
250 public void propertyChange(PropertyChangeEvent event
) {
254 Object eventSource
= event
.getSource();
255 if (eventSource
== element_languageString
) {
256 LanguageString languageString
= ((LanguageStringWithLabelElement
) eventSource
)
257 .getLanguageString();
258 multilanguageText
.put(languageString
.getLanguage(), languageString
);
259 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));