// $Id$
/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
-*
+*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import eu.etaxonomy.cdm.model.common.Language;
import eu.etaxonomy.cdm.model.common.LanguageString;
import eu.etaxonomy.cdm.model.common.MultilanguageTextHelper;
+import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
-import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
-import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement;
-import eu.etaxonomy.taxeditor.ui.forms.LanguageStringWithLabelElement;
-import eu.etaxonomy.taxeditor.ui.forms.MultilanguageTextElement;
-import eu.etaxonomy.taxeditor.ui.forms.RootElement;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
+import eu.etaxonomy.taxeditor.ui.element.MultilanguageTextElement;
+import eu.etaxonomy.taxeditor.ui.element.RootElement;
/**
* <p>TranslationWizardPage class.</p>
* @version 1.0
*/
public class TranslationWizardPage extends WizardPage{
-
- private static int TEXT_HEIGHT = 400;
-
- private Map<Language, LanguageString> multilanguageText;
+
+ private static int TEXT_HEIGHT = 400;
+
+ private final Map<Language, LanguageString> multilanguageText;
MultilanguageTextElement source;
-
- private CdmFormFactory formFactory;
- private TermComboElement combo_sourceLanguage;
+ private final CdmFormFactory formFactory;
+
+ private TermComboElement<Language> combo_sourceLanguage;
private LanguageStringWithLabelElement text_source;
private TermComboElement<Language> combo_targetLanguage;
private LanguageStringWithLabelElement text_target;
-
+
/**
* <p>Constructor for TranslationWizardPage.</p>
*
setTitle("Add or edit translations.");
this.multilanguageText = multilanguageText;
formFactory = new CdmFormFactory(Display.getCurrent());
+ setPageComplete(false);
}
/* (non-Javadoc)
public void createControl(Composite parent) {
Composite control = formFactory.createComposite(parent);
// control.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
- control.setLayout(CdmFormFactory.LAYOUT(2, true));
-
+ control.setLayout(LayoutConstants.LAYOUT(2, true));
+
Composite leftContainer = formFactory.createComposite(control);
- leftContainer.setLayoutData(CdmFormFactory.FILL());
- leftContainer.setLayout(CdmFormFactory.LAYOUT(1, false));
+ leftContainer.setLayoutData(LayoutConstants.FILL());
+ leftContainer.setLayout(LayoutConstants.LAYOUT(1, false));
// leftContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
RootElement leftRoot = new RootElement(formFactory, leftContainer);
-
+
Composite rightContainer = formFactory.createComposite(control);
- rightContainer.setLayoutData(CdmFormFactory.FILL());
- rightContainer.setLayout(CdmFormFactory.LAYOUT(1, false));
+ rightContainer.setLayoutData(LayoutConstants.FILL());
+ rightContainer.setLayout(LayoutConstants.LAYOUT(1, false));
// rightContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
RootElement rightRoot = new RootElement(formFactory, rightContainer);
-
+
createLeftControls(leftRoot);
createRightControls(rightRoot);
-
+
// initialize with default language
setSource(CdmStore.getDefaultLanguage());
-
-
+
+
setControl(control);
}
-
+
/**
* @param defaultLanguage
*/
private void setSource(Language language) {
-
+
List<Language> languages = Arrays.asList(new Language[]{language});
-
+
LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, languages);
-
+
if(preferredLanguageString != null){
combo_sourceLanguage.setSelection(preferredLanguageString.getLanguage());
text_source.setLanguageString(preferredLanguageString);
/**
- *
+ *
* @param element
*/
private void createLeftControls(ICdmFormElement element){
-
- combo_sourceLanguage = formFactory.createTermComboElement(null, element, null, null, SWT.NULL);
+
+ combo_sourceLanguage = formFactory.createDefinedTermComboElement(TermType.Language, element, null, null, SWT.NULL);
+
combo_sourceLanguage.setTerms(getLanguages());
-
+
combo_sourceLanguage.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
text_source.setLanguageString(multilanguageText.get(combo_sourceLanguage.getSelection()));
}
});
-
+
LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, getLanguages());
-
- text_source = formFactory.createLanguageStringWithLabelElement(element, null, preferredLanguageString, TEXT_HEIGHT, SWT.NULL);
+
+ text_source = formFactory.createLanguageStringWithLabelElement(element, null, preferredLanguageString, TEXT_HEIGHT, true, SWT.NULL);
// text_source.setEnabled(false);
-
+
text_source.setText(preferredLanguageString.getText());
}
-
+
/**
- *
+ *
* @param element
*/
private void createRightControls(ICdmFormElement element){
- combo_targetLanguage = formFactory.createTermComboElement(Language.class, element, null, null, SWT.NULL);
-
+ combo_targetLanguage = formFactory.createDefinedTermComboElement(TermType.Language, element, null, null, SWT.NULL);
+
combo_targetLanguage.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
@Override
public void widgetSelected(SelectionEvent e) {
Language language = combo_targetLanguage.getSelection();
+
+ if (language == null){
+ return;
+ }
+
+ setPageComplete(true);
LanguageString languageString;
-
+
if(multilanguageText.containsKey(language)){
languageString = multilanguageText.get(language);
}else{
languageString = LanguageString.NewInstance("", language);
- multilanguageText.put(language, languageString);
}
-
+
text_target.setLanguageString(languageString);
}
});
-
- text_target = formFactory.createLanguageStringWithLabelElement(element, null, null, TEXT_HEIGHT, SWT.NULL);
-
- Button button_translationService = formFactory.createButton(element.getLayoutComposite(), "Translate", SWT.PUSH);
- button_translationService.addSelectionListener(new SelectionAdapter() {
- /* (non-Javadoc)
- * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
- @Override
- public void widgetSelected(SelectionEvent event) {
- ITranslationServiceWrapper service = new GoogleLanguageApiWrapper();
- String translatedText;
- try {
- String text = text_source.getText();
- Language sourceLanguage = text_source.getLanguageString().getLanguage();
- Language targetLanguage = combo_targetLanguage.getSelection();
-
- translatedText = service.translate(text, sourceLanguage, targetLanguage);
- text_target.setText(translatedText);
- } catch (LanguageNotSupportedException e) {
- StoreUtil.warningDialog("Language not supported", TranslationWizardPage.class, e.getMessage());
- } catch (Exception e){
- StoreUtil.warningDialog("Error translating text", TranslationWizardPage.class, e.getMessage());
- }
-
- }
- });
+
+ text_target = formFactory.createLanguageStringWithLabelElement(element, null, null, TEXT_HEIGHT, true, SWT.NULL);
+
+ //
+ // The automated translation did rely on the Google Translate API. Unfortunately this service is not free anymore.
+ // See http://code.google.com/apis/language/translate/overview.html
+ //
+// Button button_translationService = formFactory.createButton(element.getLayoutComposite(), "Translate", SWT.PUSH);
+// button_translationService.addSelectionListener(new SelectionAdapter() {
+// /* (non-Javadoc)
+// * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+// */
+// @Override
+// public void widgetSelected(SelectionEvent event) {
+// ITranslationServiceWrapper service = new GoogleLanguageApiWrapper();
+// String translatedText;
+// try {
+// String text = text_source.getText();
+// Language sourceLanguage = text_source.getLanguageString().getLanguage();
+// Language targetLanguage = combo_targetLanguage.getSelection();
+//
+// if(targetLanguage == null){
+// StoreUtil.warningDialog("Please select a target language", TranslationWizardPage.class, "Please select a language from the combo box at the right.");
+// return;
+// }
+//
+// translatedText = service.translate(text, sourceLanguage, targetLanguage);
+// text_target.setText(translatedText);
+// } catch (LanguageNotSupportedException e) {
+// StoreUtil.warningDialog("Language not supported", TranslationWizardPage.class, "The chosen language is not supported by the translation service.");
+// } catch (Exception e){
+// StoreUtil.warningDialog("Error translating text", TranslationWizardPage.class, e.getMessage());
+// }
+//
+// }
+// });
}
-
+
/**
- *
+ *
* @return
*/
private List<Language> getLanguages(){
Set<Language> languageSet = MultilanguageTextHelper.getLanguages(multilanguageText);
-
- List<Language> languageList = new ArrayList<Language>(languageSet);
-
+
+ List<Language> languageList = new ArrayList<Language>();
+ // protect against corrupt language sets
+ for (Language language : languageSet){
+ if (language != null){
+ languageList.add(language);
+ }else{
+ MessagingUtils.warningDialog("Empty languages", getClass(), "The multilanguage string contains invalid data. Please contact the administrator of you datasource.");
+ }
+ }
+
return languageList;
}
-
+
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.DialogPage#dispose()
*/
public void dispose() {
super.dispose();
}
+
+ /**
+ * @return
+ *
+ */
+ public LanguageString getTargetLanguageString() {
+ return text_target.getLanguageString();
+ }
}