From 901d433e14e02e4660fbf0d69636d366c9dd2359 Mon Sep 17 00:00:00 2001 From: Katja Luther Date: Thu, 5 Sep 2019 12:28:48 +0200 Subject: [PATCH] ref #8389: fix preferred TaxonFeature Tree creation --- .../FeatureAdminMenuPreference.java | 8 ++- .../taxeditor/preference/PreferencesUtil.java | 16 ++--- .../taxeditor/store/TermManager.java | 58 +++++++++++++++---- 3 files changed, 61 insertions(+), 21 deletions(-) diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/preferencePage/FeatureAdminMenuPreference.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/preferencePage/FeatureAdminMenuPreference.java index f675a6b6b..9d9df6fc0 100755 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/preferencePage/FeatureAdminMenuPreference.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/preferencePage/FeatureAdminMenuPreference.java @@ -10,6 +10,7 @@ package eu.etaxonomy.taxeditor.databaseAdmin.preferencePage; import eu.etaxonomy.cdm.model.metadata.PreferencePredicate; import eu.etaxonomy.cdm.model.term.TermType; +import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput; import eu.etaxonomy.taxeditor.preference.menu.FeatureMenuPreferences; /** @@ -32,7 +33,12 @@ public class FeatureAdminMenuPreference extends FeatureMenuPreferences { if (!isApply()){ return true; } - return performOkAdmin(); + + boolean result = performOkAdmin(); + if (result){ + TermEditorInput.getPreferredTaxonFeatureTree(true); + } + return result; } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java index de0481499..3ffac1baf 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java @@ -1697,6 +1697,9 @@ public class PreferencesUtil implements IPreferenceKeys { } public static List createUUIDListFromStringPref(String prefKey) { + if (prefKey == null){ + return null; + } String prefValue = PreferencesUtil.getStringValue(prefKey); if (prefValue == null){ return null; @@ -1847,16 +1850,9 @@ public class PreferencesUtil implements IPreferenceKeys { CdmPreference pref = cache.get(PreferencePredicate.TaxonFeatures.getKey()); List terms; boolean override = PreferencesUtil.getBooleanValue(PreferencesUtil.createOverridePreferenceString(PreferencePredicate.TaxonFeatures.getKey())); - if (pref != null && !override){ - List uuids = PreferencesUtil.createUUIDListFromStringPref(pref.getValue()); - terms = CdmStore.getTermManager().getTerms(uuids, Feature.class); - }else if (override){ - terms= CdmStore.getTermManager().getPreferredTerms(TermType.Feature); - TermVocabulary nameVocabulary = CdmStore.getService(IVocabularyService.class).load(VocabularyEnum.NameFeature.getUuid()); - Set nameFeature = nameVocabulary.getTerms(); - terms.removeAll(nameFeature); - - }else{ + List uuids = PreferencesUtil.createUUIDListFromStringPref(PreferencePredicate.TaxonFeatures.getKey()); + terms = CdmStore.getTermManager().getTerms(uuids, Feature.class); + if (terms == null || terms.isEmpty()){ terms= CdmStore.getTermManager().getPreferredTerms(TermType.Feature); TermVocabulary nameVocabulary = CdmStore.getService(IVocabularyService.class).load(VocabularyEnum.NameFeature.getUuid()); Set nameFeature = nameVocabulary.getTerms(); 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 83706704b..af2ff66b0 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 @@ -81,6 +81,19 @@ public class TermManager { return terms; } + /** + * + * @param clazz + * @return + */ + public List getPreferredTerms(TermVocabularyDto termVocabularyDto){ + List terms = cachedTermMap.get(termVocabularyDto.getUuid()); + if(terms==null){ + terms = getFilteredTermDtos(new ArrayList<>(termVocabularyDto.getTerms())); + cachedTermMap.put(termVocabularyDto.getUuid(), terms); + } + return terms; + } /** * @@ -165,6 +178,31 @@ public class TermManager { return filteredTerms; } + /** + * Generic method to get term preferences for a term vocabulary + * + * @param initialTerms a {@link java.util.List} object. + * @return a {@link java.util.List} object. + */ + public List getFilteredTermDtos(List initialTerms){ + + List filteredTerms = new ArrayList(); + + for (TermDto term : initialTerms){ + + //TODO:inverse terms!! + + if(PreferencesUtil.getBooleanValue(getPrefNameByDto(term))){ + filteredTerms.add(term); + } + } + if (filteredTerms.isEmpty()){ + return initialTerms; + } + + return filteredTerms; + } + private String getPrefName(T term) { return term.getTermType()!=null?term.getTermType().toString()+term.getUuid().toString():""+term.getUuid().toString(); } @@ -230,7 +268,7 @@ public class TermManager { public void setPreferredTermsByType(Collection preferredTerms, TermType type){ - Collection undesiredTermUuids = new ArrayList(); + List oldValues = getPreferredTerms(type); for (DefinedTermBase term: oldValues){ PreferencesUtil.setBooleanValue(getPrefName(term), false); @@ -241,6 +279,8 @@ public class TermManager { } clearTermMapForTermType(type); + List list = new ArrayList<>(preferredTerms); + cachedTermMap.put(type.getUuid(), list); @@ -254,17 +294,15 @@ public class TermManager { */ public void setPreferredTermsByDto(Collection preferredTerms, TermVocabularyDto vocDto){ - - Collection undesiredTermUuids = new ArrayList(); - + List oldValues = getPreferredTerms(vocDto); + for (TermDto term: oldValues){ + PreferencesUtil.setBooleanValue(getPrefNameByDto(term), false); + } for(TermDto term : preferredTerms){ - if(!preferredTerms.contains(term)){ - undesiredTermUuids.add(term.getUuid()); - PreferencesUtil.setBooleanValue(getPrefNameByDto(term), false); - }else{ - PreferencesUtil.setBooleanValue(getPrefNameByDto(term), true); - } + PreferencesUtil.setBooleanValue(getPrefNameByDto(term), true); + } + //if (initialTerms.iterator().hasNext()){ clearTermMapForTermVoc(vocDto.getUuid()); List list = new ArrayList<>(preferredTerms); -- 2.34.1