ref #8774: fix term combo for dto selection
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / combo / VocabularyComboElement.java
index 7ffafdee96f9deea7d0b0dd52c61d301b83716ca..9ef416c761473fc2899c334dace86a59cdab9b54 100644 (file)
@@ -14,9 +14,10 @@ import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.widgets.Listener;
 
 import eu.etaxonomy.cdm.api.service.IVocabularyService;
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.common.TermType;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+import eu.etaxonomy.cdm.model.term.TermType;
+import eu.etaxonomy.cdm.model.term.TermVocabulary;
+import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -43,7 +44,7 @@ public class VocabularyComboElement<TERM extends DefinedTermBase<TERM>, VOC exte
 
     private final TermType termType;
 
-       public VocabularyComboElement(CdmFormFactory formFactory,
+    public VocabularyComboElement(CdmFormFactory formFactory,
                ICdmFormElement parentElement, TermType termType, String labelString, VOC selection,
                int style) {
         super(formFactory, parentElement);
@@ -54,6 +55,8 @@ public class VocabularyComboElement<TERM extends DefinedTermBase<TERM>, VOC exte
 
         combo.addSelectionListener(this);
         combo.addDisposeListener(this);
+        addContentProposalAdapter();
+
         PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
 
         if (selection != null) {
@@ -61,7 +64,30 @@ public class VocabularyComboElement<TERM extends DefinedTermBase<TERM>, VOC exte
         }
        }
 
-       /**
+       public VocabularyComboElement(CdmFormFactory formFactory,
+            ICdmFormElement parentElement, TermType termType, String labelString, TermVocabularyDto selection,
+            int style) {
+        super(formFactory, parentElement);
+
+        this.termType = termType;
+
+        populateTerms(getVocabularies());
+
+        combo.addSelectionListener(this);
+        combo.addDisposeListener(this);
+        addContentProposalAdapter();
+
+        PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
+
+        if (selection != null) {
+            setSelectionDto(selection);
+        }
+    }
+
+
+
+
+    /**
         * <p>Sets the selection of the combo to the given T object.</p>
         * <p>Passing <code>null</code> to this method will set the selection to
         * the empty element and effectively clear the selection</p>
@@ -73,13 +99,11 @@ public class VocabularyComboElement<TERM extends DefinedTermBase<TERM>, VOC exte
     public void setSelection(VOC selection) {
                this.selection = selection;
 
-               this.selection = selection;
-
                Listener[] listeners = combo.getListeners(SWT.Selection);
 
-               for (Listener listener : listeners) {
-                       combo.removeListener(SWT.Selection, listener);
-               }
+//             for (Listener listener : listeners) {
+//                     combo.removeListener(SWT.Selection, listener);
+//             }
                int selectedIndex;
                if(selection == null){
                        // set selection to the emptyElement
@@ -93,11 +117,44 @@ public class VocabularyComboElement<TERM extends DefinedTermBase<TERM>, VOC exte
                }
                combo.select(selectedIndex);
 
-               for (Listener listener : listeners) {
-                       combo.addListener(SWT.Selection, listener);
-               }
+//             for (Listener listener : listeners) {
+//                     combo.addListener(SWT.Selection, listener);
+//             }
        }
 
+
+    public void setSelectionDto(TermVocabularyDto selection) {
+        Listener[] listeners = combo.getListeners(SWT.Selection);
+
+//      for (Listener listener : listeners) {
+//          combo.removeListener(SWT.Selection, listener);
+//      }
+        int selectedIndex = 0;
+        if(selection == null){
+            // set selection to the emptyElement
+            selectedIndex = 0;
+        }else{
+            for (VOC voc: terms){
+
+                if (voc != null && voc.getUuid().equals(selection.getUuid())){
+                    selectedIndex = terms.indexOf(voc);
+                }
+            }
+
+//            if (selectedIndex == -1) {
+//                createTermNotInPreferredTerms(selection);
+//                selectedIndex = terms.indexOf(selection);
+//            }
+        }
+        if (selectedIndex > -1) {
+            combo.select(selectedIndex);
+        }
+
+//      for (Listener listener : listeners) {
+//          combo.addListener(SWT.Selection, listener);
+//      }
+    }
+
        /**
         * Fills the combo with elements and sets up the convenience functions
         * for selection index
@@ -119,6 +176,19 @@ public class VocabularyComboElement<TERM extends DefinedTermBase<TERM>, VOC exte
 
                if (vocComparator != null) {
                        Collections.sort(preferredTerms, vocComparator);
+               }else{
+                   Collections.sort(preferredTerms, new Comparator<VOC>() {
+
+                @Override
+                public int compare(VOC o1, VOC o2) {
+                    if (o1.equals(o2)){
+                        return 0;
+                    }
+                    int result = ((TermVocabulary) o1).getTitleCache().toLowerCase().compareTo(((TermVocabulary)o2).getTitleCache().toLowerCase());
+
+                    return result;
+                }
+            });
                }
                for (VOC term : preferredTerms) {
                        String label = getLabel(term);
@@ -138,6 +208,7 @@ public class VocabularyComboElement<TERM extends DefinedTermBase<TERM>, VOC exte
                        }
 
                        combo.add(label);
+                       combo.setData(label, term);
                        terms.add(term);
 
                        i++;
@@ -156,7 +227,7 @@ public class VocabularyComboElement<TERM extends DefinedTermBase<TERM>, VOC exte
        }
 
        protected List<VOC> getVocabularies(){
-           List<TermVocabulary<TERM>> list = CdmStore.getService(IVocabularyService.class).<TERM>findByTermType(termType);
+           List<TermVocabulary<TERM>> list = CdmStore.getService(IVocabularyService.class).<TERM>findByTermType(termType, null);
                return (List<VOC>) list;
        }
 
@@ -187,7 +258,12 @@ public class VocabularyComboElement<TERM extends DefinedTermBase<TERM>, VOC exte
        /** {@inheritDoc} */
        @Override
     public void widgetSelected(SelectionEvent e) {
-               selection = terms.get(combo.getSelectionIndex());
+           int i = combo.getSelectionIndex();
+           if (i > -1){
+               selection = terms.get(i);
+           }else{
+               selection = null;
+           }
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
        }