ref #10530: comparator for termdtos should be used for rank_combo
authorKatja <k.luther@bgbm.org>
Fri, 14 Jun 2024 14:40:47 +0000 (16:40 +0200)
committerKatja <k.luther@bgbm.org>
Fri, 14 Jun 2024 14:40:47 +0000 (16:40 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/term/TermDtoComboElement.java
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/section/name/NameDetailElement.java

index 09f59d2745c26875689714ab2580b90e85613917..e4ef338887243f4a1fc0b12387f099d1e1d5a55b 100644 (file)
@@ -59,6 +59,7 @@ public class TermDtoComboElement
 
        public void setTermComparator(Comparator<TermDto> termComparator) {
                this.termComparator = termComparator;
+               Collections.sort(this.getTerms(), termComparator);
                populateTerms();
        }
 
@@ -86,6 +87,11 @@ public class TermDtoComboElement
             int style) {
         this(formFactory, parentElement, null, termType, null, null,labelString, selection, addEmptyElement, style, false, new DefaultTermDtoComparator());
     }
+    public TermDtoComboElement(CdmFormFactory formFactory,
+            ICdmFormElement parentElement, TermType termType, String labelString, TermDto selection, boolean addEmptyElement,
+            int style, Comparator<TermDto> comparator) {
+        this(formFactory, parentElement, null, termType, null, null,labelString, selection, addEmptyElement, style, false, comparator);
+    }
 
     public TermDtoComboElement(CdmFormFactory formFactory,
             ICdmFormElement parentElement, Class<DefinedTermBase> termClass, String labelString, TermDto selection, boolean addEmptyElement,
@@ -281,12 +287,13 @@ public class TermDtoComboElement
         */
        protected void populateTerms() {
                combo.removeAll();
-               int i = 1;
+               int i = 0;
                int index = 0;
 
                if(addEmptyElement){
                    // Add an empty element for when nothing was selected yet
                    combo.add(EMPTY_ELEMENT_LABEL);
+                   i= 1;
                }
                List<TermDto> withoutNull = new ArrayList<>(terms);
 
@@ -313,12 +320,17 @@ public class TermDtoComboElement
                        }
                        combo.add(label);
                        combo.setData(label, term);
-                       i++;
+
+
+
                        if (selection != null) {
                                if (selection.equals(term)) {
                                        index = i;
                                }
                        }
+                       i++;
+
+
                }
         if (selection != null && index == 0) {
                        createTermNotInPreferredTerms(selection, terms);
index 0d740de78eb1bc198fb36c5e0397da0b4d62762d..39c2b455cc7ab9412e1df60d21e78677a7f4db40 100755 (executable)
@@ -1006,6 +1006,47 @@ public class CdmFormFactory extends FormToolkit {
             int style) {
         return  this.createDefinedTermComboElement(termType, null, null, parentElement, labelString, selection, true, style, false, null);
     }
+       public TermDtoComboElement createDefinedTermComboElementDto(
+            TermType termType,
+            List<TermDto> terms,
+            ICdmFormElement parentElement,
+            String labelString,
+            TermDto selection,
+            boolean addEmptyElement,
+            Comparator<TermDto> comparator,
+            int style) {
+           if(termType!=null){
+            //TermDtoComboElement element = new TermDtoComboElement(this,
+            //        parentElement, termType, labelString, selection, addEmptyElement,
+            //        style);
+            TermDtoComboElement element = new TermDtoComboElement(this, parentElement, termType, labelString, selection, addEmptyElement, style, comparator);
+
+            adapt(element);
+            parentElement.addElement(element);
+            return element;
+//        }
+//        else if(termVocabulary != null){
+//            TermDtoComboElement<T> element = new TermDtoComboElement<>(this, parentElement, termVocabulary, labelString, selection, addEmptyElement, style, useAbbrevLabel, comparator);
+////          if (comparator!= null){
+////              element.setTermComparator(comparator);
+////          }
+//            adapt(element);
+//            parentElement.addElement(element);
+//            return element;
+        }else if (terms != null){
+
+            TermDtoComboElement element = new TermDtoComboElement(this, parentElement, terms, labelString, selection, addEmptyElement, style, false, comparator);
+
+            adapt(element);
+            parentElement.addElement(element);
+            return element;
+        }
+        else {
+            //this should never happen
+            return null;
+        }
+
+       }
 
        public TermDtoComboElement createDefinedTermComboElementDto(
             TermType termType,
index 9d08d291129ce37df1fd3301b85ec0ed02b18f12..484a7fd1c27ff64870e55f12422d63f2fd5f4c0a 100644 (file)
@@ -82,20 +82,20 @@ public class NameDetailElement
 
        @Override
        protected void createControls(ICdmFormElement formElement, INonViralName nonViralName, int style) {
-               Comparator<Rank> comparator = null;
+               Comparator<TermDto> comparator = null;
                config = PreferencesUtil.getPreferredNameDetailsConfiguration();
 
-               if(PreferencesUtil.getSortRanksHierarchichally()){
-                       comparator = new Comparator<Rank>(){
+               //if(PreferencesUtil.getSortRanksHierarchichally()){
+                       comparator = new Comparator<TermDto>(){
                                @Override
-                               public int compare(Rank o1, Rank o2) {
+                               public int compare(TermDto o1, TermDto o2) {
                                    if (o2 == null){
                                        return -1;
                                    }
-                                       return -1*o1.compareTo(o2);
+                                       return o1.getOrderIndex().compareTo(o2.getOrderIndex());
                                }
                        };
-               }
+               //}
                if (nonViralName.getRank() != null && !(nonViralName.getRank().isCultivar() == nonViralName.getNameType().equals(NomenclaturalCode.ICNCP))){
                    nonViralName.setRank(null);
                }
@@ -103,7 +103,8 @@ public class NameDetailElement
                toggleable_cache = formFactory.createToggleableTextField(this, "Name Cache", nonViralName.getNameCache(), nonViralName.isProtectedNameCache(), style);
                List<TermDto> ranks = getRanks(nonViralName, nonViralName.getNameType());
 
-               combo_rank = formFactory.createDefinedTermComboElementDto(null, ranks, this, "Rank", TermDto.fromTerm(nonViralName.getRank()),true, style);
+               combo_rank = formFactory.createDefinedTermComboElementDto(null, ranks, this, "Rank", TermDto.fromTerm(nonViralName.getRank()),true, comparator, style);
+               //combo_rank.setTermComparator(comparator);
                createGenusOrUninomialControls(this, nonViralName, style);
             createInfragenerericEpithetControls(this, nonViralName, style);
             createSpecificEpithetControls(this, nonViralName, style);
@@ -117,7 +118,8 @@ public class NameDetailElement
 
            if (config.isRankActivated()){
                List<TermDto> ranks = getRanks(nonViralName, nonViralName.getNameType());
-                combo_rank = formFactory.createDefinedTermComboElementDto(null, ranks, this, "Rank", TermDto.fromTerm(nonViralName.getRank()),true, style);
+                combo_rank = formFactory.createDefinedTermComboElementDto(null, ranks, this, "Rank", TermDto.fromTerm(nonViralName.getRank()),true, comparator, style);
+                //combo_rank.setTermComparator(comparator);
            }
 
                if (config.isAtomisedEpithetsActivated()){
@@ -258,6 +260,8 @@ public class NameDetailElement
                        ranks.add(term);
                    }
                }
+        ranks.sort( (a, b) -> { return  a.getOrderIndex().compareTo(b.getOrderIndex()); } );
+
                return ranks;
     }