fix default feature tree for facts and name facts
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / store / TermManager.java
index 04dd2513e80e39e156e9212eea4aa4dfd7b32ab4..1ea29a343921b0bdebb1b564f5c6836733a34ca2 100644 (file)
@@ -11,13 +11,17 @@ package eu.etaxonomy.taxeditor.store;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.common.TermBase;
-import eu.etaxonomy.cdm.model.common.TermType;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+import eu.etaxonomy.cdm.model.term.TermBase;
+import eu.etaxonomy.cdm.model.term.TermType;
+import eu.etaxonomy.cdm.model.term.TermVocabulary;
+import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
 import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 
@@ -35,6 +39,9 @@ public class TermManager {
        private static final String CLASS = "class";
        private static final String UUID_STRING = "uuid";
 
+
+    private Map<Object, List> cachedTermMap = new HashMap<>();
+
        public TermManager(){
        }
 
@@ -44,7 +51,12 @@ public class TermManager {
         * @return
         */
        public <T extends DefinedTermBase> List<T> getPreferredTerms(TermType termType){
-           return getFilteredTerms(TermStore.<T>getTerms(termType, null));
+           List terms = cachedTermMap.get(termType);
+           if(terms==null){
+               terms = getFilteredTerms(TermStore.<T>getTerms(termType, null));
+               cachedTermMap.put(termType, terms);
+           }
+        return terms;
        }
 
        /**
@@ -53,16 +65,45 @@ public class TermManager {
         * @return
         */
        public <T extends DefinedTermBase> List<T> getPreferredTerms(TermVocabulary<T> termVocabulary){
-           return getFilteredTerms(new ArrayList<T>(TermStore.getTerms(termVocabulary, null)));
+           List terms = cachedTermMap.get(termVocabulary);
+           if(terms==null){
+               terms = getFilteredTerms(new ArrayList<T>(TermStore.getTerms(termVocabulary,null)));
+               cachedTermMap.put(termVocabulary, terms);
+           }
+           return terms;
        }
 
+
+       /**
+    *
+    * @param clazz
+    * @return
+    */
+   public <T extends DefinedTermBase> List<T> getPreferredTerms(TermVocabulary<T> termVocabulary, Comparator comp){
+       if (comp == null){
+           comp = new DefaultTermComparator<T>();
+       }
+       List terms = cachedTermMap.get(termVocabulary);
+       if(terms==null){
+           terms = getFilteredTerms(new ArrayList<T>(TermStore.getTerms(termVocabulary,comp)));
+           cachedTermMap.put(termVocabulary, terms);
+       }
+       terms.sort(comp);
+       return terms;
+   }
        /**
         *
         * @param clazz
         * @return
         */
        public <T extends DefinedTermBase> List<T> getPreferredTerms(Class<T> clazz){
-               return getFilteredTerms(TermStore.getTerms(clazz));
+           List terms = cachedTermMap.get(clazz);
+           if(terms==null){
+               terms = getFilteredTerms(TermStore.getTerms(clazz));
+               cachedTermMap.put(clazz, terms);
+
+           }
+           return terms;
        }
 
        /**
@@ -78,14 +119,14 @@ public class TermManager {
                for (T term : initialTerms){
 
                        if (term instanceof TaxonRelationshipTypeInverseContainer){
-                               if(!PreferencesUtil.getPreferenceStore().getBoolean(getPrefName(term))){
+                               if(!PreferencesUtil.getBooleanValue(getPrefName(term))){
                                        T type = (T)((TaxonRelationshipTypeInverseContainer) term).getType();
                                        filteredTerms.add(type);
 
                                }
                        }
 
-                       if(!PreferencesUtil.getPreferenceStore().getBoolean(getPrefName(term))){
+                       if(!PreferencesUtil.getBooleanValue(getPrefName(term))){
                                filteredTerms.add(term);
                        }
                }
@@ -130,12 +171,41 @@ public class TermManager {
                for(TermBase term : initialTerms){
                        if(! preferredTerms.contains(term)){
                                undesiredTermUuids.add(term.getUuid());
-                               PreferencesUtil.getPreferenceStore().setValue(getPrefName(term), true);
+                               PreferencesUtil.setBooleanValue(getPrefName(term), true);
                        }else{
-                           PreferencesUtil.getPreferenceStore().setValue(getPrefName(term), false);
+                           PreferencesUtil.setBooleanValue(getPrefName(term), false);
                        }
 
 
                }
+
+
+       }
+
+
+       public void clearTermMapForTermType(TermType termType){
+           cachedTermMap.remove(termType);
        }
+
+       /**
+     * 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 <T extends DefinedTermBase> List<T> getTerms(List<UUID> uuidList, Class clazz){
+
+        List<T> filteredTerms = new ArrayList<T>();
+        List<T> terms = TermStore.getTerms(clazz);
+        if (uuidList.isEmpty()){
+            return terms;
+        }
+        for (T term : terms){
+            if(uuidList.contains(term.getUuid())){
+                filteredTerms.add(term);
+            }
+        }
+
+        return filteredTerms;
+    }
 }