Project

General

Profile

Download (10.1 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2020 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.EnumSet;
13
import java.util.List;
14
import java.util.UUID;
15

    
16
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
17
import eu.etaxonomy.cdm.model.description.CategoricalData;
18
import eu.etaxonomy.cdm.model.description.DescriptionBase;
19
import eu.etaxonomy.cdm.model.description.DescriptionType;
20
import eu.etaxonomy.cdm.model.description.Feature;
21
import eu.etaxonomy.cdm.model.description.QuantitativeData;
22
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
23
import eu.etaxonomy.cdm.model.description.TaxonDescription;
24
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
25
import eu.etaxonomy.cdm.model.name.TaxonName;
26
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
27
import eu.etaxonomy.cdm.model.taxon.Taxon;
28
import eu.etaxonomy.cdm.persistence.dto.FeatureDto;
29
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
30

    
31
/**
32
 * @author k.luther
33
 * @since May 15, 2020
34
 */
35
public class DescriptionBaseDto extends EntityDTO<DescriptionBase>{
36

    
37
    private static final long serialVersionUID = -1578895619195062502L;
38

    
39
    private UuidAndTitleCache<Taxon> taxonUuidAndTitleCache;
40
    private UuidAndTitleCache<SpecimenOrObservationBase> specimenDto;
41
    private int id;
42

    
43
    private UuidAndTitleCache<TaxonName> nameUuidAndTitleCache;
44

    
45
    private List<DescriptionElementDto> elements = new ArrayList<>();
46

    
47
    private EnumSet<DescriptionType> types = EnumSet.noneOf(DescriptionType.class);
48

    
49

    
50
    public DescriptionBaseDto(UUID uuid, String titleCache, UuidAndTitleCache<Taxon> taxonUuidAndTitleCache,  UuidAndTitleCache<SpecimenOrObservationBase> specimenDto, UuidAndTitleCache<TaxonName> nameUuidAndTitleCache, Integer id, List<DescriptionElementDto> elements, EnumSet<DescriptionType> types){
51
        super(uuid, titleCache);
52
        this.taxonUuidAndTitleCache = taxonUuidAndTitleCache;
53
        this.specimenDto = specimenDto;
54
        this.nameUuidAndTitleCache = nameUuidAndTitleCache;
55
        this.id = id;
56
        if (elements != null){
57
            this.elements = elements;
58
        }
59
        this.types = types;
60

    
61

    
62
    }
63

    
64
    public DescriptionBaseDto(UuidAndTitleCache<SpecimenOrObservationBase> specimen){
65
        super(SpecimenDescription.NewInstance());
66
        specimenDto = specimen;
67
//        if(specimen instanceof FieldUnit) {
68
//            specimenDto = FieldUnitDTO.fromEntity((FieldUnit)specimen);
69
//        } else {
70
//            specimenDto = DerivedUnitDTO.fromEntity((DerivedUnit)specimen);
71
//        }
72
    }
73

    
74
    public static String getDescriptionBaseDtoSelect(){
75
        String[] result = createSqlParts();
76

    
77
        return result[0]+result[1]+result[2] + result[3];
78
    }
79

    
80

    
81
    private static String[] createSqlParts() {
82
        String sqlSelectString = ""
83
                + "select a.uuid, "
84
                + "a.id, "
85
                + "a.titleCache, "
86
                //taxon
87
                + "t.uuid, "
88
                + "t.id, "
89
                + "t.titleCache, "
90
                //specimen
91
                + "s.uuid,  "
92
                + "s.id,  "
93
                + "s.titleCache, "
94
                //types
95
                + "a.types ";
96

    
97
        String sqlFromString =   " FROM DescriptionBase as a ";
98

    
99
        String sqlJoinString =  " LEFT JOIN a.taxon as t "
100
                + " LEFT JOIN a.describedSpecimenOrObservation as s ";
101

    
102
        String sqlWhereString = " WHERE a.uuid in (:uuid)";
103

    
104
        String[] result = new String[4];
105
        result[0] = sqlSelectString;
106
        result[1] = sqlFromString;
107
        result[2] = sqlJoinString;
108
        result[3] = sqlWhereString;
109
        return result;
110
    }
111

    
112
    public static String getDescriptionBaseDtoForTaxonSelect(){
113
        String[] result = createSqlPartsForTaxon();
114

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

    
118
    private static String[] createSqlPartsForTaxon() {
119
        String sqlSelectString = ""
120
                + "select a.uuid, "
121
                + "a.id, "
122
                + "a.titleCache, "
123
                //taxon
124
                + "t.uuid, "
125
                + "t.id, "
126
                + "t.titleCache, "
127

    
128
                //types
129
                + "a.types ";
130

    
131
        String sqlFromString =   " FROM DescriptionBase as a ";
132

    
133
        String sqlJoinString =  " LEFT JOIN a.taxon as t ";
134

    
135
        String sqlWhereString = " WHERE a.taxon.uuid = :uuid";
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

    
147
//    public DescriptionBaseDto(SpecimenOrObservationBase specimen){
148
//        this(specimen, null, false, false);
149
//    }
150

    
151

    
152
    public UUID getDescriptionUuid() {
153
        return getCdmEntity().getUuid();
154
    }
155

    
156
    public String getTitleCache(){
157
        return getCdmEntity().getTitleCache();
158
    }
159

    
160
    public UuidAndTitleCache<Taxon> getTaxonDto() {
161
        return taxonUuidAndTitleCache;
162
    }
163

    
164
    public UuidAndTitleCache<SpecimenOrObservationBase> getSpecimenDto() {
165
        return specimenDto;
166
    }
167

    
168
    public UuidAndTitleCache<TaxonName> getNameDto() {
169
        return nameUuidAndTitleCache;
170
    }
171

    
172
    /**
173
     * @return
174
     */
175
    public List<DescriptionElementDto> getElements() {
176
        return elements;
177
    }
178

    
179
    public void addElement(DescriptionElementDto element){
180
        if (elements == null){
181
            elements = new ArrayList<>();
182
        }
183
        elements.add(element);
184
    }
185

    
186
    public EnumSet<DescriptionType> getTypes() {
187
        return types;
188
    }
189

    
190
    public void setTypes(EnumSet<DescriptionType> types) {
191
        this.types = types;
192
    }
193

    
194
    public int getId() {
195
        return id;
196
    }
197

    
198
    public void setId(int id) {
199
        this.id = id;
200
    }
201

    
202
    public static DescriptionBaseDto fromDescription(DescriptionBase desc) {
203
        UuidAndTitleCache<Taxon> taxonUuidAndTitleCache = null;
204
        UuidAndTitleCache<SpecimenOrObservationBase> specimenDto = null;
205
        UuidAndTitleCache<TaxonName> nameUuidAndTitleCache = null;
206
        if (desc instanceof TaxonDescription){
207
            Taxon taxon = HibernateProxyHelper.deproxy(((TaxonDescription)desc).getTaxon(), Taxon.class);
208
            if (taxon != null){
209
                taxonUuidAndTitleCache = new UuidAndTitleCache<Taxon>(taxon.getUuid(), taxon.getId(), taxon.getTitleCache());
210
            }
211
        }
212
        if (desc instanceof SpecimenDescription){
213
            SpecimenDescription specimenDesc = HibernateProxyHelper.deproxy(desc, SpecimenDescription.class);
214
            SpecimenOrObservationBase specimen = specimenDesc.getDescribedSpecimenOrObservation();
215
            specimenDto = new UuidAndTitleCache<>(specimen.getUuid(), specimen.getId(), specimen.getTitleCache());
216

    
217
//            if (specimen != null){
218
//                if (specimen instanceof FieldUnit){
219
//                    specimenDto = FieldUnitDTO.fromEntity((FieldUnit)specimen);
220
//                }else{
221
//                    specimenDto = DerivedUnitDTO.fromEntity((DerivedUnit)specimen);
222
//                }
223
//            }
224
        }
225
        if (desc instanceof TaxonNameDescription){
226
            TaxonNameDescription nameDesc = HibernateProxyHelper.deproxy(desc, TaxonNameDescription.class);
227
            TaxonName name = nameDesc.getTaxonName();
228
            if (name != null){
229
                nameUuidAndTitleCache = new UuidAndTitleCache<TaxonName>(name.getUuid(), name.getId(), name.getTitleCache());
230
            }
231
        }
232

    
233
        List<DescriptionElementDto> elements = new ArrayList<>();
234
        for (Object element: desc.getElements()){
235
            if (element instanceof CategoricalData){
236
                Feature feature = ((CategoricalData) element).getFeature();
237
//                FeatureDto featureDto = FeatureDto.fromFeature(feature);
238
                CategoricalDataDto dto = CategoricalDataDto.fromCategoricalData((CategoricalData)element);
239
                elements.add(dto);
240
            }
241
            if (element instanceof QuantitativeData){
242
                Feature feature = ((QuantitativeData) element).getFeature();
243
                FeatureDto featureDto = FeatureDto.fromFeature(feature);
244
                QuantitativeDataDto dto = QuantitativeDataDto.fromQuantitativeData((QuantitativeData)element);
245
                elements.add(dto);
246
            }
247
        }
248

    
249

    
250
        DescriptionBaseDto dto = new DescriptionBaseDto(desc.getUuid(), desc.getTitleCache(), taxonUuidAndTitleCache, specimenDto, nameUuidAndTitleCache, desc.getId(), elements, desc.getTypes());
251
        return dto;
252
    }
253

    
254
    /**
255
     * @param result
256
     * @return
257
     */
258
    public static List<DescriptionBaseDto> descriptionBaseDtoListFrom(List<Object[]> result) {
259
        List<DescriptionBaseDto> dtoResult = new ArrayList<>();
260
        DescriptionBaseDto dto;
261
        for (Object[] o: result){
262
            UuidAndTitleCache<Taxon> taxonUuidAndTitleCache = null;
263
            UuidAndTitleCache<SpecimenOrObservationBase> specimenUuidAndTitleCache = null;
264
            UuidAndTitleCache<TaxonName> nameUuidAndTitleCache = null;
265
            EnumSet<DescriptionType> type = null;
266
            if (o[3] != null){
267
                taxonUuidAndTitleCache = new UuidAndTitleCache<>((UUID)o[3], (Integer)o[4], (String)o[5]);
268
            }
269
            if (o[6] != null && o[6] instanceof UUID){
270
                specimenUuidAndTitleCache = new UuidAndTitleCache<>((UUID)o[6], (Integer)o[7], (String)o[8]);
271
            }else if (o[6] instanceof EnumSet<?>){
272
                type = (EnumSet<DescriptionType>)o[6];
273
            }else if (o.length >7 && o[9] instanceof EnumSet<?>){
274
                type = (EnumSet<DescriptionType>)o[9];
275
            }
276
//            if (o[9] != null){
277
//                nameUuidAndTitleCache = new UuidAndTitleCache<>((UUID)o[9], (Integer)o[10], (String)o[11]);
278
//            }
279
            dto = new DescriptionBaseDto((UUID)o[0], (String)o[2], taxonUuidAndTitleCache, specimenUuidAndTitleCache, nameUuidAndTitleCache, (Integer)o[1], null, type);
280
            dtoResult.add(dto);
281
        }
282

    
283
        return dtoResult;
284

    
285
    }
286

    
287

    
288

    
289

    
290

    
291

    
292

    
293

    
294

    
295

    
296
}
(12-12/47)