Project

General

Profile

« Previous | Next » 

Revision 353f7dda

Added by Patrick Plitzner about 6 years ago

ref #7095 Increase performance of specimen selection dialog

  • loading with property path
  • pre-caching of taxon node label

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/matrix/SpecimenSelectionDialog.java
9 9
package eu.etaxonomy.taxeditor.editor.workingSet.matrix;
10 10

  
11 11
import java.util.ArrayList;
12
import java.util.Arrays;
12 13
import java.util.Collection;
13 14
import java.util.List;
14 15
import java.util.UUID;
......
17 18

  
18 19
import org.eclipse.jface.dialogs.Dialog;
19 20
import org.eclipse.jface.layout.GridDataFactory;
20
import org.eclipse.jface.viewers.IStructuredContentProvider;
21
import org.eclipse.jface.viewers.ArrayContentProvider;
21 22
import org.eclipse.jface.viewers.IStructuredSelection;
22 23
import org.eclipse.jface.viewers.ITableLabelProvider;
23 24
import org.eclipse.jface.viewers.LabelProvider;
......
63 64
 */
64 65
public class SpecimenSelectionDialog extends Dialog {
65 66

  
67
    private static final List<String> NODE_PROPERTY_PATH = Arrays.asList(new String[] {
68
            "taxon",
69
            "taxon.name",
70
    });
71

  
66 72
    private static String TEXT_FILTER_DEFAULT = "Enter text filter";
67 73

  
68 74
    private TableViewer list;
......
149 155
        columnSpecimen.getColumn().setMoveable(true);
150 156
        table.setHeaderVisible(true);
151 157
        table.setLinesVisible(true);
152
        list.setContentProvider(new SpecimenListContentProvider());
158
        list.setContentProvider(new ArrayContentProvider());
153 159
        list.setLabelProvider(new SpecimenListLabelProvider());
154 160

  
155 161
        //gather specimens
......
189 195
        for (UUID uuid : filteredNodes) {
190 196
            //TODO implement occurrence service for taxon nodes
191 197
            // let it return UuidAndTitleCache
192
            TaxonNode taxonNode = taxonNodeService.load(uuid);
198
            TaxonNode taxonNode = taxonNodeService.load(uuid, NODE_PROPERTY_PATH);
193 199
            Taxon taxon = taxonNode.getTaxon();
194 200
            if(taxon!=null){
195 201
                FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
......
225 231
        return selectedSpecimens;
226 232
    }
227 233

  
228
    private class SpecimenListContentProvider implements IStructuredContentProvider{
229
        @Override
230
        public Object[] getElements(Object inputElement) {
231
            return ((List<SpecimenWrapper>) inputElement).stream().filter(wrapper ->
232
                wrapper.getSpecimen().getDescriptions().stream().noneMatch(description ->
233
                matrix.getWorkingSet().getDescriptions().contains(description))).toArray();
234
        }
235
    }
236

  
237 234
    private class SpecimenListLabelProvider extends LabelProvider implements ITableLabelProvider{
238 235

  
239 236
        @Override
......
247 244
                SpecimenWrapper wrapper = (SpecimenWrapper)element;
248 245
                switch (columnIndex) {
249 246
                case 0:
250
                    return wrapper.getTaxonNode().getTaxon().getName().getTitleCache();
247
                    return wrapper.getTaxonNodeLabel();
251 248
                case 1:
252 249
                    return wrapper.getSpecimen().getTitleCache();
253 250
                default:

Also available in: Unified diff