ref #10033: vocabulary representation should be editable in taxeditor
authorKatja Luther <k.luther@bgbm.org>
Mon, 20 Jun 2022 08:57:20 +0000 (10:57 +0200)
committerKatja Luther <k.luther@bgbm.org>
Mon, 20 Jun 2022 08:57:20 +0000 (10:57 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/RepresentationElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/TranslatableRepresentationElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/TermTreeDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/TermTreeDetailElementForNode.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/TermTranslationWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/translation/TermTranslationWizardPage.java

index d656dcc5f46c03d532f90e72cb18ccd898b2ac88..4fe7d74486ef80769589a6d33ec72712cf13f71b 100644 (file)
@@ -29,6 +29,7 @@ import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.term.Representation;
 import eu.etaxonomy.cdm.model.term.TermBase;
 import eu.etaxonomy.cdm.model.term.TermType;
+import eu.etaxonomy.cdm.persistence.dto.AbstractTermDto;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
 import eu.etaxonomy.taxeditor.model.ImageResources;
@@ -50,7 +51,7 @@ public class RepresentationElement extends AbstractCdmFormElement implements IEn
 
         protected Representation selectedRepresentation;
         protected TermBase term;
-        protected TermDto termDto;
+        protected AbstractTermDto termDto;
 
                private Button removeRepresentation;
 
@@ -77,14 +78,14 @@ public class RepresentationElement extends AbstractCdmFormElement implements IEn
                 createRepresentationEditingElements(formElement, style);
             }
             setTerm(term, fill);
-            if(representation!=null){
+            //if(representation!=null){
                 setSelectedRepresentation(representation);
-            }
+           //}
 
         }
 
         public RepresentationElement(CdmFormFactory formFactory,
-                ICdmFormElement formElement, Representation representation, TermDto term,
+                ICdmFormElement formElement, Representation representation, AbstractTermDto term,
                 Integer textHeight, int style, boolean fill) {
             super(formFactory, formElement);
 
@@ -101,6 +102,7 @@ public class RepresentationElement extends AbstractCdmFormElement implements IEn
             if(representation!=null){
                 setSelectedRepresentation(representation);
             }
+            
 
         }
 
@@ -147,22 +149,22 @@ public class RepresentationElement extends AbstractCdmFormElement implements IEn
                term.addRepresentation(rep);
             }
 
-            if (selectedRepresentation != null) {
-               combo_language.setTerms(getLanguages());
-
-            } else{
-                setEnabledControls(false);
-                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
-                        removeRepresentation.setEnabled(false);
-                 }
-            }
+//            if (selectedRepresentation != null) {
+//               combo_language.setTerms(getLanguages());
+//
+//            } else{
+//              setEnabledControls(false);
+//                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
+//                      removeRepresentation.setEnabled(false);
+//                 }
+//            }
             if (update){
                updateControls();
             }
         }
 
         public void setTermDto(
-                TermDto term, boolean update) {
+                       AbstractTermDto term, boolean update) {
             this.termDto = term;
             if (term.getRepresentations().isEmpty()){
                 //if the term has no representation at all, create a default one.
@@ -173,12 +175,13 @@ public class RepresentationElement extends AbstractCdmFormElement implements IEn
             if (selectedRepresentation != null) {
                combo_language.setTerms(getLanguages());
 
-            } else{
-                 setEnabledControls(false);
-                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
-                     removeRepresentation.setEnabled(false);
-                 }
-            }
+            } 
+//            else if (!term.getRepresentations().isEmpty()){
+//                 setEnabledControls(false);
+//                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
+//                     removeRepresentation.setEnabled(false);
+//                 }
+//            }
             if (update){
                 updateControls();
             }
@@ -234,6 +237,9 @@ public class RepresentationElement extends AbstractCdmFormElement implements IEn
         public TermBase getTerm() {
             return term;
         }
+        public AbstractTermDto getTermDto() {
+            return termDto;
+        }
 
         @Override
         public void propertyChange(PropertyChangeEvent event) {
@@ -278,7 +284,11 @@ public class RepresentationElement extends AbstractCdmFormElement implements IEn
 
                     Language selectedLanguage = combo_language.getSelection();
                     if (selectedLanguage != null) {
-                        selectedRepresentation = getTerm().getRepresentation(selectedLanguage);
+                       if (getTerm() != null){
+                               selectedRepresentation = getTerm().getRepresentation(selectedLanguage);
+                       }else{
+                               selectedRepresentation = getTermDto().getRepresentation(selectedLanguage);
+                       }
                         if (selectedRepresentation == null){
                             selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
                         }
index 67c68285c46e0152d7ba31446d84c35d63d7d7eb..87323b409695703296abdc192f3aa31e70c0f0de 100644 (file)
@@ -16,6 +16,7 @@ import org.eclipse.swt.events.SelectionEvent;
 
 import eu.etaxonomy.cdm.model.term.Representation;
 import eu.etaxonomy.cdm.model.term.TermBase;
+import eu.etaxonomy.cdm.persistence.dto.AbstractTermDto;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
@@ -46,7 +47,7 @@ public class TranslatableRepresentationElement extends RepresentationElement  {
     }
 
     public TranslatableRepresentationElement(CdmFormFactory formFactory, ICdmFormElement formElement,
-            Representation representation, TermDto term, Integer textHeight, int style, boolean fill) {
+            Representation representation, AbstractTermDto term, Integer textHeight, int style, boolean fill) {
         super(formFactory, formElement, representation, term, textHeight, style, fill);
 
 
@@ -82,12 +83,18 @@ public class TranslatableRepresentationElement extends RepresentationElement  {
         @Override
         public void widgetSelected(SelectionEvent e) {
             TermBase term = getTerm();
+            AbstractTermDto termDto = getTermDto();
+           
 
-            if (term == null){
+            if (term == null && termDto == null){
                 MessagingUtils.warningDialog("No term to translate", getClass(), "The term is empty and therefore can not be translated");
             }
-
-            TermTranslationWizard wizard = new TermTranslationWizard(term);
+            TermTranslationWizard wizard;
+            if (term != null) {
+               wizard = new TermTranslationWizard(term);
+            }else {
+               wizard = new TermTranslationWizard(termDto);
+            }
             WizardDialog dialog = new WizardDialog(getLayoutComposite()
                     .getShell(), wizard);
 
index fdf19ed5ffb73ae63acf8dfad96ca1d03a84c4c5..eac9ab0a1d35076b9537c4eead69548864cf700e 100644 (file)
@@ -10,14 +10,18 @@ package eu.etaxonomy.taxeditor.ui.section.feature;
 
 import org.eclipse.swt.widgets.Label;
 
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.term.Representation;
 import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
 import eu.etaxonomy.taxeditor.event.EventUtility;
 import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
 import eu.etaxonomy.taxeditor.model.ColorResources;
 import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.RepresentationElement;
 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
 
@@ -31,7 +35,8 @@ public class TermTreeDetailElement extends AbstractCdmDetailElement<TermTreeDto>
     private CheckboxElement orderRelevant;
     private CheckboxElement isFlat;
 
-    private TextWithLabelElement titleCacheText;
+    //private TextWithLabelElement titleCacheText;
+    protected RepresentationElement element_Representation;
 
        public TermTreeDetailElement(CdmFormFactory formFactory,
                        ICdmFormElement formElement) {
@@ -46,9 +51,9 @@ public class TermTreeDetailElement extends AbstractCdmDetailElement<TermTreeDto>
            lblStructureText.setText(entity.getTermType().getLabel());
            lblStructureText.setForeground(ColorResources.getColor(Resources.BLACK));
 
-           titleCacheText = formFactory.createTextWithLabelElement(
-                formElement, "Title Cache", entity.getTitleCache(), style);
-
+//         titleCacheText = formFactory.createTextWithLabelElement(
+//                formElement, "Title Cache", entity.getTitleCache(), style);
+           element_Representation = formFactory.createTranslatableRepresentationElementDto(formElement,  entity.getPreferredRepresentation(CdmStore.getDefaultLanguage()),entity, 100, style, true);
            allowDuplicates = formFactory.createCheckbox(formElement, "Allow duplicates", entity.isAllowDuplicate(), style);
            if (entity.isContainsDuplicates() && entity.isAllowDuplicate()){
                allowDuplicates.setEnabled(false);
@@ -68,8 +73,26 @@ public class TermTreeDetailElement extends AbstractCdmDetailElement<TermTreeDto>
 
        @Override
        public void handleEvent(Object eventSource) {
-           if (eventSource == titleCacheText) {
-                   getEntity().setTitleCache(titleCacheText.getText());
+           if (eventSource == element_Representation) {
+//                 getEntity().setTitleCache(titleCacheText.getText());
+               Representation selectedRepresentation = element_Representation.getSelectedRepresentation();
+            if(selectedRepresentation!=null){
+                Language representationLanguage = selectedRepresentation.getLanguage();
+                if(representationLanguage==null){
+                    representationLanguage = Language.getDefaultLanguage();
+                }
+//                getEntity().setLabel(selectedRepresentation.getLabel(),  representationLanguage);
+                Representation rep = getEntity().getRepresentation(representationLanguage);
+                if (rep == null){
+                       rep = new Representation(selectedRepresentation.getDescription(), selectedRepresentation.getLabel(), selectedRepresentation.getAbbreviatedLabel(), representationLanguage);
+                       getEntity().addRepresentation(rep);
+                }else{
+                       getEntity().getRepresentation(representationLanguage).setLabel(selectedRepresentation.getLabel());
+                       getEntity().getRepresentation(representationLanguage).setAbbreviatedLabel(selectedRepresentation.getAbbreviatedLabel());
+                       getEntity().getRepresentation(representationLanguage).setText(selectedRepresentation.getDescription());
+                }
+            }
+            getEntity().setTitleCache(null);
         }
            else
            if (eventSource == allowDuplicates) {
index 3bceaa22e7f9f0829c51cfad1ef08bf9a5f13a41..a83c0b1f44a3917718eb7ce0c6cd30f822b62703 100755 (executable)
@@ -10,14 +10,18 @@ package eu.etaxonomy.taxeditor.ui.section.feature;
 
 import org.eclipse.swt.widgets.Label;
 
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.term.Representation;
 import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.ColorResources;
 import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.termtree.e4.ICharacterEditor;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.RepresentationElement;
 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
 
@@ -31,7 +35,8 @@ public class TermTreeDetailElementForNode extends AbstractCdmDetailElement<TermT
     private CheckboxElement orderRelevant;
     private CheckboxElement isFlat;
 
-    private TextWithLabelElement titleCacheText;
+//    private TextWithLabelElement titleCacheText;
+    protected RepresentationElement element_Representation;
 
        public TermTreeDetailElementForNode(CdmFormFactory formFactory,
                        ICdmFormElement formElement) {
@@ -48,15 +53,15 @@ public class TermTreeDetailElementForNode extends AbstractCdmDetailElement<TermT
            lblStructureText.setText(entity.getTermType().getLabel());
            lblStructureText.setForeground(ColorResources.getColor(Resources.BLACK));
 
-           titleCacheText = formFactory.createTextWithLabelElement(
-                formElement, "Title Cache", entity.getTitleCache(), style);
-
+//         titleCacheText = formFactory.createTextWithLabelElement(
+//                formElement, "Title Cache", entity.getTitleCache(), style);
+           element_Representation = formFactory.createTranslatableRepresentationElement(formElement,  entity.getPreferredRepresentation(CdmStore.getDefaultLanguage()),entity, 100, style, true);
 
            allowDuplicates = formFactory.createCheckbox(formElement, "Allow duplicates", entity.isAllowDuplicates(), style);
            orderRelevant = formFactory.createCheckbox(formElement, "Order relevant", entity.isOrderRelevant(), style);
            isFlat = formFactory.createCheckbox(formElement, "Is flat", entity.isFlat(), style);
            if (AbstractUtility.getActivePart() instanceof ICharacterEditor){
-               titleCacheText.setEnabled(false);
+               element_Representation.setEnabled(false);
                allowDuplicates.setEnabled(false);
                orderRelevant.setEnabled(false);
                isFlat.setEnabled(false);
@@ -72,8 +77,18 @@ public class TermTreeDetailElementForNode extends AbstractCdmDetailElement<TermT
 
        @Override
        public void handleEvent(Object eventSource) {
-           if (eventSource == titleCacheText) {
-                   getEntity().setTitleCache(titleCacheText.getText());;
+           if (eventSource == element_Representation) {
+               Representation selectedRepresentation = element_Representation.getSelectedRepresentation();
+            if(selectedRepresentation!=null){
+                Language representationLanguage = selectedRepresentation.getLanguage();
+                if(representationLanguage==null){
+                    representationLanguage = Language.getDefaultLanguage();
+                }
+                getEntity().setLabel(selectedRepresentation.getLabel(),  representationLanguage);
+                getEntity().getRepresentation(representationLanguage).setAbbreviatedLabel(selectedRepresentation.getAbbreviatedLabel());
+                getEntity().getRepresentation(representationLanguage).setText(selectedRepresentation.getDescription());
+            }
+            getEntity().setTitleCache(null);
         }
            else
            if (eventSource == allowDuplicates) {
index d5e2f8eac25b3d72d2fa456da53bffb946a367cd..51b3e20d017eb52de0d7cb4d89b54ad7cb12fdba 100644 (file)
@@ -13,6 +13,7 @@ import org.eclipse.jface.wizard.Wizard;
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.model.term.Representation;
 import eu.etaxonomy.cdm.model.term.TermBase;
+import eu.etaxonomy.cdm.persistence.dto.AbstractTermDto;
 import eu.etaxonomy.taxeditor.ui.translation.TermTranslationWizardPage;
 
 /**
@@ -23,17 +24,28 @@ import eu.etaxonomy.taxeditor.ui.translation.TermTranslationWizardPage;
 public class TermTranslationWizard extends Wizard {
     private TermTranslationWizardPage page;
 
-    private final TermBase term;
+    private TermBase term;
+    private AbstractTermDto termDto;
 
     public TermTranslationWizard(TermBase term) {
         setWindowTitle("Translation Editor");
         this.term = term;
         setNeedsProgressMonitor(true);
     }
+    
+    public TermTranslationWizard(AbstractTermDto termDto) {
+        setWindowTitle("Translation Editor");
+        this.termDto = termDto;
+        setNeedsProgressMonitor(true);
+    }
 
     @Override
     public void addPages() {
-        page = new TermTranslationWizardPage(term);
+       if (term != null) {
+               page = new TermTranslationWizardPage(term);
+       }else {
+               page = new TermTranslationWizardPage(termDto);
+       }
         addPage(page);
     }
 
@@ -48,7 +60,11 @@ public class TermTranslationWizard extends Wizard {
                 || CdmUtils.isNotBlank(representation.getLabel())
                 || CdmUtils.isNotBlank(representation.getAbbreviatedLabel())
                 || CdmUtils.isNotBlank(representation.getPlural())){
-            term.addRepresentation(representation);
+               if (term != null) {
+                       term.addRepresentation(representation);
+               }else if (termDto != null){
+                       termDto.addRepresentation(representation);
+               }
         }
 
         return true;
index 502573a66bb7a110e2f146e134d41533f3e81db8..962b6b1318d312af497611440ce9bd03efc43f1d 100644 (file)
@@ -17,6 +17,7 @@ import org.eclipse.swt.widgets.Display;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.term.Representation;
 import eu.etaxonomy.cdm.model.term.TermBase;
+import eu.etaxonomy.cdm.persistence.dto.AbstractTermDto;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
@@ -35,8 +36,9 @@ public class TermTranslationWizardPage extends WizardPage implements IPropertyCh
 
         private static int TEXT_HEIGHT = 200;
 
-        private final TermBase term;
+        private TermBase term;
 
+        private AbstractTermDto termDto;
         private MultilanguageTextElement source;
 
         private final CdmFormFactory formFactory;
@@ -54,6 +56,16 @@ public class TermTranslationWizardPage extends WizardPage implements IPropertyCh
             formFactory.addPropertyChangeListener(this);
             setPageComplete(false);
         }
+        
+        public TermTranslationWizardPage(AbstractTermDto termDto) {
+            super("TranslationWizardPage");
+            //Assert.isNotNull(multilanguageText, "Multilanguage text may not be null");
+            setTitle("Add or edit translations.");
+            this.termDto = termDto;
+            formFactory = new CdmFormFactory(Display.getCurrent());
+            formFactory.addPropertyChangeListener(this);
+            setPageComplete(false);
+        }
 
         @Override
         public void createControl(Composite parent) {
@@ -81,22 +93,39 @@ public class TermTranslationWizardPage extends WizardPage implements IPropertyCh
         }
 
         private void setSource(Language language) {
-           Representation preferredRepresentation =term.getPreferredRepresentation(language);
-            if(preferredRepresentation != null){
-               text_source.setSelectedRepresentation(preferredRepresentation);
-            }
+               Representation preferredRepresentation ;
+               if (term != null) {
+                       preferredRepresentation =term.getPreferredRepresentation(language);                 
+               }else {
+                       preferredRepresentation =termDto.getPreferredRepresentation(language);              
+               }
+               if(preferredRepresentation != null){
+                       text_source.setSelectedRepresentation(preferredRepresentation);
+               }
         }
 
         private void createLeftControls(ICdmFormElement element){
-            Representation preferredRepresentation= term.getPreferredRepresentation(PreferencesUtil.getGlobalLanguage());
-
-            text_source = formFactory.createRepresentationElement(element, preferredRepresentation,term,  TEXT_HEIGHT,  SWT.NULL, true);
-            text_source.setTerm(term, true);
+               Representation preferredRepresentation;
+               if (term != null) {
+                       preferredRepresentation = term.getPreferredRepresentation(PreferencesUtil.getGlobalLanguage());
+                       text_source = formFactory.createRepresentationElement(element, preferredRepresentation,term,  TEXT_HEIGHT,  SWT.NULL, true);
+                text_source.setTerm(term, true);
+               }else {
+                       preferredRepresentation = termDto.getPreferredRepresentation(PreferencesUtil.getGlobalLanguage());
+                       text_source = formFactory.createRepresentationElement(element, preferredRepresentation,termDto,  TEXT_HEIGHT,  SWT.NULL, true);
+                text_source.setTermDto(termDto, true);
+               }
+
+            
 
         }
 
         private void createRightControls(ICdmFormElement element){
-            text_target = formFactory.createRepresentationElement(element, null, term, TEXT_HEIGHT, SWT.NULL, false);
+               if (term != null) {
+                       text_target = formFactory.createRepresentationElement(element, null, term, TEXT_HEIGHT, SWT.NULL, false);
+               }else {
+                       text_target = formFactory.createRepresentationElement(element, null, termDto, TEXT_HEIGHT, SWT.NULL, false);
+               }
         }
 
         @Override
@@ -113,5 +142,6 @@ public class TermTranslationWizardPage extends WizardPage implements IPropertyCh
             if (event.getSource() == text_target){
                 getWizard().getContainer().updateButtons();
             }
+            
         }
 }