Project

General

Profile

Download (4.16 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.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
}
(20-20/21)