Project

General

Profile

Download (10.2 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 = :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(UUID uuidTaxon ){
113
        String[] result = createSqlPartsForTaxon(uuidTaxon);
114

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

    
118
    private static String[] createSqlPartsForTaxon(UUID uuidTaxon) {
119

    
120

    
121

    
122
        String sqlSelectString = ""
123
                + "select a.uuid, "
124
                + "a.id, "
125
                + "a.titleCache, "
126
                //taxon
127
                + "t.uuid, "
128
                + "t.id, "
129
                + "t.titleCache, "
130

    
131
                //types
132
                + "a.types ";
133

    
134
        String sqlFromString =   " FROM DescriptionBase as a ";
135

    
136
        String sqlJoinString =  " LEFT JOIN a.taxon as t ";
137

    
138
        String sqlWhereString = " WHERE a.taxon.uuid like "+ uuidTaxon.toString();
139

    
140
        String[] result = new String[4];
141
        result[0] = sqlSelectString;
142
        result[1] = sqlFromString;
143
        result[2] = sqlJoinString;
144
        result[3] = sqlWhereString;
145
        return result;
146
    }
147

    
148

    
149

    
150
//    public DescriptionBaseDto(SpecimenOrObservationBase specimen){
151
//        this(specimen, null, false, false);
152
//    }
153

    
154

    
155
    public UUID getDescriptionUuid() {
156
        return getCdmEntity().getUuid();
157
    }
158

    
159
    public String getTitleCache(){
160
        return getCdmEntity().getTitleCache();
161
    }
162

    
163
    public UuidAndTitleCache<Taxon> getTaxonDto() {
164
        return taxonUuidAndTitleCache;
165
    }
166

    
167
    public UuidAndTitleCache<SpecimenOrObservationBase> getSpecimenDto() {
168
        return specimenDto;
169
    }
170

    
171
    public UuidAndTitleCache<TaxonName> getNameDto() {
172
        return nameUuidAndTitleCache;
173
    }
174

    
175
    /**
176
     * @return
177
     */
178
    public List<DescriptionElementDto> getElements() {
179
        return elements;
180
    }
181

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

    
189
    public EnumSet<DescriptionType> getTypes() {
190
        return types;
191
    }
192

    
193
    public void setTypes(EnumSet<DescriptionType> types) {
194
        this.types = types;
195
    }
196

    
197
    public int getId() {
198
        return id;
199
    }
200

    
201
    public void setId(int id) {
202
        this.id = id;
203
    }
204

    
205
    /**
206
     * @param desc
207
     * @return
208
     */
209
    public static DescriptionBaseDto fromDescription(DescriptionBase desc) {
210
        UuidAndTitleCache<Taxon> taxonUuidAndTitleCache = null;
211
        UuidAndTitleCache<SpecimenOrObservationBase> specimenDto = null;
212
        UuidAndTitleCache<TaxonName> nameUuidAndTitleCache = null;
213
        if (desc instanceof TaxonDescription){
214
            Taxon taxon = HibernateProxyHelper.deproxy(((TaxonDescription)desc).getTaxon(), Taxon.class);
215
            if (taxon != null){
216
                taxonUuidAndTitleCache = new UuidAndTitleCache<Taxon>(taxon.getUuid(), taxon.getId(), taxon.getTitleCache());
217
            }
218
        }
219
        if (desc instanceof SpecimenDescription){
220
            SpecimenDescription specimenDesc = HibernateProxyHelper.deproxy(desc, SpecimenDescription.class);
221
            SpecimenOrObservationBase specimen = specimenDesc.getDescribedSpecimenOrObservation();
222
            specimenDto = new UuidAndTitleCache<>(specimen.getUuid(), specimen.getId(), specimen.getTitleCache());
223

    
224
//            if (specimen != null){
225
//                if (specimen instanceof FieldUnit){
226
//                    specimenDto = FieldUnitDTO.fromEntity((FieldUnit)specimen);
227
//                }else{
228
//                    specimenDto = DerivedUnitDTO.fromEntity((DerivedUnit)specimen);
229
//                }
230
//            }
231
        }
232
        if (desc instanceof TaxonNameDescription){
233
            TaxonNameDescription nameDesc = HibernateProxyHelper.deproxy(desc, TaxonNameDescription.class);
234
            TaxonName name = nameDesc.getTaxonName();
235
            if (name != null){
236
                nameUuidAndTitleCache = new UuidAndTitleCache<TaxonName>(name.getUuid(), name.getId(), name.getTitleCache());
237
            }
238
        }
239

    
240
        List<DescriptionElementDto> elements = new ArrayList<>();
241
        for (Object element: desc.getElements()){
242
            if (element instanceof CategoricalData){
243
                Feature feature = ((CategoricalData) element).getFeature();
244
                FeatureDto featureDto = FeatureDto.fromFeature(feature);
245
                CategoricalDataDto dto = CategoricalDataDto.fromCategoricalData((CategoricalData)element);
246
                elements.add(dto);
247
            }
248
            if (element instanceof QuantitativeData){
249
                Feature feature = ((QuantitativeData) element).getFeature();
250
                FeatureDto featureDto = FeatureDto.fromFeature(feature);
251
                QuantitativeDataDto dto = QuantitativeDataDto.fromQuantitativeData((QuantitativeData)element);
252
                elements.add(dto);
253
            }
254
        }
255

    
256

    
257
        DescriptionBaseDto dto = new DescriptionBaseDto(desc.getUuid(), desc.getTitleCache(), taxonUuidAndTitleCache, specimenDto, nameUuidAndTitleCache, desc.getId(), elements, desc.getTypes());
258
        return dto;
259
    }
260

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

    
290
        return dtoResult;
291

    
292
    }
293

    
294

    
295

    
296

    
297

    
298

    
299

    
300

    
301

    
302

    
303
}
(10-10/44)