ref #7095 Add missing import
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / workingSet / matrix / SpecimenSelectionDialog.java
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.graphics.Image;
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.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
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));
72
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();
79 if(taxon!=null){
80 FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
81 config.setAssociatedTaxonUuid(uuid);
82 specimens.addAll(CdmStore.getService(IOccurrenceService.class).findByTitle(config).getRecords());
83 }
84 }
85 list.setInput(specimens);
86 return composite;
87 }
88
89 /**
90 * {@inheritDoc}
91 */
92 @Override
93 protected void okPressed() {
94 selectedSpecimens = ((IStructuredSelection)list.getSelection()).toList();
95 super.okPressed();
96 }
97
98 public Collection<SpecimenOrObservationBase> getSpecimen(){
99 return selectedSpecimens;
100 }
101
102 private class DescriptionLabelProvider extends LabelProvider{
103 /**
104 * {@inheritDoc}
105 */
106 @Override
107 public Image getImage(Object element) {
108 if(workingSet.getDescriptions().contains(element)){
109 return ImageResources.getImage(ImageResources.SYNCED);
110 }
111 return null;
112 }
113 }
114 }