Project

General

Profile

Download (4.3 KB) Statistics
| Branch: | Tag: | Revision:
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.getDisplayDataForFeature(feature);
68
        }
69
        else if(rowObject instanceof TaxonRowWrapperDTO){
70
            TaxonRowWrapperDTO taxonWrapper = (TaxonRowWrapperDTO)rowObject;
71
            if(columnIndex==0){
72
                return taxonWrapper.getDescription();
73
            }
74
            Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
75
            return taxonWrapper.getDisplayDataForFeature(feature);
76

    
77
        }
78
        else if (columnIndex == 0) {
79
            return rowObject;
80
        }
81
        return null;
82
    }
83

    
84
    @Override
85
    public void setDataValue(Object rowObject, int columnIndex, Object newValue) {
86
        if(rowObject instanceof RowWrapperDTO){
87
            RowWrapperDTO rowWrapper = (RowWrapperDTO)rowObject;
88
            matrix.addRowToSave(rowWrapper);
89
            Feature feature = matrix.getIndexToFeatureMap().get(columnIndex);
90
            if(feature.isSupportsCategoricalData()
91
                    && newValue instanceof Collection
92
                    && ((Collection) newValue).stream().allMatch(o->o instanceof TermDto)){
93
                List<TermDto> dtos = (List<TermDto>)newValue;
94
                List<UUID> termUuids = dtos.stream().map(dto->dto.getUuid()).collect(Collectors.toList());
95
                List<DefinedTermBase> terms = CdmStore.getService(ITermService.class).load(termUuids, null);
96
                List<State> states = new ArrayList<>();
97
                for (DefinedTermBase definedTermBase : terms) {
98
                    if(definedTermBase instanceof State){
99
                        states.add((State) definedTermBase);
100
                    }
101
                }
102
                rowWrapper.setDataValueForCategoricalData(feature, states);
103
            }
104
        }
105
    }
106

    
107
    @Override
108
    public int getColumnCount() {
109
        return matrix.getPropertyToLabelMap().size();
110
    }
111

    
112
    @Override
113
    public String getColumnProperty(int columnIndex) {
114
        return matrix.getPropertyToLabelMap().get(columnIndex);
115
    }
116

    
117
    @Override
118
    public int getColumnIndex(String propertyName){
119
        return matrix.getPropertyToLabelMap().indexOf(propertyName);
120
    }
121

    
122
}
(22-22/23)