ref #8389: fix preferred TaxonFeature Tree creation
authorKatja Luther <k.luther@bgbm.org>
Thu, 5 Sep 2019 10:28:48 +0000 (12:28 +0200)
committerKatja Luther <k.luther@bgbm.org>
Thu, 5 Sep 2019 10:29:41 +0000 (12:29 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/preferencePage/FeatureAdminMenuPreference.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java

index f675a6b6b75fbdd9518196daf861b7cb73c6fe4a..9d9df6fc0a0f88aa136ffb441cbe1e0a2c6a0be2 100755 (executable)
@@ -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;
     }
 
 
index de048149946956ebeb8baa49766b9289089076cb..3ffac1baf4e32561474501dc28c3c85c6d4a63af 100644 (file)
@@ -1697,6 +1697,9 @@ public class PreferencesUtil implements IPreferenceKeys {
     }
 
     public static List<UUID> 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<Feature> terms;
         boolean override = PreferencesUtil.getBooleanValue(PreferencesUtil.createOverridePreferenceString(PreferencePredicate.TaxonFeatures.getKey()));
-        if (pref != null && !override){
-            List<UUID> 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<Feature> nameFeature = nameVocabulary.getTerms();
-            terms.removeAll(nameFeature);
-
-        }else{
+        List<UUID> 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<Feature> nameFeature = nameVocabulary.getTerms();
index 83706704b98f4d47d3153bba227d7a0922e53eef..af2ff66b02884e435873b4fa90568df75ea614a4 100644 (file)
@@ -81,6 +81,19 @@ public class TermManager {
            return terms;
        }
 
+       /**
+    *
+    * @param clazz
+    * @return
+    */
+   public List<TermDto> 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<TermDto> getFilteredTermDtos(List<TermDto> initialTerms){
+
+        List<TermDto> 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 <T extends TermBase> 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 <T extends DefinedTermBase> void setPreferredTermsByType(Collection<T> preferredTerms, TermType type){
 
 
-        Collection<UUID> undesiredTermUuids = new ArrayList<UUID>();
+
         List<DefinedTermBase> oldValues = getPreferredTerms(type);
         for (DefinedTermBase term: oldValues){
             PreferencesUtil.setBooleanValue(getPrefName(term), false);
@@ -241,6 +279,8 @@ public class TermManager {
         }
 
         clearTermMapForTermType(type);
+        List<DefinedTermBase> list = new ArrayList<>(preferredTerms);
+        cachedTermMap.put(type.getUuid(), list);
 
 
 
@@ -254,17 +294,15 @@ public class TermManager {
      */
     public void setPreferredTermsByDto(Collection<TermDto> preferredTerms, TermVocabularyDto vocDto){
 
-
-        Collection<UUID> undesiredTermUuids = new ArrayList<UUID>();
-
+        List<TermDto> 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<TermDto> list = new ArrayList<>(preferredTerms);