Project

General

Profile

Download (4.16 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2018 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.editor.workingSet.matrix;
10

    
11
import java.util.ArrayList;
12
import java.util.Collection;
13
import java.util.HashSet;
14
import java.util.List;
15
import java.util.Set;
16
import java.util.UUID;
17

    
18
import org.eclipse.jface.dialogs.Dialog;
19
import org.eclipse.jface.viewers.ArrayContentProvider;
20
import org.eclipse.jface.viewers.IStructuredSelection;
21
import org.eclipse.jface.viewers.LabelProvider;
22
import org.eclipse.jface.viewers.TableViewer;
23
import org.eclipse.swt.layout.FillLayout;
24
import org.eclipse.swt.widgets.Composite;
25
import org.eclipse.swt.widgets.Control;
26
import org.eclipse.swt.widgets.Shell;
27

    
28
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
29
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
30
import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator;
31
import eu.etaxonomy.cdm.filter.TaxonNodeFilter;
32
import eu.etaxonomy.cdm.model.description.WorkingSet;
33
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
34
import eu.etaxonomy.cdm.model.taxon.Taxon;
35
import eu.etaxonomy.taxeditor.store.CdmStore;
36

    
37
/**
38
 * @author pplitzner
39
 * @since Jan 3, 2018
40
 *
41
 */
42
public class SpecimenSelectionDialog extends Dialog {
43

    
44
    private TableViewer list;
45

    
46
    private WorkingSet workingSet;
47

    
48
    Collection<SpecimenOrObservationBase> selectedSpecimens = new ArrayList<>();
49

    
50
    protected SpecimenSelectionDialog(Shell parentShell, WorkingSet workingSet) {
51
        super(parentShell);
52
        this.workingSet = workingSet;
53
    }
54

    
55
    @Override
56
    protected Control createDialogArea(Composite parent) {
57
        Composite composite = (Composite) super.createDialogArea(parent);
58
        composite.setLayout(new FillLayout());
59
        list = new TableViewer(composite);
60
        list.setContentProvider(new DescriptionContentProvider());
61
        list.setLabelProvider(new LabelProvider());
62

    
63
        //gather descriptions
64
        Set<SpecimenOrObservationBase> specimens = new HashSet<>();
65

    
66
        //set filter parameters
67
        TaxonNodeFilter filter = TaxonNodeFilter.NewRankInstance(workingSet.getMinRank(), workingSet.getMaxRank());
68
        workingSet.getGeoFilter().forEach(area -> filter.orArea(area.getUuid()));
69
        workingSet.getTaxonSubtreeFilter().forEach(node -> filter.orSubtree(node));
70

    
71
        ITaxonNodeService taxonNodeService = CdmStore.getService(ITaxonNodeService.class);
72
        List<UUID> filteredNodes = taxonNodeService.uuidList(filter);
73
        for (UUID uuid : filteredNodes) {
74
            //TODO implement occurrence service for taxon nodes
75
            // let it return UuidAndTitleCache
76
            Taxon taxon = taxonNodeService.load(uuid).getTaxon();
77
            if(taxon!=null){
78
                FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
79
                config.setAssociatedTaxonUuid(taxon.getUuid());
80
                specimens.addAll(CdmStore.getService(IOccurrenceService.class).findByTitle(config).getRecords());
81
            }
82
        }
83
        list.setInput(specimens);
84
        return composite;
85
    }
86

    
87
    @Override
88
    protected void configureShell(Shell newShell) {
89
        super.configureShell(newShell);
90
        newShell.setText("Select specimens");
91
        newShell.setMinimumSize(500, 400);
92
    }
93

    
94
    /**
95
     * {@inheritDoc}
96
     */
97
    @Override
98
    protected void okPressed() {
99
        selectedSpecimens = ((IStructuredSelection)list.getSelection()).toList();
100
        super.okPressed();
101
    }
102

    
103
    public Collection<SpecimenOrObservationBase> getSpecimen(){
104
        return selectedSpecimens;
105
    }
106

    
107
    private class DescriptionContentProvider extends ArrayContentProvider{
108

    
109
        /**
110
         * {@inheritDoc}
111
         */
112
        @Override
113
        public Object[] getElements(Object inputElement) {
114
            return ((Collection<SpecimenOrObservationBase>) inputElement).stream().filter(specimen ->
115
                specimen.getDescriptions().stream().noneMatch(description ->
116
                workingSet.getDescriptions().contains(description))).toArray();
117
        }
118
    }
119
}
(8-8/8)