ref #7095 Increase performance of specimen selection dialog
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / workingSet / matrix / SpecimenSelectionDialog.java
index 4925d862a640bcee7647cd971adf39f10470a24c..a06ace960aa7887636270809b1b95689b3ee99dd 100644 (file)
@@ -9,6 +9,7 @@
 package eu.etaxonomy.taxeditor.editor.workingSet.matrix;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.UUID;
@@ -17,7 +18,7 @@ import java.util.stream.Stream;
 
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
@@ -63,6 +64,11 @@ import eu.etaxonomy.taxeditor.ui.combo.taxon.TaxonNodeCombo;
  */
 public class SpecimenSelectionDialog extends Dialog {
 
+    private static final List<String> NODE_PROPERTY_PATH = Arrays.asList(new String[] {
+            "taxon",
+            "taxon.name",
+    });
+
     private static String TEXT_FILTER_DEFAULT = "Enter text filter";
 
     private TableViewer list;
@@ -149,7 +155,7 @@ public class SpecimenSelectionDialog extends Dialog {
         columnSpecimen.getColumn().setMoveable(true);
         table.setHeaderVisible(true);
         table.setLinesVisible(true);
-        list.setContentProvider(new SpecimenListContentProvider());
+        list.setContentProvider(new ArrayContentProvider());
         list.setLabelProvider(new SpecimenListLabelProvider());
 
         //gather specimens
@@ -189,7 +195,7 @@ public class SpecimenSelectionDialog extends Dialog {
         for (UUID uuid : filteredNodes) {
             //TODO implement occurrence service for taxon nodes
             // let it return UuidAndTitleCache
-            TaxonNode taxonNode = taxonNodeService.load(uuid);
+            TaxonNode taxonNode = taxonNodeService.load(uuid, NODE_PROPERTY_PATH);
             Taxon taxon = taxonNode.getTaxon();
             if(taxon!=null){
                 FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
@@ -225,15 +231,6 @@ public class SpecimenSelectionDialog extends Dialog {
         return selectedSpecimens;
     }
 
-    private class SpecimenListContentProvider implements IStructuredContentProvider{
-        @Override
-        public Object[] getElements(Object inputElement) {
-            return ((List<SpecimenWrapper>) inputElement).stream().filter(wrapper ->
-                wrapper.getSpecimen().getDescriptions().stream().noneMatch(description ->
-                matrix.getWorkingSet().getDescriptions().contains(description))).toArray();
-        }
-    }
-
     private class SpecimenListLabelProvider extends LabelProvider implements ITableLabelProvider{
 
         @Override
@@ -247,7 +244,7 @@ public class SpecimenSelectionDialog extends Dialog {
                 SpecimenWrapper wrapper = (SpecimenWrapper)element;
                 switch (columnIndex) {
                 case 0:
-                    return wrapper.getTaxonNode().getTaxon().getName().getTitleCache();
+                    return wrapper.getTaxonNodeLabel();
                 case 1:
                     return wrapper.getSpecimen().getTitleCache();
                 default: