fix term caching for term type and avoid doubled call of populate terms
authorKatja Luther <k.luther@bgbm.org>
Thu, 28 Oct 2021 08:41:46 +0000 (10:41 +0200)
committerKatja Luther <k.luther@bgbm.org>
Thu, 28 Oct 2021 08:41:46 +0000 (10:41 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/MisappliedRelationshipComboElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/term/TermComboElement.java

index 81e0149cfd76f7c80601f54760054d2a9619ce87..2b0c0d863af0e4999795b078c121db389c805b5e 100644 (file)
@@ -48,7 +48,7 @@ public class TermManager {
        }
 
        public <T extends DefinedTermBase> List<T> getPreferredTerms(TermType termType){
-           List<?> terms = cachedTermMap.get(termType);
+           List<?> terms = cachedTermMap.get(termType.getUuid());
            List<T> termBaseList = new ArrayList<>();
            if(terms==null || terms.isEmpty()){
                termBaseList = getFilteredTerms(TermStore.<T>getTerms(termType, null));
index 6acad5a9c1b1f1c35ad4d468469f5c1ec570c0b3..e7007417db9030f8e750dabd1c8c72a8c412d713 100755 (executable)
@@ -47,7 +47,8 @@ public class MisappliedRelationshipComboElement extends TermComboElement<TaxonRe
             relTypes.add(TaxonRelationshipType.PRO_PARTE_SYNONYM_FOR());
             relTypes.add(TaxonRelationshipType.PARTIAL_SYNONYM_FOR());
         }
-        populateTerms(relTypes);
+        addTerms(relTypes);
+        populateTerms();
         setSelection(selection);
     }
 
index 83bd35630f3b7b98862c2e1a713fd576b08b5b59..0ade14c1e6054acebc8abdd38771b2c5b118cfdd 100755 (executable)
@@ -56,9 +56,9 @@ public class TermComboElement<T extends DefinedTermBase>
 
        public void setTermComparator(Comparator<T> termComparator) {
                this.termComparator = termComparator;
-               List<T> termsWithoutNull = terms.subList(1, terms.size());
+//             List<T> termsWithoutNull = terms.subList(1, terms.size());
 
-               populateTerms(termsWithoutNull);
+               populateTerms();
 
        }
 
@@ -126,15 +126,16 @@ public class TermComboElement<T extends DefinedTermBase>
 
         if(termType!=null){
             //TODO try to remove generic T and avoid classes to be used
-            populateTerms((List<T>) getTermManager().getPreferredTerms(termType));
+               addTerms((List<T>) getTermManager().getPreferredTerms(termType));
+            
         }
         else if(termVocabulary!=null){
-            populateTerms((List<T>) getTermManager().getPreferredTerms(termVocabulary));
+            addTerms((List<T>) getTermManager().getPreferredTerms(termVocabulary));
         }
         else if(this.termClass!=null){
-            populateTerms(getPreferredTerms());
+            addTerms(getPreferredTerms());
         }else if (terms != null){
-            populateTerms(terms);
+            addTerms(terms);
         }
 
 
@@ -143,7 +144,10 @@ public class TermComboElement<T extends DefinedTermBase>
         combo.addDisposeListener(this);
         if (comparator == null){
             setTermComparator(new DefaultTermComparator<T>());
+        }else{
+               populateTerms();
         }
+        
         PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
 
         if (selection != null) {
@@ -151,6 +155,20 @@ public class TermComboElement<T extends DefinedTermBase>
         }
        }
 
+       protected void addTerms(List<T> preferredTerms) {
+               terms = new ArrayList<T>();
+               if(addEmptyElement){
+                   // Add an empty element for when nothing was selected yet
+                   combo.add(EMPTY_ELEMENT_LABEL);
+                   terms.add(emptyElement);
+               }
+               for (T term: preferredTerms){
+                       terms.add(term);
+               }
+
+               
+       }
+
        private TermComboElement(CdmFormFactory formFactory,
             ICdmFormElement parentElement, Class<T> termClass, TermType termType, TermVocabulary<?> termVocabulary, List<T> terms,String labelString, TermDto selection, boolean addEmptyElement,
             int style, boolean useAbbrevLabel, Comparator<T> comparator) {
@@ -169,15 +187,15 @@ public class TermComboElement<T extends DefinedTermBase>
 
         if(termType!=null){
             //TODO try to remove generic T and avoid classes to be used
-            populateTerms((List<T>) getTermManager().getPreferredTerms(termType));
+            addTerms((List<T>) getTermManager().getPreferredTerms(termType));
         }
         else if(termVocabulary!=null){
-            populateTerms((List<T>) getTermManager().getPreferredTerms(termVocabulary));
+            addTerms((List<T>) getTermManager().getPreferredTerms(termVocabulary));
         }
         else if(this.termClass!=null){
-            populateTerms(getPreferredTerms());
+            addTerms(getPreferredTerms());
         }else if (terms != null){
-            populateTerms(terms);
+            addTerms(terms);
         }
 
 
@@ -186,6 +204,8 @@ public class TermComboElement<T extends DefinedTermBase>
         combo.addDisposeListener(this);
         if (comparator == null){
             setTermComparator(new DefaultTermComparator<T>());
+        }else{
+               populateTerms();
         }
         PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
         if (this.terms != null && selection != null){
@@ -258,11 +278,11 @@ public class TermComboElement<T extends DefinedTermBase>
         *
         * @param preferredTerms
         */
-       protected void populateTerms(List<T> preferredTerms) {
+       protected void populateTerms() {
 
                combo.removeAll();
 
-               terms = new ArrayList<T>();
+//             terms = new ArrayList<T>();
 
                int i = 1;
                int index = 0;
@@ -270,13 +290,16 @@ public class TermComboElement<T extends DefinedTermBase>
                if(addEmptyElement){
                    // Add an empty element for when nothing was selected yet
                    combo.add(EMPTY_ELEMENT_LABEL);
-                   terms.add(emptyElement);
+//                 terms.add(emptyElement);
                }
-
+               List<T> withoutNull = new ArrayList<>(terms);
                if (termComparator != null) {
-                       Collections.sort(preferredTerms, termComparator);
+                       if (addEmptyElement){
+                               withoutNull = terms.subList(1, terms.size());
+                       }
+                       Collections.sort(withoutNull, termComparator);
                }
-               for (T term : preferredTerms) {
+               for (T term : withoutNull) {
                        String label = getLabel(term);
                        if (label == null) {
                                if (term.getTitleCache() != null) {
@@ -295,7 +318,7 @@ public class TermComboElement<T extends DefinedTermBase>
 
                        combo.add(label);
                        combo.setData(label, term);
-                       terms.add(term);
+//                     terms.add(term);
 
                        i++;
                        if (selection != null) {
@@ -306,7 +329,7 @@ public class TermComboElement<T extends DefinedTermBase>
                }
 
         if (selection != null && index == 0) {
-                       createTermNotInPreferredTerms(selection, preferredTerms);
+                       createTermNotInPreferredTerms(selection, terms);
                }
 
                combo.select(index);
@@ -374,9 +397,9 @@ public class TermComboElement<T extends DefinedTermBase>
        private void createTermNotInPreferredTerms(T term, List<T> preferredTerms) {
                //List<T> preferredTerms = getPreferredTerms();
 
-               preferredTerms.add(term);
+               terms.add(term);
 
-               populateTerms(preferredTerms);
+               populateTerms();
        }
 
        /** {@inheritDoc} */
@@ -397,7 +420,8 @@ public class TermComboElement<T extends DefinedTermBase>
                if (event != null
                                && PreferencesUtil.PREFERRED_TERMS_CHANGE.equals(event
                                                .getProperty())) {
-                       populateTerms(getPreferredTerms());
+                       addTerms(getPreferredTerms());
+                       populateTerms();
                }
                this.setSelection(selection);
        }
@@ -422,7 +446,8 @@ public class TermComboElement<T extends DefinedTermBase>
        public void setTerms(List<T> terms) {
 //             setSelection(null);
                customPreferredTerms = terms;
-               populateTerms(customPreferredTerms);
+               addTerms(customPreferredTerms);
+               populateTerms();
        }
 
        public void removeEmptyElement(){