2 * Copyright (C) 2017 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
.descriptiveDataSet
.matrix
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Collection
;
13 import java
.util
.List
;
14 import java
.util
.UUID
;
15 import java
.util
.stream
.Collectors
;
17 import org
.eclipse
.nebula
.widgets
.nattable
.data
.IColumnPropertyAccessor
;
19 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
20 import eu
.etaxonomy
.cdm
.api
.service
.dto
.RowWrapperDTO
;
21 import eu
.etaxonomy
.cdm
.api
.service
.dto
.SpecimenRowWrapperDTO
;
22 import eu
.etaxonomy
.cdm
.api
.service
.dto
.TaxonRowWrapperDTO
;
23 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
24 import eu
.etaxonomy
.cdm
.model
.description
.State
;
25 import eu
.etaxonomy
.cdm
.model
.term
.DefinedTermBase
;
26 import eu
.etaxonomy
.cdm
.persistence
.dto
.TermDto
;
27 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
30 * Property accessor class which maps setting and getting data for
31 * each row in the character matrix
36 public class SpecimenColumnPropertyAccessor
implements IColumnPropertyAccessor
<Object
>{
38 private CharacterMatrix matrix
;
40 public SpecimenColumnPropertyAccessor(CharacterMatrix matrix
) {
45 public Object
getDataValue(Object rowObject
, int columnIndex
) {
46 if(rowObject
instanceof SpecimenRowWrapperDTO
){
47 SpecimenRowWrapperDTO rowWrapper
= (SpecimenRowWrapperDTO
) rowObject
;
48 switch (columnIndex
) {
50 if(matrix
.isTreeView()){
51 return "#"+rowWrapper
.getSpecimen().getId();
54 return rowWrapper
.getTaxonNode();
57 return rowWrapper
.getFieldUnit();
59 return rowWrapper
.getIdentifier();
61 return rowWrapper
.getCountry();
66 Feature feature
= matrix
.getIndexToFeatureMap().get(columnIndex
);
67 return rowWrapper
.getDataValueForFeature(feature
);
68 } else if(rowObject
instanceof TaxonRowWrapperDTO
){
69 TaxonRowWrapperDTO taxonWrapper
= (TaxonRowWrapperDTO
)rowObject
;
71 return taxonWrapper
.getDescription();
73 Feature feature
= matrix
.getIndexToFeatureMap().get(columnIndex
);
74 return taxonWrapper
.getDataValueForFeature(feature
);
77 else if (columnIndex
== 0) {
84 public void setDataValue(Object rowObject
, int columnIndex
, Object newValue
) {
85 if(rowObject
instanceof RowWrapperDTO
){
86 RowWrapperDTO rowWrapper
= (RowWrapperDTO
)rowObject
;
87 Feature feature
= matrix
.getIndexToFeatureMap().get(columnIndex
);
88 if(newValue
instanceof Collection
&& ((Collection
) newValue
).stream().allMatch(o
->o
instanceof TermDto
)){
89 List
<TermDto
> dtos
= (List
<TermDto
>)newValue
;
90 List
<UUID
> termUuids
= dtos
.stream().map(dto
->dto
.getUuid()).collect(Collectors
.toList());
91 List
<DefinedTermBase
> terms
= CdmStore
.getService(ITermService
.class).load(termUuids
, null);
92 List
<State
> states
= new ArrayList
<>();
93 for (DefinedTermBase definedTermBase
: terms
) {
94 if(definedTermBase
instanceof State
){
95 states
.add((State
) definedTermBase
);
98 rowWrapper
.setDataValueForFeature(feature
, states
);
104 public int getColumnCount() {
105 return matrix
.getPropertyToLabelMap().size();
109 public String
getColumnProperty(int columnIndex
) {
110 return matrix
.getPropertyToLabelMap().get(columnIndex
);
114 public int getColumnIndex(String propertyName
){
115 return matrix
.getPropertyToLabelMap().indexOf(propertyName
);