Revision f5f64287
Added by Patrick Plitzner about 6 years ago
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/matrix/SpecimenSelectionDialog.java | ||
---|---|---|
12 | 12 |
import java.util.Arrays; |
13 | 13 |
import java.util.Collection; |
14 | 14 |
import java.util.List; |
15 |
import java.util.UUID; |
|
16 | 15 |
import java.util.stream.Collectors; |
17 | 16 |
import java.util.stream.Stream; |
18 | 17 |
|
... | ... | |
40 | 39 |
import org.eclipse.swt.widgets.Table; |
41 | 40 |
import org.eclipse.swt.widgets.Text; |
42 | 41 |
|
43 |
import eu.etaxonomy.cdm.api.service.IOccurrenceService; |
|
44 |
import eu.etaxonomy.cdm.api.service.ITaxonNodeService; |
|
45 |
import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator; |
|
42 |
import eu.etaxonomy.cdm.api.service.IWorkingSetService; |
|
43 |
import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO; |
|
46 | 44 |
import eu.etaxonomy.cdm.common.CdmUtils; |
47 |
import eu.etaxonomy.cdm.filter.TaxonNodeFilter; |
|
48 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; |
|
49 |
import eu.etaxonomy.cdm.model.taxon.Taxon; |
|
50 |
import eu.etaxonomy.cdm.model.taxon.TaxonNode; |
|
51 | 45 |
import eu.etaxonomy.taxeditor.editor.l10n.Messages; |
52 | 46 |
import eu.etaxonomy.taxeditor.model.AbstractUtility; |
53 | 47 |
import eu.etaxonomy.taxeditor.model.ImageResources; |
... | ... | |
73 | 67 |
|
74 | 68 |
private TableViewer list; |
75 | 69 |
|
76 |
private Collection<SpecimenOrObservationBase> selectedSpecimens = new ArrayList<>();
|
|
70 |
private Collection<RowWrapperDTO> selectedSpecimens = new ArrayList<>();
|
|
77 | 71 |
private CharacterMatrix matrix; |
78 | 72 |
private Text txtTextFilter; |
79 | 73 |
|
... | ... | |
167 | 161 |
} |
168 | 162 |
|
169 | 163 |
private void applyFilter(){ |
170 |
Stream<SpecimenWrapper> filteredWrappers =matrix.getSpecimenCache().stream();
|
|
164 |
Stream<RowWrapperDTO> filteredWrappers =matrix.getSpecimenCache().stream();
|
|
171 | 165 |
if(comboTaxon.getSelection()!=null){ |
172 | 166 |
filteredWrappers = |
173 | 167 |
filteredWrappers |
... | ... | |
177 | 171 |
&&!CdmUtils.isBlank(txtTextFilter.getText())){ |
178 | 172 |
filteredWrappers = |
179 | 173 |
filteredWrappers |
180 |
.filter(wrapper->wrapper.getLabel().toLowerCase().contains(txtTextFilter.getText().toLowerCase()));
|
|
174 |
.filter(wrapper->wrapper.getSpecimen().getTitleCache().toLowerCase().contains(txtTextFilter.getText().toLowerCase()));
|
|
181 | 175 |
} |
182 | 176 |
list.setInput(filteredWrappers.collect(Collectors.toList())); |
183 | 177 |
} |
184 | 178 |
|
185 | 179 |
private void loadSpecimens(){ |
186 |
List<SpecimenWrapper> specimenCache = new ArrayList<>(); |
|
187 |
//set filter parameters |
|
188 |
TaxonNodeFilter filter = TaxonNodeFilter.NewRankInstance(matrix.getWorkingSet().getMinRank(), matrix.getWorkingSet().getMaxRank()); |
|
189 |
matrix.getWorkingSet().getGeoFilter().forEach(area -> filter.orArea(area.getUuid())); |
|
190 |
matrix.getWorkingSet().getTaxonSubtreeFilter().forEach(node -> filter.orSubtree(node)); |
|
191 |
filter.setIncludeUnpublished(true); |
|
192 |
|
|
193 |
ITaxonNodeService taxonNodeService = CdmStore.getService(ITaxonNodeService.class); |
|
194 |
List<UUID> filteredNodes = taxonNodeService.uuidList(filter); |
|
195 |
for (UUID uuid : filteredNodes) { |
|
196 |
//TODO implement occurrence service for taxon nodes |
|
197 |
// let it return UuidAndTitleCache |
|
198 |
TaxonNode taxonNode = taxonNodeService.load(uuid, NODE_PROPERTY_PATH); |
|
199 |
Taxon taxon = taxonNode.getTaxon(); |
|
200 |
if(taxon!=null){ |
|
201 |
FindOccurrencesConfigurator config = new FindOccurrencesConfigurator(); |
|
202 |
config.setAssociatedTaxonUuid(taxon.getUuid()); |
|
203 |
List<SpecimenOrObservationBase> specimensForTaxon = CdmStore.getService(IOccurrenceService.class).findByTitle(config).getRecords(); |
|
204 |
specimensForTaxon.forEach(specimen->specimenCache.add(new SpecimenWrapper(specimen, taxonNode, specimen.getTitleCache()))); |
|
205 |
} |
|
206 |
} |
|
180 |
Collection<RowWrapperDTO> specimenCache = CdmStore.getService(IWorkingSetService.class).loadSpecimens(matrix.getWorkingSet()); |
|
207 | 181 |
matrix.setSpecimenCache(specimenCache); |
208 | 182 |
} |
209 | 183 |
|
... | ... | |
217 | 191 |
@Override |
218 | 192 |
protected void okPressed() { |
219 | 193 |
selectedSpecimens.clear(); |
220 |
List<SpecimenWrapper> wrappers = ((IStructuredSelection)list.getSelection()).toList(); |
|
221 |
wrappers.forEach(element->selectedSpecimens.add(element.getSpecimen())); |
|
194 |
selectedSpecimens = ((IStructuredSelection)list.getSelection()).toList(); |
|
222 | 195 |
super.okPressed(); |
223 | 196 |
} |
224 | 197 |
|
... | ... | |
227 | 200 |
return true; |
228 | 201 |
} |
229 | 202 |
|
230 |
public Collection<SpecimenOrObservationBase> getSpecimen(){
|
|
203 |
public Collection<RowWrapperDTO> getSpecimen(){
|
|
231 | 204 |
return selectedSpecimens; |
232 | 205 |
} |
233 | 206 |
|
... | ... | |
240 | 213 |
|
241 | 214 |
@Override |
242 | 215 |
public String getColumnText(Object element, int columnIndex) { |
243 |
if(element instanceof SpecimenWrapper){
|
|
244 |
SpecimenWrapper wrapper = (SpecimenWrapper)element;
|
|
216 |
if(element instanceof RowWrapperDTO){
|
|
217 |
RowWrapperDTO wrapper = (RowWrapperDTO)element;
|
|
245 | 218 |
switch (columnIndex) { |
246 | 219 |
case 0: |
247 |
return wrapper.getTaxonNodeLabel();
|
|
220 |
return wrapper.getTaxonNode().getTaxon().getName().getTitleCache();
|
|
248 | 221 |
case 1: |
249 | 222 |
return wrapper.getSpecimen().getTitleCache(); |
250 | 223 |
default: |
Also available in: Unified diff
ref #7095 Move specimen and description loading to service layer