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
;
16 import java
.util
.UUID
;
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
.graphics
.Image
;
24 import org
.eclipse
.swt
.widgets
.Composite
;
25 import org
.eclipse
.swt
.widgets
.Control
;
26 import org
.eclipse
.swt
.widgets
.Shell
;
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
.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
<>();
68 //set filter parameters
69 TaxonNodeFilter filter
= TaxonNodeFilter
.NewRankInstance(workingSet
.getMinRank(), workingSet
.getMaxRank());
70 workingSet
.getGeoFilter().forEach(area
-> filter
.orArea(area
.getUuid()));
71 workingSet
.getTaxonSubtreeFilter().forEach(node
-> filter
.orSubtree(node
));
73 ITaxonNodeService taxonNodeService
= CdmStore
.getService(ITaxonNodeService
.class);
74 List
<UUID
> filteredNodes
= taxonNodeService
.uuidList(filter
);
75 for (UUID uuid
: filteredNodes
) {
76 //TODO implement occurrence service for taxon nodes
77 // let it return UuidAndTitleCache
78 Taxon taxon
= taxonNodeService
.load(uuid
).getTaxon();
80 FindOccurrencesConfigurator config
= new FindOccurrencesConfigurator();
81 config
.setAssociatedTaxonUuid(uuid
);
82 specimens
.addAll(CdmStore
.getService(IOccurrenceService
.class).findByTitle(config
).getRecords());
85 list
.setInput(specimens
);
93 protected void okPressed() {
94 selectedSpecimens
= ((IStructuredSelection
)list
.getSelection()).toList();
98 public Collection
<SpecimenOrObservationBase
> getSpecimen(){
99 return selectedSpecimens
;
102 private class DescriptionLabelProvider
extends LabelProvider
{
107 public Image
getImage(Object element
) {
108 if(workingSet
.getDescriptions().contains(element
)){
109 return ImageResources
.getImage(ImageResources
.SYNCED
);