Adapt to model change - (DescriptiveDataSet TermTree<Feature>)
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / matrix / SpecimenColumnPropertyAccessor.java
1 /**
2 * Copyright (C) 2017 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.descriptiveDataSet.matrix;
10
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;
16
17 import org.eclipse.nebula.widgets.nattable.data.IColumnPropertyAccessor;
18
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;
28
29 /**
30 * Property accessor class which maps setting and getting data for
31 * each row in the character matrix
32 * @author pplitzner
33 * @since Nov 26, 2017
34 *
35 */
36 public class SpecimenColumnPropertyAccessor implements IColumnPropertyAccessor<Object>{
37
38 private CharacterMatrix matrix;
39
40 public SpecimenColumnPropertyAccessor(CharacterMatrix matrix) {
41 this.matrix = matrix;
42 }
43
44 @Override
45 public Object getDataValue(Object rowObject, int columnIndex) {
46 if(rowObject instanceof SpecimenRowWrapperDTO){
47 SpecimenRowWrapperDTO rowWrapper = (SpecimenRowWrapperDTO) rowObject;
48 switch (columnIndex) {
49 case 0:
50 if(matrix.isTreeView()){
51 return "#"+rowWrapper.getSpecimen().getId();
52 }
53 else{
54 return rowWrapper.getTaxonNode();
55 }
56 case 1:
57 return rowWrapper.getFieldUnit();
58 case 2:
59 return rowWrapper.getIdentifier();
60 case 3:
61 return rowWrapper.getCountry();
62
63 default:
64 break;
65 }
66 Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
67 return rowWrapper.getDataValueForFeature(feature);
68 } else if(rowObject instanceof TaxonRowWrapperDTO){
69 TaxonRowWrapperDTO taxonWrapper = (TaxonRowWrapperDTO)rowObject;
70 if(columnIndex==0){
71 return taxonWrapper.getDescription();
72 }
73 Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
74 return taxonWrapper.getDataValueForFeature(feature);
75
76 }
77 else if (columnIndex == 0) {
78 return rowObject;
79 }
80 return null;
81 }
82
83 @Override
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);
96 }
97 }
98 rowWrapper.setDataValueForFeature(feature, states);
99 }
100 }
101 }
102
103 @Override
104 public int getColumnCount() {
105 return matrix.getPropertyToLabelMap().size();
106 }
107
108 @Override
109 public String getColumnProperty(int columnIndex) {
110 return matrix.getPropertyToLabelMap().get(columnIndex);
111 }
112
113 @Override
114 public int getColumnIndex(String propertyName){
115 return matrix.getPropertyToLabelMap().indexOf(propertyName);
116 }
117
118 }