Project

General

Profile

Download (4.88 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2021 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.cdm.api.service.dto;
10

    
11
import java.util.ArrayList;
12
import java.util.HashSet;
13
import java.util.List;
14
import java.util.Set;
15
import java.util.UUID;
16

    
17
import eu.etaxonomy.cdm.model.description.CategoricalData;
18
import eu.etaxonomy.cdm.model.description.State;
19
import eu.etaxonomy.cdm.model.description.StateData;
20
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
21
import eu.etaxonomy.cdm.persistence.dto.FeatureDto;
22
import eu.etaxonomy.cdm.persistence.dto.TermDto;
23

    
24
/**
25
 * @author k.luther
26
 * @since Aug 18, 2021
27
 */
28
public class CategoricalDataDto extends DescriptionElementDto {
29

    
30
    private static final long serialVersionUID = -675109569492621389L;
31
    private List<StateDataDto> states = new ArrayList<>();
32

    
33
    public CategoricalDataDto (UUID elementUuid, FeatureDto feature, List<StateDataDto> states){
34
       super(elementUuid, feature);
35
       if (states != null){
36
           this.states = states;
37
       }
38
    }
39

    
40
    public CategoricalDataDto(FeatureDto feature){
41
        super(feature);
42

    
43
    }
44

    
45
    public static CategoricalDataDto fromCategoricalData(CategoricalData data){
46
        List<StateDataDto> stateDtos = new ArrayList<>();
47
        StateDataDto stateDataDto;
48
        Set<StateData> toRemove = new HashSet<>();
49
        for (StateData stateData: data.getStateData()){
50
            if (stateData.getState() == null){
51
                toRemove.add(stateData);
52
                continue;
53
            }
54
            Integer count = stateData.getCount();
55
            UUID uuid = stateData.getUuid();
56
            TermDto termDto = TermDto.fromTerm(stateData.getState());
57
            stateDataDto = new StateDataDto(termDto, count, uuid);
58
            stateDtos.add(stateDataDto);
59
        }
60
        for (StateData stateData: toRemove){
61
            data.removeStateData(stateData);
62
        }
63
        CategoricalDataDto dto = new CategoricalDataDto(data.getUuid(), FeatureDto.fromFeature(data.getFeature()), stateDtos);
64

    
65
        return dto;
66
    }
67

    
68

    
69
    public List<StateDataDto> getStates() {
70
        return states;
71
    }
72

    
73
    public void addState(StateDataDto state) {
74
        this.states.add(state);
75
    }
76

    
77
    public List<StateDataDto> setStateDataOnly(List<TermDto> states){
78
        removeStateData();
79

    
80
        for (TermDto state : states) {
81
            addStateData(state);
82
        }
83
        return this.states;
84
    }
85

    
86
    /**
87
     * @param state
88
     */
89
     public StateDataDto addStateData(State state){
90
        StateDataDto stateData = new StateDataDto(state);
91
        addStateData(stateData);
92
        return stateData;
93
    }
94

    
95
     public StateDataDto addStateData(TermDto state){
96
         StateDataDto stateData = new StateDataDto(state);
97
         addStateData(stateData);
98
         return stateData;
99
     }
100

    
101
     public void addStateData(StateDataDto stateData){
102
         this.states.add(stateData);
103

    
104
     }
105

    
106
    /**
107
     * @param stateData
108
     */
109
    private void removeStateData() {
110
        states.clear();
111
    }
112

    
113
    public static String getCategoricalDtoSelect(){
114
        String[] result = createSqlParts();
115

    
116
        return result[0]+result[1]+result[2] + result[3];
117
    }
118

    
119
    private static String[] createSqlParts() {
120
        //featureDto, uuid, states
121

    
122
        String sqlSelectString = ""
123
                + "select a.uuid, "
124
                + "feature.uuid, "
125
                + "state.uuid,  "
126
                + "state.count, "
127
                + "state.state ";
128

    
129
        String sqlFromString =   " FROM CategoricalData as a ";
130

    
131
        String sqlJoinString =  "LEFT JOIN a.stateData as state "
132
                + "LEFT JOIN a.feature as feature ";
133

    
134
        String sqlWhereString =  " WHERE a.inDescription.uuid = :uuid";
135

    
136

    
137
        String[] result = new String[4];
138
        result[0] = sqlSelectString;
139
        result[1] = sqlFromString;
140
        result[2] = sqlJoinString;
141
        result[3] = sqlWhereString;
142
        return result;
143
    }
144

    
145
    /**
146
     * @param result
147
     * @return
148
     */
149
    public static List<CategoricalDataDto> categoricalDataDtoListFrom(List<Object[]> result) {
150
        List<CategoricalDataDto> dtoResult = new ArrayList<>();
151
        CategoricalDataDto dto = null;
152

    
153
        for (Object[] o: result){
154
            UUID uuid = (UUID)o[0];
155
            UUID featureUuid = (UUID)o[1];
156
            if (dto == null || !dto.getElementUuid().equals(uuid)){
157
                dto = new CategoricalDataDto(uuid, new FeatureDto(featureUuid, null, null, null, null, null, null, true, false, true, null, true, false, null, null, null, null), null);
158
                dtoResult.add(dto);
159
            }
160
            StateDataDto state = new StateDataDto(TermDto.fromTerm((DefinedTermBase)o[4]),(Integer) o[3], uuid);
161
            dto.addState(state);
162
        }
163

    
164

    
165
        return dtoResult;
166

    
167
    }
168

    
169

    
170
}
(2-2/47)