ref #5821: fix term handling after adapting local preferences
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / store / TermManager.java
index 523a59bb38b9585305bea9ea716f04c1b6e0355e..6cb341ad5e0141beffdb1b353b116c65c629e0ba 100644 (file)
 package eu.etaxonomy.taxeditor.store;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 
+import org.apache.commons.lang3.StringUtils;
+
+import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
 import eu.etaxonomy.cdm.model.term.TermBase;
 import eu.etaxonomy.cdm.model.term.TermType;
@@ -158,7 +164,7 @@ public class TermManager {
                                        filteredTerms.add(type);
                                }
                        }
-
+                       
                        if(PreferencesUtil.getBooleanValue(getPrefName(term), true)){
                                filteredTerms.add(term);
                        }
@@ -170,7 +176,7 @@ public class TermManager {
                        preferredTerms = cachedTermMap.get(initialTerms.get(0).getVocabulary().getUuid());
                    }
                    if (preferredTerms == null){
-                       preferredTerms = cachedTermMap.get(initialTerms.get(0).getTermType());
+                       preferredTerms = cachedTermMap.get(initialTerms.get(0).getTermType().getUuid());
                    }
                    if (preferredTerms == null){
                        return initialTerms;
@@ -187,7 +193,43 @@ public class TermManager {
 
                return filteredTerms;
        }
+       
+       public <T extends DefinedTermBase>List<T> createTermListFromString(String stringValue, TermType type){
+               String[] listChecked = stringValue.split(";"); //$NON-NLS-1$
+        String[] listCheckedComma = stringValue.split(","); //$NON-NLS-1$
+        List<String> checked = new ArrayList<>();
+        if (listChecked != null ){
+            checked = Arrays.asList(listChecked);
+        }
+        if (listCheckedComma != null && stringValue.contains(",")){ //$NON-NLS-1$
+            checked = Arrays.asList(listCheckedComma);
+        }
+        List<T> termsFromStringValues = getTermsFromStringValues(checked, type);
+        return termsFromStringValues;
+       }
 
+        protected <T extends DefinedTermBase>List<T> getTermsFromStringValues(List<String> listValue, TermType type) {
+               Collection<DefinedTermBase> termlist = new ArrayList<>();
+               ITermService termService = CdmStore.getService(ITermService.class);
+               Set<UUID> uuidList = new HashSet();
+               for (String s : listValue) {
+                   if (!StringUtils.isBlank(s)){
+                       UUID uuid = UUID.fromString(s);
+                       uuidList.add(uuid);
+                   }
+               }
+               if (!uuidList.isEmpty()){
+                   termlist = termService.find(uuidList);
+               }
+
+               if (listValue == null || listValue.isEmpty() ){
+                   termlist = termService.listByTermType(type, null, null, null, null);
+
+               }
+
+               return new ArrayList(termlist);
+           }
+       
        /**
      * Generic method to get term preferences for a term vocabulary
      *
@@ -274,7 +316,7 @@ public class TermManager {
 
         clearTermMapForTermType(type);
         List<TermDto> list = new ArrayList<>(preferredTerms);
-        cachedTermMap.put(type, list);
+        cachedTermMap.put(type.getUuid(), list);
     }
 
     /**
@@ -317,7 +359,7 @@ public class TermManager {
        }
 
        public void clearTermMapForTermType(TermType termType){
-        cachedTermMap.remove(termType);
+        cachedTermMap.remove(termType.getUuid());
     }
 
        /**