Merge branch 'develop' into wset
[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
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 }