From aae4cb3d576b81e37a36876643603b60e5109eca Mon Sep 17 00:00:00 2001 From: Katja Luther Date: Thu, 28 Oct 2021 10:41:46 +0200 Subject: [PATCH] fix term caching for term type and avoid doubled call of populate terms --- .../taxeditor/store/TermManager.java | 2 +- .../MisappliedRelationshipComboElement.java | 3 +- .../ui/combo/term/TermComboElement.java | 69 +++++++++++++------ 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java index 81e0149cf..2b0c0d863 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java @@ -48,7 +48,7 @@ public class TermManager { } public List getPreferredTerms(TermType termType){ - List terms = cachedTermMap.get(termType); + List terms = cachedTermMap.get(termType.getUuid()); List termBaseList = new ArrayList<>(); if(terms==null || terms.isEmpty()){ termBaseList = getFilteredTerms(TermStore.getTerms(termType, null)); diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/MisappliedRelationshipComboElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/MisappliedRelationshipComboElement.java index 6acad5a9c..e7007417d 100755 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/MisappliedRelationshipComboElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/MisappliedRelationshipComboElement.java @@ -47,7 +47,8 @@ public class MisappliedRelationshipComboElement extends TermComboElement public void setTermComparator(Comparator termComparator) { this.termComparator = termComparator; - List termsWithoutNull = terms.subList(1, terms.size()); +// List termsWithoutNull = terms.subList(1, terms.size()); - populateTerms(termsWithoutNull); + populateTerms(); } @@ -126,15 +126,16 @@ public class TermComboElement if(termType!=null){ //TODO try to remove generic T and avoid classes to be used - populateTerms((List) getTermManager().getPreferredTerms(termType)); + addTerms((List) getTermManager().getPreferredTerms(termType)); + } else if(termVocabulary!=null){ - populateTerms((List) getTermManager().getPreferredTerms(termVocabulary)); + addTerms((List) 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 combo.addDisposeListener(this); if (comparator == null){ setTermComparator(new DefaultTermComparator()); + }else{ + populateTerms(); } + PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this); if (selection != null) { @@ -151,6 +155,20 @@ public class TermComboElement } } + protected void addTerms(List preferredTerms) { + terms = new ArrayList(); + 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 termClass, TermType termType, TermVocabulary termVocabulary, List terms,String labelString, TermDto selection, boolean addEmptyElement, int style, boolean useAbbrevLabel, Comparator comparator) { @@ -169,15 +187,15 @@ public class TermComboElement if(termType!=null){ //TODO try to remove generic T and avoid classes to be used - populateTerms((List) getTermManager().getPreferredTerms(termType)); + addTerms((List) getTermManager().getPreferredTerms(termType)); } else if(termVocabulary!=null){ - populateTerms((List) getTermManager().getPreferredTerms(termVocabulary)); + addTerms((List) 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 combo.addDisposeListener(this); if (comparator == null){ setTermComparator(new DefaultTermComparator()); + }else{ + populateTerms(); } PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this); if (this.terms != null && selection != null){ @@ -258,11 +278,11 @@ public class TermComboElement * * @param preferredTerms */ - protected void populateTerms(List preferredTerms) { + protected void populateTerms() { combo.removeAll(); - terms = new ArrayList(); +// terms = new ArrayList(); int i = 1; int index = 0; @@ -270,13 +290,16 @@ public class TermComboElement if(addEmptyElement){ // Add an empty element for when nothing was selected yet combo.add(EMPTY_ELEMENT_LABEL); - terms.add(emptyElement); +// terms.add(emptyElement); } - + List 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 combo.add(label); combo.setData(label, term); - terms.add(term); +// terms.add(term); i++; if (selection != null) { @@ -306,7 +329,7 @@ public class TermComboElement } if (selection != null && index == 0) { - createTermNotInPreferredTerms(selection, preferredTerms); + createTermNotInPreferredTerms(selection, terms); } combo.select(index); @@ -374,9 +397,9 @@ public class TermComboElement private void createTermNotInPreferredTerms(T term, List preferredTerms) { //List preferredTerms = getPreferredTerms(); - preferredTerms.add(term); + terms.add(term); - populateTerms(preferredTerms); + populateTerms(); } /** {@inheritDoc} */ @@ -397,7 +420,8 @@ public class TermComboElement 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 public void setTerms(List terms) { // setSelection(null); customPreferredTerms = terms; - populateTerms(customPreferredTerms); + addTerms(customPreferredTerms); + populateTerms(); } public void removeEmptyElement(){ -- 2.34.1