Project

General

Profile

Download (4.54 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

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

    
27
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
28
import eu.etaxonomy.cdm.api.service.ITaxonService;
29
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
30
import eu.etaxonomy.cdm.model.description.WorkingSet;
31
import eu.etaxonomy.cdm.model.name.Rank;
32
import eu.etaxonomy.cdm.model.name.TaxonName;
33
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
34
import eu.etaxonomy.cdm.model.taxon.Taxon;
35
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
36
import eu.etaxonomy.taxeditor.model.ImageResources;
37
import eu.etaxonomy.taxeditor.store.CdmStore;
38

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

    
46
    private TableViewer list;
47

    
48
    private WorkingSet workingSet;
49

    
50
    Collection<SpecimenOrObservationBase> selectedSpecimens = new ArrayList<>();
51

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

    
57
    @Override
58
    protected Control createDialogArea(Composite parent) {
59
        Composite composite = (Composite) super.createDialogArea(parent);
60
        list = new TableViewer(composite);
61
        list.setContentProvider(new ArrayContentProvider());
62
        list.setLabelProvider(new DescriptionLabelProvider());
63

    
64
        //gather descriptions
65
        Set<TaxonNode> taxonNodes = workingSet.getTaxonSubtreeFilter();
66
        Set<SpecimenOrObservationBase> specimens = new HashSet<>();
67
        for (TaxonNode node : taxonNodes) {
68
            specimens.addAll(addSpecimensRecursively(node));
69
        }
70
        list.setInput(specimens);
71
        return composite;
72
    }
73

    
74
    private Collection<SpecimenOrObservationBase> addSpecimensRecursively(TaxonNode node){
75
        Collection<SpecimenOrObservationBase> specimens = new HashSet<>();
76
        if(node.getTaxon()!=null){
77
            Taxon taxon = HibernateProxyHelper.deproxy(node.getTaxon(), Taxon.class);
78
            TaxonName name = taxon.getName();
79
            //filter by Rank
80
            if(name!=null &&
81
                    (name.getRank().equals(workingSet.getMinRank())
82
                    || name.getRank().isHigher(workingSet.getMinRank())
83
                    || name.getRank().equals(workingSet.getMaxRank())
84
                    || name.getRank().isLower(workingSet.getMaxRank()))){
85
                IOccurrenceService service = CdmStore.getService(IOccurrenceService.class);
86
                //TODO extend FindOccurrencesConfigurator to support area and rank filter
87
                //            FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
88
                //            config.setAssociatedTaxonNameUuid(taxon.getUuid());
89
                //            service.findByTitle(config);
90

    
91
                specimens = service.listByAssociatedTaxon(SpecimenOrObservationBase.class, null, taxon, null, null, null, null, null);
92
            }
93
        }
94
        List<TaxonNode> childNodes = node.getChildNodes();
95
        for (TaxonNode childNode : childNodes) {
96
            specimens.addAll(addSpecimensRecursively(childNode));
97
        }
98
        return specimens;
99
    }
100

    
101
    /**
102
     * {@inheritDoc}
103
     */
104
    @Override
105
    protected void okPressed() {
106
        selectedSpecimens = ((IStructuredSelection)list.getSelection()).toList();
107
        super.okPressed();
108
    }
109

    
110
    public Collection<SpecimenOrObservationBase> getSpecimen(){
111
        return selectedSpecimens;
112
    }
113

    
114
    private class DescriptionLabelProvider extends LabelProvider{
115
        /**
116
         * {@inheritDoc}
117
         */
118
        @Override
119
        public Image getImage(Object element) {
120
            if(workingSet.getDescriptions().contains(element)){
121
                return ImageResources.getImage(ImageResources.SYNCED);
122
            }
123
            return null;
124
        }
125
    }
126
}
(7-7/7)