Tweak performance for typeDesignation cache in label provider
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / derivateSearch / DerivateLabelProvider.java
index 888a18ed31e8f58900ca215a5c1f4acb31906c6a..d7cbfdddc97ca2d0803c05dec9505626117d4a2a 100644 (file)
@@ -61,7 +61,7 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
 
     private static Set<SingleRead> multiLinkSingleReads;
 
-    private static Map<DerivedUnit, List<SpecimenTypeDesignation>> typeDesignations;
+    private static Map<DerivedUnit, Collection<SpecimenTypeDesignation>> typeDesignations;
 
     private ConversationHolder conversation;
 
@@ -421,22 +421,8 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
         return null;
     }
 
-    /**
-     * Refreshes cached label extensions
-     * @param multiLinkSingleReads
-     */
-    public void refresh() {
-        DerivateLabelProvider.multiLinkSingleReads = new HashSet<SingleRead>();
-        for(Entry<SingleRead, Collection<Sequence>> entry:CdmStore.getService(ISequenceService.class).getSingleReadSequencesMap().entrySet()){
-            if(entry.getValue().size()>1){
-                multiLinkSingleReads.add(entry.getKey());
-            }
-        }
-        DerivateLabelProvider.typeDesignations = new HashMap<DerivedUnit, List<SpecimenTypeDesignation>>();
-    }
-
     private static void addTypeDesignation(DerivedUnit derivedUnit, SpecimenTypeDesignation typeDesignation){
-        List<SpecimenTypeDesignation> list = typeDesignations.get(derivedUnit);
+        Collection<SpecimenTypeDesignation> list = typeDesignations.get(derivedUnit);
         if(list==null){
             list = new ArrayList<SpecimenTypeDesignation>();
         }
@@ -448,4 +434,21 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
         return multiLinkSingleReads;
     }
 
+    public void initCache(List<SpecimenOrObservationBase> derivates) {
+        DerivateLabelProvider.multiLinkSingleReads = new HashSet<SingleRead>();
+        DerivateLabelProvider.typeDesignations = new HashMap<DerivedUnit, Collection<SpecimenTypeDesignation>>();
+        for(Entry<SingleRead, Collection<Sequence>> entry:CdmStore.getService(ISequenceService.class).getSingleReadSequencesMap().entrySet()){
+            if(entry.getValue().size()>1){
+                multiLinkSingleReads.add(entry.getKey());
+            }
+        }
+        Collection<DerivedUnit> derivedUnits = new ArrayList<DerivedUnit>();
+        for (SpecimenOrObservationBase specimenOrObservationBase : derivates) {
+            if(specimenOrObservationBase.isInstanceOf(DerivedUnit.class)){
+                derivedUnits.add(HibernateProxyHelper.deproxy(specimenOrObservationBase, DerivedUnit.class));
+            }
+        }
+        typeDesignations = CdmStore.getService(IOccurrenceService.class).listTypeDesignations(derivedUnits, null, null, null, null);
+    }
+
 }