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.
10 package eu
.etaxonomy
.taxeditor
.ui
.translation
;
12 import java
.util
.ArrayList
;
13 import java
.util
.Arrays
;
14 import java
.util
.List
;
18 import org
.eclipse
.core
.runtime
.Assert
;
19 import org
.eclipse
.jface
.util
.IPropertyChangeListener
;
20 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
21 import org
.eclipse
.jface
.wizard
.WizardPage
;
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
.widgets
.Composite
;
26 import org
.eclipse
.swt
.widgets
.Display
;
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
.cdm
.model
.term
.TermType
;
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
.element
.CdmFormFactory
;
37 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmPropertyChangeEvent
;
38 import eu
.etaxonomy
.taxeditor
.ui
.element
.ICdmFormElement
;
39 import eu
.etaxonomy
.taxeditor
.ui
.element
.LanguageStringWithLabelElement
;
40 import eu
.etaxonomy
.taxeditor
.ui
.element
.LayoutConstants
;
41 import eu
.etaxonomy
.taxeditor
.ui
.element
.MultilanguageTextElement
;
42 import eu
.etaxonomy
.taxeditor
.ui
.element
.RootElement
;
45 * <p>TranslationWizardPage class.</p>
48 * @created Sep 29, 2010
50 public class TranslationWizardPage
extends WizardPage
implements IPropertyChangeListener
{
52 private static int TEXT_HEIGHT
= 400;
54 private final Map
<Language
, LanguageString
> multilanguageText
;
56 MultilanguageTextElement source
;
58 private final CdmFormFactory formFactory
;
60 private TermComboElement
<Language
> combo_sourceLanguage
;
62 private LanguageStringWithLabelElement text_source
;
64 private TermComboElement
<Language
> combo_targetLanguage
;
66 private LanguageStringWithLabelElement text_target
;
68 private Language selectedLanguage
;
71 * <p>Constructor for TranslationWizardPage.</p>
73 * @param multilanguageText a {@link java.util.Map} object.
75 protected TranslationWizardPage(Map
<Language
, LanguageString
> multilanguageText
, Language selectedLanguage
) {
76 super("TranslationWizardPage");
77 Assert
.isNotNull(multilanguageText
, "Multilanguage text may not be null");
78 setTitle("Add or edit translations.");
79 this.multilanguageText
= multilanguageText
;
80 this.selectedLanguage
= selectedLanguage
;
81 formFactory
= new CdmFormFactory(Display
.getCurrent());
82 setPageComplete(false);
86 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
90 public void createControl(Composite parent
) {
91 Composite control
= formFactory
.createComposite(parent
);
92 // control.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
93 control
.setLayout(LayoutConstants
.LAYOUT(2, true));
95 Composite leftContainer
= formFactory
.createComposite(control
);
96 leftContainer
.setLayoutData(LayoutConstants
.FILL());
97 leftContainer
.setLayout(LayoutConstants
.LAYOUT(1, false));
98 // leftContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
99 RootElement leftRoot
= new RootElement(formFactory
, leftContainer
);
101 Composite rightContainer
= formFactory
.createComposite(control
);
102 rightContainer
.setLayoutData(LayoutConstants
.FILL());
103 rightContainer
.setLayout(LayoutConstants
.LAYOUT(1, false));
104 // rightContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
105 RootElement rightRoot
= new RootElement(formFactory
, rightContainer
);
107 createLeftControls(leftRoot
);
108 createRightControls(rightRoot
);
111 // initialize with default language
112 setSource(CdmStore
.getDefaultLanguage());
119 * @param defaultLanguage
121 private void setSource(Language language
) {
123 List
<Language
> languages
= Arrays
.asList(new Language
[]{language
});
125 LanguageString preferredLanguageString
= MultilanguageTextHelper
.getPreferredLanguageString(multilanguageText
, languages
);
127 if(preferredLanguageString
!= null){
128 combo_sourceLanguage
.setSelection(preferredLanguageString
.getLanguage());
129 text_source
.setLanguageString(preferredLanguageString
);
138 private void createLeftControls(ICdmFormElement element
){
140 combo_sourceLanguage
= formFactory
.createDefinedTermComboElement(TermType
.Language
, element
, null, null, false,SWT
.NULL
);
142 combo_sourceLanguage
.setTerms(getLanguages());
144 combo_sourceLanguage
.addSelectionListener(new SelectionAdapter() {
146 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
149 public void widgetSelected(SelectionEvent e
) {
150 text_source
.setLanguageString(multilanguageText
.get(combo_sourceLanguage
.getSelection()));
154 LanguageString preferredLanguageString
= MultilanguageTextHelper
.getPreferredLanguageString(multilanguageText
, getLanguages());
155 if (preferredLanguageString
== null){
156 preferredLanguageString
= LanguageString
.NewInstance("", PreferencesUtil
.getGlobalLanguage());
158 text_source
= formFactory
.createLanguageStringWithLabelElement(element
, null, preferredLanguageString
, TEXT_HEIGHT
, false, SWT
.NULL
);
160 // text_source.setEnabled(false);
162 text_source
.setText(preferredLanguageString
.getText());
169 private void createRightControls(ICdmFormElement element
){
170 combo_targetLanguage
= formFactory
.createDefinedTermComboElement(TermType
.Language
, element
, null, null,false, SWT
.NULL
);
172 combo_targetLanguage
.addSelectionListener(new SelectionAdapter() {
174 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
177 public void widgetSelected(SelectionEvent e
) {
178 Language language
= combo_targetLanguage
.getSelection();
180 if (language
== null){
181 setPageComplete(false);
185 setPageComplete(true);
186 LanguageString languageString
;
188 if(multilanguageText
.containsKey(language
)){
189 languageString
= multilanguageText
.get(language
);
191 languageString
= LanguageString
.NewInstance("", language
);
194 text_target
.setLanguageString(languageString
);
198 text_target
= formFactory
.createLanguageStringWithLabelElement(element
, null, null, TEXT_HEIGHT
, false, SWT
.NULL
);
201 Language lang
= combo_targetLanguage
.getTerms().get(0);
202 LanguageString langString
;
203 LanguageString preferredLanguageString
= MultilanguageTextHelper
.getPreferredLanguageString(multilanguageText
, null);
204 if (preferredLanguageString
.getLanguage().equals(selectedLanguage
)) {
205 langString
= multilanguageText
.get(lang
);
206 if (langString
== null) {
207 Set
<Language
> alreadyExisting
= multilanguageText
.keySet();
208 for (Language langExist
: alreadyExisting
) {
209 if (!langExist
.equals(preferredLanguageString
.getLanguage())) {
210 langString
= multilanguageText
.get(langExist
);
217 langString
= multilanguageText
.get(selectedLanguage
);
218 lang
= selectedLanguage
;
220 if (langString
!= null) {
221 text_target
.setLanguageString(langString
);
222 combo_targetLanguage
.setSelection(lang
);
223 setPageComplete(true);
228 // The automated translation did rely on the Google Translate API. Unfortunately this service is not free anymore.
229 // See http://code.google.com/apis/language/translate/overview.html
231 // Button button_translationService = formFactory.createButton(element.getLayoutComposite(), "Translate", SWT.PUSH);
232 // button_translationService.addSelectionListener(new SelectionAdapter() {
234 // * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
237 // public void widgetSelected(SelectionEvent event) {
238 // ITranslationServiceWrapper service = new GoogleLanguageApiWrapper();
239 // String translatedText;
241 // String text = text_source.getText();
242 // Language sourceLanguage = text_source.getLanguageString().getLanguage();
243 // Language targetLanguage = combo_targetLanguage.getSelection();
245 // if(targetLanguage == null){
246 // StoreUtil.warningDialog("Please select a target language", TranslationWizardPage.class, "Please select a language from the combo box at the right.");
250 // translatedText = service.translate(text, sourceLanguage, targetLanguage);
251 // text_target.setText(translatedText);
252 // } catch (LanguageNotSupportedException e) {
253 // StoreUtil.warningDialog("Language not supported", TranslationWizardPage.class, "The chosen language is not supported by the translation service.");
254 // } catch (Exception e){
255 // StoreUtil.warningDialog("Error translating text", TranslationWizardPage.class, e.getMessage());
267 private List
<Language
> getLanguages(){
268 Set
<Language
> languageSet
= MultilanguageTextHelper
.getLanguages(multilanguageText
);
270 List
<Language
> languageList
= new ArrayList
<Language
>();
271 // protect against corrupt language sets
272 for (Language language
: languageSet
){
273 if (language
!= null){
274 languageList
.add(language
);
276 MessagingUtils
.warningDialog("Empty languages", getClass(), "The multilanguage string contains invalid data. Please contact the administrator of you datasource.");
284 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
288 public void dispose() {
296 public LanguageString
getTargetLanguageString() {
297 return text_target
.getLanguageString();
303 public void propertyChange(PropertyChangeEvent event
) {
304 if (event
.getSource().equals(text_target
)) {
305 setPageComplete(true);