2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.editor
.workingSet
.matrix
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Collection
;
13 import java
.util
.HashSet
;
14 import java
.util
.List
;
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
;
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
;
44 public class SpecimenSelectionDialog
extends Dialog
{
46 private TableViewer list
;
48 private WorkingSet workingSet
;
50 Collection
<SpecimenOrObservationBase
> selectedSpecimens
= new ArrayList
<>();
52 protected SpecimenSelectionDialog(Shell parentShell
, WorkingSet workingSet
) {
54 this.workingSet
= workingSet
;
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());
65 Set
<TaxonNode
> taxonNodes
= workingSet
.getTaxonSubtreeFilter();
66 Set
<SpecimenOrObservationBase
> specimens
= new HashSet
<>();
67 for (TaxonNode node
: taxonNodes
) {
68 specimens
.addAll(addSpecimensRecursively(node
));
70 list
.setInput(specimens
);
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();
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);
91 specimens
= service
.listByAssociatedTaxon(SpecimenOrObservationBase
.class, null, taxon
, null, null, null, null, null);
94 List
<TaxonNode
> childNodes
= node
.getChildNodes();
95 for (TaxonNode childNode
: childNodes
) {
96 specimens
.addAll(addSpecimensRecursively(childNode
));
105 protected void okPressed() {
106 selectedSpecimens
= ((IStructuredSelection
)list
.getSelection()).toList();
110 public Collection
<SpecimenOrObservationBase
> getSpecimen(){
111 return selectedSpecimens
;
114 private class DescriptionLabelProvider
extends LabelProvider
{
119 public Image
getImage(Object element
) {
120 if(workingSet
.getDescriptions().contains(element
)){
121 return ImageResources
.getImage(ImageResources
.SYNCED
);