add multilanguage support for terms
authorKatja Luther <k.luther@bgbm.org>
Wed, 22 Jun 2016 13:23:29 +0000 (15:23 +0200)
committerKatja Luther <k.luther@bgbm.org>
Wed, 22 Jun 2016 13:23:29 +0000 (15:23 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/MultilanguageTextElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/AbstractTermBaseDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/DefinedTermDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/NamedAreaDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/TermTranslationWizard.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/TermVocabularyDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/translation/TermTranslationWizardPage.java [new file with mode: 0644]

index 705485db644effe6140487134f20830e4391b32f..ca914d0c5158f9d1c1f9a7e329427d43f960bf86 100644 (file)
@@ -62,6 +62,8 @@ import eu.etaxonomy.cdm.model.common.LSID;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.LanguageString;
 import eu.etaxonomy.cdm.model.common.Marker;
+import eu.etaxonomy.cdm.model.common.Representation;
+import eu.etaxonomy.cdm.model.common.TermBase;
 import eu.etaxonomy.cdm.model.common.TermType;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.common.TimePeriod;
@@ -590,6 +592,58 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    /**
+     * <p>
+     * createMultiLanguageTextElement
+     * </p>
+     *
+     * @param parentElement
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+     *            object.
+     *
+     * @param Representation
+     *            a {@link eu.etaxonomy.cdm.model.common.Representation} object.
+     * @param textHeight
+     *            a int.
+     * @param style
+     *            a int.
+     * @return a
+     *         {@link eu.etaxonomy.taxeditor.ui.element.RepresentationElement}
+     *         object.
+     */
+    public RepresentationElement createRepresentationElement(ICdmFormElement parentElement, Representation representation, TermBase term,int textHeight, int style, boolean isTranslationWizard) {
+        RepresentationElement element = new RepresentationElement(this, parentElement, representation, term, textHeight, style, isTranslationWizard);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+    /**
+     * <p>
+     * createMultiLanguageTextElement
+     * </p>
+     *
+     * @param parentElement
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+     *            object.
+     *
+     * @param term
+     *            a {@link eu.etaxonomy.cdm.model.common.Representation} object.
+     * @param textHeight
+     *            a int.
+     * @param style
+     *            a int.
+     * @return a
+     *         {@link eu.etaxonomy.taxeditor.ui.element.RepresentationElement}
+     *         object.
+     */
+    public RepresentationElement createRepresentationElement(ICdmFormElement parentElement, TermBase term, int textHeight, int style, boolean isTranslationWizard) {
+        RepresentationElement element = new RepresentationElement(this, parentElement, term, textHeight, style, isTranslationWizard);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
     public KeyStatementElement createKeyStatementElement(ICdmFormElement parentElement, String labelString,
             KeyStatement keyStatement, int textHeight, int style) {
         KeyStatementElement element = new KeyStatementElement(this, parentElement, labelString, keyStatement,
@@ -2349,7 +2403,7 @@ public class CdmFormFactory extends FormToolkit {
         addAndAdaptSection(parentElement, section);
         return section;
     }
-    
+
     public DerivedUnitFacadeIdentifierSection createDerivedUnitFacadeIdentifierSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
        DerivedUnitFacadeIdentifierSection section = new DerivedUnitFacadeIdentifierSection(this, conversation, parentElement, style);
        addAndAdaptSection(parentElement, section);
index 7f040a8680ade1770d7d2e0efcbd235db569e885..156e36eb91d3b946e9c98338f666f75a49c8719a 100644 (file)
@@ -66,7 +66,7 @@ public class MultilanguageTextElement extends AbstractCdmFormElement implements
                        Map<Language, LanguageString> multilanguageText = getMultilanguageText();
 
                        if (multilanguageText == null){
-                               MessagingUtils.warningDialog("No text to transalte", getClass(), "The text is empty and therefore can not be translated");
+                               MessagingUtils.warningDialog("No text to translate", getClass(), "The text is empty and therefore can not be translated");
                        }
 
                        TranslationWizard wizard = new TranslationWizard(multilanguageText);
index a871d1e3b0a13ad667d7b2c397f6564e1f588aa3..25feb360ccb66b98ed902d8e282905453462b7c9 100644 (file)
@@ -1,23 +1,23 @@
 // $Id$\r
 /**\r
 * Copyright (C) 2009 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
 * http://www.e-taxonomy.eu\r
-* \r
+*\r
 * The contents of this file are subject to the Mozilla Public License Version 1.1\r
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
 package eu.etaxonomy.taxeditor.ui.section.vocabulary;\r
 \r
-import eu.etaxonomy.cdm.model.common.Language;\r
-import eu.etaxonomy.cdm.model.common.Representation;\r
+import org.eclipse.swt.widgets.Button;\r
+\r
 import eu.etaxonomy.cdm.model.common.TermBase;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.taxeditor.editor.definedterm.TermBasePropertyTester;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;\r
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;\r
-import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;\r
+import eu.etaxonomy.taxeditor.ui.element.RepresentationElement;\r
 import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;\r
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;\r
 \r
@@ -28,11 +28,17 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
  */\r
 public abstract class AbstractTermBaseDetailElement<T extends TermBase> extends AbstractCdmDetailElement<T> {\r
 \r
-       protected TextWithLabelElement text_label;\r
-       protected TextWithLabelElement text_description;\r
+    //protected TextWithLabelElement text_label;\r
+       //protected TextWithLabelElement text_description;\r
        protected UriWithLabelElement uri_uri;\r
-       protected TextWithLabelElement text_abbreviatedLabel;\r
-       \r
+       //protected TextWithLabelElement text_abbreviatedLabel;\r
+       //protected TermComboElement<Language> combo_language;\r
+       //private TermBase term;\r
+       //protected Representation representation;\r
+       protected RepresentationElement element_Representation;\r
+       private Button button;\r
+\r
+\r
        /**\r
         * @param formFactory\r
         * @param formElement\r
@@ -41,45 +47,29 @@ public abstract class AbstractTermBaseDetailElement<T extends TermBase> extends
                        ICdmFormElement formElement) {\r
                super(formFactory, formElement);\r
        }\r
-       \r
+\r
        @Override\r
        protected void createControls(ICdmFormElement formElement,\r
                        T entity, int style) {\r
-               \r
-               Representation representation = getEntity().getPreferredRepresentation(CdmStore.getDefaultLanguage());\r
-               \r
-               text_label = formFactory.createTextWithLabelElement(formElement, "Label", representation.getLabel(), style);\r
-               text_abbreviatedLabel = formFactory.createTextWithLabelElement(formElement, "Abbrev. Label", representation.getAbbreviatedLabel(), style);\r
-               text_description = formFactory.createMultiLineTextWithLabel(formElement, "Description", 100, style);\r
-               text_description.setText(representation.getDescription());\r
+\r
+               element_Representation = formFactory.createRepresentationElement(formElement,  getEntity().getPreferredRepresentation(CdmStore.getDefaultLanguage()),getEntity(), 100, style, false);\r
+\r
                uri_uri = formFactory.createUriWithLabelElement(formElement, "URI", getEntity().getUri(), style);\r
-               \r
+\r
        }\r
 \r
-       @Override\r
+\r
+\r
+    @Override\r
        public void setEntity(T entity) {\r
                super.setEntity(entity);\r
                setEnabled(TermBasePropertyTester.isModifiable(entity));\r
        }\r
-       \r
-       protected void handleRepresentation(Object eventSource){\r
-               T entity = getEntity();\r
-               Representation representation = entity.getRepresentation(CdmStore.getDefaultLanguage());\r
-               \r
-               if (representation == null){\r
-                       return;\r
-               }\r
-               \r
-               if (eventSource == text_label){\r
-                       representation.setLabel(text_label.getText());\r
-                       entity.setLabel(text_label.getText());\r
-               }else if (eventSource == text_abbreviatedLabel){\r
-                       representation.setAbbreviatedLabel(text_abbreviatedLabel.getText());\r
-               }else if (eventSource == text_description){\r
-                       representation.setText(text_description.getText());\r
-               }\r
-       }\r
+\r
+\r
 \r
        public abstract TermVocabulary getVocabulary();\r
-               \r
+\r
+\r
+\r
 }\r
index 90e1584048a03f04fd3e0bce41303e777f5f9de7..bfd3e62ecf019271b865294f61e051442043976c 100644 (file)
@@ -50,7 +50,7 @@ public class DefinedTermDetailElement<T extends DefinedTermBase> extends Abstrac
         */\r
        @Override\r
        public void handleEvent(Object eventSource) {\r
-               handleRepresentation(eventSource);\r
+               //handleRepresentation(eventSource);\r
                if(eventSource==textIdInVocabulary){\r
                        if (StringUtils.isBlank(textIdInVocabulary.getText())){\r
                                getEntity().setIdInVocabulary(null);\r
index f2621ebd217500019e58521035fefab3f9856c2c..357081b787bd08c14e63289b7d1afffbf5aebafb 100644 (file)
@@ -9,7 +9,6 @@
 */\r
 package eu.etaxonomy.taxeditor.ui.section.vocabulary;\r
 \r
-import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.TermType;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
@@ -60,15 +59,13 @@ public class NamedAreaDetailElement extends DefinedTermDetailElement<NamedArea>
 \r
                if (eventSource == textIdInVocabulary){\r
                        getEntity().setIdInVocabulary(textIdInVocabulary.getText());\r
-               } else if (eventSource == text_label) {\r
-                       getEntity().setLabel(text_label.getText());\r
+               } else if (eventSource == element_Representation) {\r
+                       getEntity().setLabel(element_Representation.getSelectedRepresentation().getLabel(),  element_Representation.getSelectedRepresentation().getLanguage());\r
+                       getEntity().getRepresentation(element_Representation.getSelectedRepresentation().getLanguage()).setAbbreviatedLabel(element_Representation.getSelectedRepresentation().getAbbreviatedLabel());\r
+                       getEntity().getRepresentation(element_Representation.getSelectedRepresentation().getLanguage()).setText(element_Representation.getSelectedRepresentation().getDescription());\r
                        getEntity().setTitleCache(null);\r
-               } else if (eventSource == text_description) {\r
-                       getEntity().getRepresentation(Language.getDefaultLanguage()).setText(text_description.getText());\r
                } else if (eventSource == uri_uri) {\r
                        getEntity().setUri(uri_uri.parseText());\r
-               } else if (eventSource == text_abbreviatedLabel) {\r
-                       getEntity().getRepresentation(Language.getDefaultLanguage()).setAbbreviatedLabel(text_abbreviatedLabel.getText());\r
                } else if (eventSource == timePeriod_validPeriod) {\r
                        getEntity().setValidPeriod(timePeriod_validPeriod.getTimePeriod());\r
                } else if (eventSource == combo_namedAreaType) {\r
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/TermTranslationWizard.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/TermTranslationWizard.java
new file mode 100644 (file)
index 0000000..d101920
--- /dev/null
@@ -0,0 +1,63 @@
+// $Id$
+/**
+* Copyright (C) 2016 EDIT
+* 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.
+*/
+package eu.etaxonomy.taxeditor.ui.section.vocabulary;
+
+import org.eclipse.jface.wizard.Wizard;
+
+import eu.etaxonomy.cdm.model.common.Representation;
+import eu.etaxonomy.cdm.model.common.TermBase;
+import eu.etaxonomy.taxeditor.ui.translation.TermTranslationWizardPage;
+
+/**
+ * @author k.luther
+ * @date 22.06.2016
+ *
+ */
+public class TermTranslationWizard extends Wizard {
+    private TermTranslationWizardPage page;
+
+    private final TermBase term;
+
+    /**
+     * <p>Constructor for TranslationWizard.</p>
+     *
+     * @param multilanguageText a {@link java.util.Map} object.
+     */
+    public TermTranslationWizard(TermBase term) {
+        setWindowTitle("Translation Editor");
+        this.term = term;
+        setNeedsProgressMonitor(true);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#addPages()
+     */
+    /** {@inheritDoc} */
+    @Override
+    public void addPages() {
+        page = new TermTranslationWizardPage(term);
+        addPage(page);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#performFinish()
+     */
+    /** {@inheritDoc} */
+    @Override
+    public boolean performFinish() {
+        Representation representation = page.getTargetRepresentation();
+
+        if (!representation.getText().equals("") || !representation.getLabel().equals("") || !representation.getAbbreviatedLabel().equals("")) {
+            term.addRepresentation(representation);
+        }
+
+        return true;
+    }
+}
index 281b383e86be43be5d765258aba8012ed6cda478..72152d2b022f80e074ee22f0b0fb025475aebc80 100644 (file)
@@ -48,7 +48,7 @@ public class TermVocabularyDetailElement extends AbstractTermBaseDetailElement<T
        @Override\r
        public void handleEvent(Object eventSource) {\r
 \r
-               handleRepresentation(eventSource);\r
+               //handleRepresentation(eventSource);\r
 \r
                if (eventSource == uri_uri) {\r
                        getEntity().setUri(uri_uri.parseText());\r
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/translation/TermTranslationWizardPage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/translation/TermTranslationWizardPage.java
new file mode 100644 (file)
index 0000000..aeb5301
--- /dev/null
@@ -0,0 +1,171 @@
+// $Id$
+/**
+* Copyright (C) 2016 EDIT
+* 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.
+*/
+package eu.etaxonomy.taxeditor.ui.translation;
+
+/**
+ * @author k.luther
+ * @date 22.06.2016
+ *
+ */
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+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.Representation;
+import eu.etaxonomy.cdm.model.common.TermBase;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
+import eu.etaxonomy.taxeditor.ui.element.MultilanguageTextElement;
+import eu.etaxonomy.taxeditor.ui.element.RepresentationElement;
+import eu.etaxonomy.taxeditor.ui.element.RootElement;
+
+public class TermTranslationWizardPage extends WizardPage implements PropertyChangeListener{
+
+
+        private static int TEXT_HEIGHT = 400;
+
+        private final TermBase term;
+
+        MultilanguageTextElement source;
+
+        private final CdmFormFactory formFactory;
+
+        private RepresentationElement text_source;
+
+        private RepresentationElement text_target;
+
+        /**
+         * <p>Constructor for TranslationWizardPage.</p>
+         *
+         * @param multilanguageText a {@link java.util.Map} object.
+         */
+        public TermTranslationWizardPage(TermBase term) {
+            super("TranslationWizardPage");
+            //Assert.isNotNull(multilanguageText, "Multilanguage text may not be null");
+            setTitle("Add or edit translations.");
+            this.term = term;
+            formFactory = new CdmFormFactory(Display.getCurrent());
+            setPageComplete(false);
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+         */
+        /** {@inheritDoc} */
+        @Override
+        public void createControl(Composite parent) {
+            Composite control = formFactory.createComposite(parent);
+//          control.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
+            control.setLayout(LayoutConstants.LAYOUT(2, false));
+
+            Composite leftContainer = formFactory.createComposite(control);
+            leftContainer.setLayoutData(LayoutConstants.FILL(1, 4));
+            leftContainer.setLayout(LayoutConstants.LAYOUT(2, false));
+//          leftContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
+            RootElement leftRoot = new RootElement(formFactory, leftContainer);
+
+            Composite rightContainer = formFactory.createComposite(control);
+            rightContainer.setLayoutData(LayoutConstants.FILL(1, 4));
+            rightContainer.setLayout(LayoutConstants.LAYOUT(2, 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);
+            setPageComplete(true);
+        }
+
+        /**
+         * @param defaultLanguage
+         */
+        private void setSource(Language language) {
+
+           Representation preferredRepresentation =term.getPreferredRepresentation(language);
+
+            if(preferredRepresentation != null){
+               text_source.setSelectedRepresentation(preferredRepresentation);
+            }
+        }
+
+
+        /**
+         *
+         * @param element
+         */
+        private void createLeftControls(ICdmFormElement element){
+            Representation preferredRepresentation= term.getPreferredRepresentation(CdmStore.getDefaultLanguage());
+
+            text_source = formFactory.createRepresentationElement(element, preferredRepresentation,term,  TEXT_HEIGHT,  SWT.NULL, true);
+
+
+        }
+
+        /**
+         *
+         * @param element
+         */
+        private void createRightControls(ICdmFormElement element){
+            text_target = formFactory.createRepresentationElement(element, null, term, TEXT_HEIGHT, SWT.NULL, true);
+        }
+
+
+
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.dialogs.DialogPage#dispose()
+         */
+        /** {@inheritDoc} */
+        @Override
+        public void dispose() {
+            super.dispose();
+        }
+
+        /**
+         * @return
+         *
+         */
+        public Representation getTargetRepresentation() {
+            return text_target.getSelectedRepresentation();
+        }
+
+        /* (non-Javadoc)
+         * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+         */
+        @Override
+        public void propertyChange(PropertyChangeEvent evt) {
+            if (evt.getSource() == text_target){
+                if (!StringUtils.isBlank(text_target.getSelectedRepresentation().getAbbreviatedLabel()) ||
+                        !StringUtils.isBlank(text_target.getSelectedRepresentation().getLabel()) || !StringUtils.isBlank(text_target.getSelectedRepresentation().getText())){
+                    setPageComplete(true);
+                }
+            }
+
+        }
+
+
+
+
+}