ref #10316: TermNodeDto should not contain termtreedto, only some
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / RepresentationElement.java
index 9ede86e763fcbad20673a9b29bb2b1154ea1bf07..00397d71bae1a1fad4f968c82d981cbb592ef15d 100644 (file)
@@ -17,27 +17,27 @@ package eu.etaxonomy.taxeditor.ui.element;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.widgets.Button;
 
 import eu.etaxonomy.cdm.model.common.Language;
-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.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.taxeditor.model.DefaultTermComparator;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
+import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
 
 
-public class RepresentationElement  extends AbstractCdmFormElement implements
-SelectionListener{
+public class RepresentationElement extends AbstractCdmFormElement implements IEnableableFormElement{
 
         protected TermComboElement<Language> combo_language;
 
@@ -50,9 +50,12 @@ SelectionListener{
 
         protected Representation selectedRepresentation;
         protected TermBase term;
+        protected AbstractTermDto termDto;
 
                private Button removeRepresentation;
 
+               boolean isEnabled = true;
+
         public RepresentationElement(CdmFormFactory formFactory,
                 ICdmFormElement formElement, TermBase term,
                 Integer textHeight, int style, boolean fill) {
@@ -65,7 +68,7 @@ SelectionListener{
             super(formFactory, formElement);
 
             formFactory.addPropertyChangeListener(this);
-
+            setSelectedRepresentation(representation);
             element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
             element_abbrevLabel = this.formFactory.createTextWithLabelElement(formElement, "abbrev. Label", null, style);
             element_plural = this.formFactory.createTextWithLabelElement(formElement, "Plural", null, style);
@@ -74,9 +77,34 @@ SelectionListener{
                 createRepresentationEditingElements(formElement, style);
             }
             setTerm(term, fill);
+            //if(representation!=null){
+            
+           //}
+
+        }
+
+        public RepresentationElement(CdmFormFactory formFactory,
+                ICdmFormElement formElement, Representation representation, AbstractTermDto term,
+                Integer textHeight, int style, boolean fill) {
+            super(formFactory, formElement);
+
+            formFactory.addPropertyChangeListener(this);
+            if(representation!=null){
+                setSelectedRepresentation(representation);
+            }
+            element_Label = this.formFactory.createTextWithLabelElement(formElement, "Label", null, style);
+            element_abbrevLabel = this.formFactory.createTextWithLabelElement(formElement, "abbrev. Label", null, style);
+            element_plural = this.formFactory.createTextWithLabelElement(formElement, "Plural", null, style);
+            element_text = this.formFactory.createMultiLineTextWithLabel(formElement, "Description", textHeight, style);
+            if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
+                createRepresentationEditingElements(formElement, style);
+                
+            }
+            setTermDto(term, fill);
             if(representation!=null){
                 setSelectedRepresentation(representation);
             }
+            
 
         }
 
@@ -89,18 +117,26 @@ SelectionListener{
                removeRepresentation.setToolTipText("Remove representation");
                removeRepresentation.addSelectionListener(new DeleteListener(this));
                addControl(removeRepresentation);
-
+               boolean addNullValue = false;
+               if (this.selectedRepresentation == null) {
+                   addNullValue = true;
+               }
             combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
-                            "", null, false, style);
-
-            combo_language.addSelectionListener(this);
+                            "", null, addNullValue, style);
 
        }
 
         public List<Language> getLanguages() {
 
             ArrayList<Language> languageList = new ArrayList<Language>();
-            for (Representation rep: term.getRepresentations()){
+            Set<Representation> reps = null;
+            if (term != null){
+                reps = term.getRepresentations();
+            }else{
+                reps = termDto.getRepresentations();
+            }
+
+            for (Representation rep: reps){
                 languageList.add(rep.getLanguage());
             }
 
@@ -109,30 +145,6 @@ SelectionListener{
             return languageList;
         }
 
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-            Language selectedLanguage = combo_language.getSelection();
-            if (selectedLanguage != null) {
-                selectedRepresentation = getTerm().getRepresentation(
-                        selectedLanguage);
-                if (selectedRepresentation == null){
-                    selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
-                }
-                element_Label.setText(selectedRepresentation.getLabel());
-                element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
-                element_plural.setText(selectedRepresentation.getPlural());
-                element_text.setText(selectedRepresentation.getDescription());
-
-            }else {
-                setEnabledControls(false);
-            }
-
-        }
-
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-
         public void setTerm(
                 TermBase term, boolean update) {
             this.term = term;
@@ -142,17 +154,41 @@ SelectionListener{
                term.addRepresentation(rep);
             }
 
-            if (selectedRepresentation != null) {
-               combo_language.setTerms(getLanguages());
+//            if (selectedRepresentation != null) {
+//               combo_language.setTerms(getLanguages());
+//
+//            } else{
+//              setEnabledControls(false);
+//                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
+//                      removeRepresentation.setEnabled(false);
+//                 }
+//            }
+            if (update){
+               updateControls();
+            }
+        }
 
-            } else{
-                setEnabledControls(false);
-                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
-                        removeRepresentation.setEnabled(false);
-                 }
+        public void setTermDto(
+                       AbstractTermDto term, boolean update) {
+            this.termDto = term;
+            if (term.getRepresentations().isEmpty()){
+                //if the term has no representation at all, create a default one.
+                Representation rep = Representation.NewInstance("", "empty representation", "", PreferencesUtil.getGlobalLanguage());
+                term.addRepresentation(rep);
             }
+
+            if (selectedRepresentation != null && combo_language != null) {
+               combo_language.setTerms(getLanguages());
+
+            } 
+//            else if (!term.getRepresentations().isEmpty()){
+//                 setEnabledControls(false);
+//                 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
+//                     removeRepresentation.setEnabled(false);
+//                 }
+//            }
             if (update){
-               updateControls();
+                updateControls();
             }
         }
 
@@ -163,18 +199,41 @@ SelectionListener{
             element_text.setEnabled(enabled);
         }
 
+        @Override
+        public void setEnabled(boolean isEnabled){
+            this.isEnabled = isEnabled;
+            setEnabledControls(isEnabled);
+
+        }
+
+        @Override
+        public boolean isEnabled(){
+            return isEnabled;
+        }
+
         protected void updateControls() {
-            Representation preferredRepresentation = term
+            Representation preferredRepresentation = null;
+            if (term != null){
+                 preferredRepresentation = term
                     .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
+            }else{
+                 preferredRepresentation = termDto
+                        .getPreferredRepresentation(PreferencesUtil.getGlobalLanguage() );
+            }
 
-            element_Label.setText(preferredRepresentation.getLabel());
-            element_abbrevLabel.setText(preferredRepresentation.getAbbreviatedLabel());
-            element_plural.setText(preferredRepresentation.getPlural());
-            element_text.setText(preferredRepresentation.getDescription());
+            element_Label.setText(preferredRepresentation != null? preferredRepresentation.getLabel(): null);
+            element_abbrevLabel.setText(preferredRepresentation != null? preferredRepresentation.getAbbreviatedLabel(): null);
+            element_plural.setText(preferredRepresentation != null? preferredRepresentation.getPlural(): null);
+            element_text.setText(preferredRepresentation != null? preferredRepresentation.getDescription(): null);
             selectedRepresentation = preferredRepresentation;
             if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
                 combo_language.setSelection(preferredRepresentation == null?CdmStore.getDefaultLanguage():preferredRepresentation.getLanguage());
-                boolean removePossible = term.getRepresentations().size() > 1 ;
+                boolean removePossible = false;
+                if (term != null){
+                    removePossible = term.getRepresentations().size() > 1 ;
+                }else{
+                    removePossible = termDto.getRepresentations().size() > 1 ;
+                }
                 removeRepresentation.setEnabled(removePossible);
 
             }
@@ -183,6 +242,9 @@ SelectionListener{
         public TermBase getTerm() {
             return term;
         }
+        public AbstractTermDto getTermDto() {
+            return termDto;
+        }
 
         @Override
         public void propertyChange(PropertyChangeEvent event) {
@@ -215,15 +277,40 @@ SelectionListener{
             } else if (eventSource == button){
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
             } else if (eventSource == combo_language){
-               if (combo_language.getSelection() != null){
-                   setEnabledControls(true);
-                        boolean removePossible = term.getRepresentations().size() > 1 ;
-                     removeRepresentation.setEnabled(removePossible);
-               } else{
-                   setEnabledControls(false);
-                     removeRepresentation.setEnabled(false);
-               }
-               firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
+                if (combo_language.getSelection() != null){
+                    setEnabledControls(true);
+                    boolean removePossible = false;
+                    if (term != null){
+                        removePossible = term.getRepresentations().size() > 1 ;
+                    }else{
+                        removePossible = termDto.getRepresentations().size() > 1 ;
+                    }
+                    removeRepresentation.setEnabled(removePossible);
+
+                    Language selectedLanguage = combo_language.getSelection();
+                    if (selectedLanguage != null) {
+                       if (getTerm() != null){
+                               selectedRepresentation = getTerm().getRepresentation(selectedLanguage);
+                       }else{
+                               selectedRepresentation = getTermDto().getRepresentation(selectedLanguage);
+                       }
+                        if (selectedRepresentation == null){
+                            selectedRepresentation = Representation.NewInstance("", "", "", selectedLanguage);
+                        }
+                        element_Label.setText(selectedRepresentation.getLabel());
+                        element_abbrevLabel.setText(selectedRepresentation.getAbbreviatedLabel());
+                        element_plural.setText(selectedRepresentation.getPlural());
+                        element_text.setText(selectedRepresentation.getDescription());
+
+                    }else {
+                        setEnabledControls(false);
+                    }
+                } else{
+                    setEnabledControls(false);
+                    removeRepresentation.setEnabled(false);
+                }
+                //firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
+                firePropertyChangeEvent(event);
             }
         }
 
@@ -232,10 +319,11 @@ SelectionListener{
         }
 
         public void setSelectedRepresentation(Representation selectedRepresentation) {
-            if (selectedRepresentation == null){
-                selectedRepresentation = Representation.NewInstance("", "", "", null);
-            }
+//            if (selectedRepresentation == null){
+//                selectedRepresentation = Representation.NewInstance("", "", "", null);
+//            }
             this.selectedRepresentation = selectedRepresentation;
+            
         }
 
         private class DeleteListener extends SelectionAdapter {
@@ -248,12 +336,23 @@ SelectionListener{
 
                @Override
                public void widgetSelected(SelectionEvent e) {
-                       term.removeRepresentation(selectedRepresentation);
+                   if (term != null){
+                       term.removeRepresentation(selectedRepresentation);
+                   }else {
+                       termDto.getRepresentations().remove(selectedRepresentation);
+                   }
                        firePropertyChangeEvent(new CdmPropertyChangeEvent(
                                        this, e));
                        updateControls();
                }
        }
+
+        /**
+         * @param isEnabled
+         */
+        public void setLanguageComboEnabled(boolean isEnabled) {
+            this.combo_language.setEnabled(isEnabled);            
+        }
     }