merged trunk into branch
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / translation / TranslationWizardPage.java
index e45397d0bb615bb27729ae91f67778b69cf21077..526f9eeac832786400c7cb0131506ef0ea184f7e 100644 (file)
@@ -1,9 +1,9 @@
 // $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.
 */
@@ -21,19 +21,20 @@ import org.eclipse.jface.wizard.WizardPage;
 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.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;
 
@@ -45,23 +46,23 @@ import eu.etaxonomy.taxeditor.ui.element.RootElement;
  * @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>
         *
@@ -73,6 +74,7 @@ public class TranslationWizardPage extends WizardPage{
                setTitle("Add or edit translations.");
                this.multilanguageText = multilanguageText;
                formFactory = new CdmFormFactory(Display.getCurrent());
+               setPageComplete(false);
        }
 
        /* (non-Javadoc)
@@ -83,39 +85,39 @@ public class TranslationWizardPage extends WizardPage{
        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);
@@ -124,14 +126,15 @@ public class TranslationWizardPage extends WizardPage{
 
 
        /**
-        * 
+        *
         * @param element
         */
        private void createLeftControls(ICdmFormElement element){
-               
-               combo_sourceLanguage = formFactory.createTermComboElement(Language.class, 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)
@@ -141,23 +144,23 @@ public class TranslationWizardPage extends WizardPage{
                                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)
@@ -165,59 +168,82 @@ public class TranslationWizardPage extends WizardPage{
                        @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);
                                }
-                               
+
                                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()
         */
@@ -228,8 +254,8 @@ public class TranslationWizardPage extends WizardPage{
        }
 
        /**
-        * @return 
-        * 
+        * @return
+        *
         */
        public LanguageString getTargetLanguageString() {
                return text_target.getLanguageString();