Merge branch 'release/5.8.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / store / TermManager.java
index 1ea29a343921b0bdebb1b564f5c6836733a34ca2..bc8a767f23b6515a88bfe1632d93a7339b9558e6 100644 (file)
@@ -42,6 +42,10 @@ public class TermManager {
 
     private Map<Object, List> cachedTermMap = new HashMap<>();
 
+    //new cache for features!!
+    //dinstinguish preferences for both
+    //load at start
+
        public TermManager(){
        }
 
@@ -52,7 +56,7 @@ public class TermManager {
         */
        public <T extends DefinedTermBase> List<T> getPreferredTerms(TermType termType){
            List terms = cachedTermMap.get(termType);
-           if(terms==null){
+           if(terms==null || terms.isEmpty()){
                terms = getFilteredTerms(TermStore.<T>getTerms(termType, null));
                cachedTermMap.put(termType, terms);
            }
@@ -139,19 +143,12 @@ public class TermManager {
     }
 
 
-       private <T extends DefinedTermBase> String getTermClass(Collection<T> initialTerms){
+       private <T extends DefinedTermBase> TermVocabulary<T> getTermVocabulary(Collection<T> initialTerms){
 
-               String result = null;
+               TermType result = null;
                if(!initialTerms.isEmpty()){
-
-                       //TODO: there should be a more generic solution!!
                T entity = initialTerms.iterator().next();
-               if (entity instanceof TaxonRelationshipTypeInverseContainer){
-                       result = ((TaxonRelationshipTypeInverseContainer) entity).getType().getClass().getName();
-               } else {
-                       result = entity.getClass().getName();
-               }
-               return result;
+               return entity.getVocabulary();
            }
            return null;
        }
@@ -164,7 +161,7 @@ public class TermManager {
         * @param <T> a T object.
         */
        public <T extends DefinedTermBase> void setPreferredTerms(Collection<T> preferredTerms, Collection<T> initialTerms){
-       String typeName = getTermClass(initialTerms);
+           TermVocabulary<T> voc = getTermVocabulary(initialTerms);
 
                Collection<UUID> undesiredTermUuids = new ArrayList<UUID>();
 
@@ -175,18 +172,22 @@ public class TermManager {
                        }else{
                            PreferencesUtil.setBooleanValue(getPrefName(term), false);
                        }
-
-
                }
-
+               //if (initialTerms.iterator().hasNext()){
+                   clearTermMapForTermVoc(voc);
+               //}
 
        }
 
 
-       public void clearTermMapForTermType(TermType termType){
-           cachedTermMap.remove(termType);
+       public <T extends DefinedTermBase> void clearTermMapForTermVoc(TermVocabulary<T> voc){
+           cachedTermMap.remove(voc);
        }
 
+       public void clearTermMapForTermType(TermType termType){
+        cachedTermMap.remove(termType);
+    }
+
        /**
      * Generic method to get term preferences for a term vocabulary
      *
@@ -197,7 +198,7 @@ public class TermManager {
 
         List<T> filteredTerms = new ArrayList<T>();
         List<T> terms = TermStore.getTerms(clazz);
-        if (uuidList.isEmpty()){
+        if (uuidList == null || uuidList.isEmpty()){
             return terms;
         }
         for (T term : terms){
@@ -208,4 +209,15 @@ 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 <T extends DefinedTermBase> List<T> getAllTerms(TermType type, Comparator comparator){
+        List<T> terms = TermStore.getTerms(type, comparator);
+        return terms;
+    }
 }