Project

General

Profile

« Previous | Next » 

Revision e1fef636

Added by Katja Luther over 2 years ago

ref #9772: fix getting taxonRowWrapper

View differences:

cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/description/IDescriptiveDataSetDao.java
12 12
import eu.etaxonomy.cdm.model.description.Feature;
13 13
import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;
14 14
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
15
import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
16 15
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
17 16

  
18 17
public interface IDescriptiveDataSetDao extends IIdentifiableDao<DescriptiveDataSet> {
......
36 35
     * @param uuid
37 36
     * @return
38 37
     */
39
    DescriptiveDataSetBaseDto getDescriptiveDataSetDtoByUuid(UUID uuid);
38
//    DescriptiveDataSetBaseDto getDescriptiveDataSetDtoByUuid(UUID uuid);
40 39
}
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptiveDataSetDao.java
24 24
import eu.etaxonomy.cdm.model.description.DescriptiveSystemRole;
25 25
import eu.etaxonomy.cdm.model.description.Feature;
26 26
import eu.etaxonomy.cdm.model.description.QuantitativeData;
27
import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionDao;
27 28
import eu.etaxonomy.cdm.persistence.dao.description.IDescriptiveDataSetDao;
28 29
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
29 30
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonNodeDao;
30 31
import eu.etaxonomy.cdm.persistence.dao.term.IDefinedTermDao;
31 32
import eu.etaxonomy.cdm.persistence.dao.term.ITermTreeDao;
32
import eu.etaxonomy.cdm.persistence.dto.DescriptiveDataSetBaseDto;
33
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
34
import eu.etaxonomy.cdm.persistence.dto.TermDto;
35
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
36 33
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
37 34

  
38 35
@Repository
......
51 48
	 @Autowired
52 49
     private ITaxonNodeDao nodeDao;
53 50

  
51
	 @Autowired
52
     private IDescriptionDao descriptionDao;
53

  
54 54
	public DescriptiveDataSetDao() {
55 55
		super(DescriptiveDataSet.class);
56 56
	}
......
240 240
        return list;
241 241
    }
242 242

  
243
    private List<UUID> getDescriptionUuidsForDescriptiveDataSet(UUID uuid) {
244
        Session session = getSession();
243 245

  
246
        String queryString = "SELECT t.uuid  FROM DescriptiveDataSet a JOIN a.descriptions as t WHERE a.uuid = :uuid";
244 247

  
245
    @Override
246
    public DescriptiveDataSetBaseDto getDescriptiveDataSetDtoByUuid(UUID uuid) {
247
        String queryString = DescriptiveDataSetBaseDto.getDescriptiveDataSetDtoSelect()
248
                + " WHERE a.uuid = :uuid"
249
                + " ORDER BY a.titleCache";
250
        Query query =  getSession().createQuery(queryString);
248

  
249
        Query query;
250
        query = session.createQuery(queryString);
251 251
        query.setParameter("uuid", uuid);
252 252

  
253
        @SuppressWarnings("unchecked")
254
        List<Object[]> result = query.list();
255 253

  
256
        List<DescriptiveDataSetBaseDto> list = DescriptiveDataSetBaseDto.descriptiveDataSetBaseDtoListFrom(result);
257
        UUID descriptiveSystemUuid = null;
258
        UUID minRankUuid = null;
259
        UUID maxRankUuid = null;
260
        if (result != null && !result.isEmpty()){
261
            Object[] descriptiveDataSetResult = result.get(0);
262
            descriptiveSystemUuid = (UUID)descriptiveDataSetResult[4];
263
            minRankUuid = (UUID)descriptiveDataSetResult[5];
264
            maxRankUuid = (UUID)descriptiveDataSetResult[6];
265
        }else{
266
            return null;
267
        }
268
        //get descriptiveSystem
269
        DescriptiveDataSetBaseDto dto = list.get(0);
270
        if (descriptiveSystemUuid != null){
271
            TermTreeDto treeDto = termTreeDao.getTermTreeDtosByUuid(descriptiveSystemUuid);
272
            dto.setDescriptiveSystem(treeDto);
254
        @SuppressWarnings("unchecked")
255
        List<UUID> result = query.list();
256
        List<UUID> list = new ArrayList<>();
257
        for(UUID object : result){
258
            list.add(object);
273 259
        }
274
        //get taxon nodes
275
        List<UUID> nodeUuids = getNodeUuidsForDescriptiveDataSet(uuid);
276
        List<TaxonNodeDto> nodeDtos = nodeDao.getTaxonNodeDtos(nodeUuids);
277
        Set<TaxonNodeDto> nodeSet = new HashSet<>(nodeDtos);
278
        dto.setSubTreeFilter(nodeSet);
279

  
280
        TermDto minRank = termDao.getTermDto(minRankUuid);
281
        TermDto maxRank = termDao.getTermDto(maxRankUuid);
282
        dto.setMaxRank(maxRank);
283
        dto.setMinRank(minRank);
284
        return dto;
260

  
261
        return list;
285 262
    }
263

  
264

  
265

  
266

  
267
//    @Override
268
//    public DescriptiveDataSetBaseDto getDescriptiveDataSetDtoByUuid(UUID uuid) {
269
//        String queryString = DescriptiveDataSetBaseDto.getDescriptiveDataSetDtoSelect()
270
//                + " WHERE a.uuid = :uuid"
271
//                + " ORDER BY a.titleCache";
272
//        Query query =  getSession().createQuery(queryString);
273
//        query.setParameter("uuid", uuid);
274
//
275
//        @SuppressWarnings("unchecked")
276
//        List<Object[]> result = query.list();
277
//
278
//        List<DescriptiveDataSetBaseDto> list = DescriptiveDataSetBaseDto.descriptiveDataSetBaseDtoListFrom(result);
279
//        UUID descriptiveSystemUuid = null;
280
//        UUID minRankUuid = null;
281
//        UUID maxRankUuid = null;
282
//        if (result != null && !result.isEmpty()){
283
//            Object[] descriptiveDataSetResult = result.get(0);
284
//            descriptiveSystemUuid = (UUID)descriptiveDataSetResult[4];
285
//            minRankUuid = (UUID)descriptiveDataSetResult[5];
286
//            maxRankUuid = (UUID)descriptiveDataSetResult[6];
287
//        }else{
288
//            return null;
289
//        }
290
//        //get descriptiveSystem
291
//        DescriptiveDataSetBaseDto dto = list.get(0);
292
//        if (descriptiveSystemUuid != null){
293
//            TermTreeDto treeDto = termTreeDao.getTermTreeDtosByUuid(descriptiveSystemUuid);
294
//            dto.setDescriptiveSystem(treeDto);
295
//        }
296
//        //get taxon nodes
297
//        List<UUID> nodeUuids = getNodeUuidsForDescriptiveDataSet(uuid);
298
//        List<TaxonNodeDto> nodeDtos = nodeDao.getTaxonNodeDtos(nodeUuids);
299
//        Set<TaxonNodeDto> nodeSet = new HashSet<>(nodeDtos);
300
//        dto.setSubTreeFilter(nodeSet);
301
//
302
//        List<UUID> descriptionUuidList = getDescriptionUuidsForDescriptiveDataSet(uuid);
303
//        Set<UUID> descriptionUuids = new HashSet<>(descriptionUuidList);
304
//        dto.setDescriptionUuids(descriptionUuids);
305
//
306
//        TermDto minRank = termDao.getTermDto(minRankUuid);
307
//        TermDto maxRank = termDao.getTermDto(maxRankUuid);
308
//        dto.setMaxRank(maxRank);
309
//        dto.setMinRank(minRank);
310
//        return dto;
311
//    }
286 312
}
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dto/DescriptiveDataSetBaseDto.java
34 34
    private TermTreeDto descriptiveSystem;
35 35
    private Set<TaxonNodeDto> subTreeFilter;
36 36
    private Set<TermDto> geoFilter;
37
    private Set<UUID> descriptionUuids;
37 38

  
38 39
    private Set<Representation> representations = new HashSet<>();
39 40
    private String representation_L10n = null;
......
219 220
        this.geoFilter = geoFilter;
220 221
    }
221 222

  
223
    public Set<UUID> getDescriptionUuids() {
224
        return descriptionUuids;
225
    }
226

  
227
    public void setDescriptionUuids(Set<UUID> descriptionUuids) {
228
        this.descriptionUuids = descriptionUuids;
229
    }
230

  
222 231

  
223 232
}
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/DescriptionServiceImpl.java
449 449
            if (descriptionBase.getDescribedSpecimenOrObservation() != null){
450 450
                descriptionSpecimenMap.put(descriptionBase.getDescribedSpecimenOrObservation().getUuid(), descriptionBase);
451 451
            }
452
            if (descriptionBase instanceof TaxonDescription){
453

  
454
                descriptionSpecimenMap.put(((TaxonDescription)descriptionBase).getTaxon().getUuid(), descriptionBase);
455
            }
456
            if (descriptionBase instanceof TaxonNameDescription){
457

  
458
                descriptionSpecimenMap.put(((TaxonNameDescription)descriptionBase).getTaxonName().getUuid(), descriptionBase);
459
            }
452 460
        }
453 461
        MergeResult<DescriptionBase> mergeResult = null;
454 462
        for(DescriptionBaseDto descDto : descriptions) {
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/DescriptiveDataSetService.java
15 15
import java.util.stream.Collectors;
16 16

  
17 17
import org.apache.log4j.Logger;
18
import org.hibernate.Query;
19
import org.hibernate.Session;
18 20
import org.springframework.beans.factory.annotation.Autowired;
19 21
import org.springframework.stereotype.Service;
20 22
import org.springframework.transaction.annotation.Transactional;
......
73 75
import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
74 76
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
75 77
import eu.etaxonomy.cdm.persistence.dto.TermDto;
78
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
76 79
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
77 80
import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
78 81
import eu.etaxonomy.cdm.strategy.generate.PolytomousKeyGenerator;
......
98 101
    @Autowired
99 102
    private IDefinedTermDao termDao;
100 103

  
104
    @Autowired
105
    private ITermTreeService termTreeService;
106

  
101 107
    @Autowired
102 108
    private IDescriptionService descriptionService;
103 109

  
......
127 133
        return dao.getDescriptiveDataSetUuidAndTitleCache( limitOfInitialElements, pattern);
128 134
    }
129 135

  
130
	@Override
131
    public DescriptiveDataSetBaseDto getDescriptiveDataSetDtoByUuid(UUID uuid) {
132
        return dao.getDescriptiveDataSetDtoByUuid(uuid);
133
    }
136
//	@Override
137
//    public DescriptiveDataSetBaseDto getDescriptiveDataSetDtoByUuid(UUID uuid) {
138
//        return dao.getDescriptiveDataSetDtoByUuid(uuid);
139
//    }
134 140

  
135 141

  
136 142
	@Override
......
150 156
                            || description.getTypes().contains(DescriptionType.DEFAULT_VALUES_FOR_AGGREGATION)
151 157
                            || description.getTypes().contains(DescriptionType.SECONDARY_DATA)
152 158
                            )){
153
                rowWrapper = createTaxonRowWrapper(description.getUuid(), descriptiveDataSet.getUuid());
159
                rowWrapper = createTaxonRowWrapper((TaxonDescription)description, descriptiveDataSet.getUuid());
154 160
            }
155 161
            else if (HibernateProxyHelper.isInstanceOf(description, SpecimenDescription.class)&&
156 162
                    !description.getTypes().contains(DescriptionType.CLONE_FOR_SOURCE)){
......
236 242
    }
237 243

  
238 244
    @Override
239
    public TaxonRowWrapperDTO createTaxonRowWrapper(UUID taxonDescriptionUuid, UUID descriptiveDataSetUuid) {
245
    public TaxonRowWrapperDTO createTaxonRowWrapper(TaxonDescription taxonDescription, UUID descriptiveDataSetUuid) {
240 246
        TaxonNode taxonNode = null;
241 247
        Classification classification = null;
242 248
//        TaxonDescription description = (TaxonDescription) descriptionService.loadDto(taxonDescriptionUuid,
243 249
//                Arrays.asList("taxon", "descriptionElements", "descriptionElements.feature"));
244
        DescriptionBaseDto description = descriptionService.loadDto(taxonDescriptionUuid);
250
//        DescriptionBaseDto description = descriptionService.loadDto(taxonDescriptionUuid);
251
        DescriptionBaseDto description = DescriptionBaseDto.fromDescription(taxonDescription);
245 252

  
246 253
        DescriptiveDataSet descriptiveDataSet = dao.load(descriptiveDataSetUuid, null);
247 254
        Optional<TaxonNode> first = descriptiveDataSet.getTaxonSubtreeFilter().stream()
......
259 266
//                descriptions.add(DescriptionBaseDto.fromDescription(desc));
260 267
//            }
261 268
        }
262
        descriptions = new HashSet<>(descriptionService.loadDtosForTaxon(description.getTaxonDto().getUuid()));
269
        //TODO: fix getting descriptions
270
//        descriptions = new HashSet<>(descriptionService.loadDtosForTaxon(description.getTaxonDto().getUuid()));
263 271

  
264 272
        return new TaxonRowWrapperDTO(description, nodeDto, descriptions);
265 273
    }
......
420 428
//        TaxonDescription defaultTaxonDescription = findDefaultDescription(description.getUuid(), descriptiveDataSet.getUuid());
421 429
        TaxonDescription defaultTaxonDescription = recurseDefaultDescription(taxonNode, descriptiveDataSet);
422 430
        TaxonRowWrapperDTO taxonRowWrapper = defaultTaxonDescription != null
423
                ? createTaxonRowWrapper(defaultTaxonDescription.getUuid(), descriptiveDataSet.getUuid()) : null;
431
                ? createTaxonRowWrapper(defaultTaxonDescription, descriptiveDataSet.getUuid()) : null;
424 432
//                use description not specimen for specimenRow
425 433
        SpecimenRowWrapperDTO specimenRowWrapperDTO = new SpecimenRowWrapperDTO(DescriptionBaseDto.fromDescription(description), SpecimenOrObservationDTOFactory.fromEntity(specimen), specimen.getRecordBasis(), new TaxonNodeDto(taxonNode), fieldUnit, identifier, country);
426 434
        specimenRowWrapperDTO.setDefaultDescription(taxonRowWrapper);
......
646 654
        });
647 655
        dataSet.addDescription(newTaxonDescription);
648 656
        saveOrUpdate(dataSet);
649
        return createTaxonRowWrapper(newTaxonDescription.getUuid(), dataSet.getUuid());
657
        return createTaxonRowWrapper(newTaxonDescription, dataSet.getUuid());
650 658
    }
651 659

  
652 660
    @Override
......
937 945

  
938 946
    }
939 947

  
948
    @Override
949
    public DescriptiveDataSetBaseDto getDescriptiveDataSetDtoByUuid(UUID uuid) {
950
        String queryString = DescriptiveDataSetBaseDto.getDescriptiveDataSetDtoSelect()
951
                + " WHERE a.uuid = :uuid"
952
                + " ORDER BY a.titleCache";
953
        Query query =  getSession().createQuery(queryString);
954
        query.setParameter("uuid", uuid);
955

  
956
        @SuppressWarnings("unchecked")
957
        List<Object[]> result = query.list();
958

  
959
        List<DescriptiveDataSetBaseDto> list = DescriptiveDataSetBaseDto.descriptiveDataSetBaseDtoListFrom(result);
960
        UUID descriptiveSystemUuid = null;
961
        UUID minRankUuid = null;
962
        UUID maxRankUuid = null;
963
        if (result != null && !result.isEmpty()){
964
            Object[] descriptiveDataSetResult = result.get(0);
965
            descriptiveSystemUuid = (UUID)descriptiveDataSetResult[4];
966
            minRankUuid = (UUID)descriptiveDataSetResult[5];
967
            maxRankUuid = (UUID)descriptiveDataSetResult[6];
968
        }else{
969
            return null;
970
        }
971
        //get descriptiveSystem
972
        DescriptiveDataSetBaseDto dto = list.get(0);
973
        if (descriptiveSystemUuid != null){
974
            TermTreeDto treeDto = termTreeService.getTermTreeDtoByUuid(descriptiveSystemUuid);
975
            dto.setDescriptiveSystem(treeDto);
976
        }
977
        //get taxon nodes
978
        List<UUID> nodeUuids = getNodeUuidsForDescriptiveDataSet(uuid);
979
        List<TaxonNodeDto> nodeDtos = taxonNodeService.getTaxonNodeDtos(nodeUuids);
980
        Set<TaxonNodeDto> nodeSet = new HashSet<>(nodeDtos);
981
        dto.setSubTreeFilter(nodeSet);
982

  
983
        List<UUID> descriptionUuidList = getDescriptionUuidsForDescriptiveDataSet(uuid);
984
        Set<UUID> descriptionUuids = new HashSet<>(descriptionUuidList);
985
        dto.setDescriptionUuids(descriptionUuids);
986

  
987
        TermDto minRank = termDao.getTermDto(minRankUuid);
988
        TermDto maxRank = termDao.getTermDto(maxRankUuid);
989
        dto.setMaxRank(maxRank);
990
        dto.setMinRank(minRank);
991
        return dto;
992
    }
993

  
994
    private List<UUID> getNodeUuidsForDescriptiveDataSet(UUID uuid) {
995
        Session session = getSession();
996

  
997
        String queryString = "SELECT t.uuid  FROM DescriptiveDataSet a JOIN a.taxonSubtreeFilter as t WHERE a.uuid = :uuid";
998

  
999

  
1000
        Query query;
1001
        query = session.createQuery(queryString);
1002
        query.setParameter("uuid", uuid);
1003

  
1004

  
1005
        @SuppressWarnings("unchecked")
1006
        List<UUID> result = query.list();
1007
        List<UUID> list = new ArrayList<>();
1008
        for(UUID object : result){
1009
            list.add(object);
1010
        }
1011

  
1012
        return list;
1013
    }
1014

  
1015
    private List<UUID> getDescriptionUuidsForDescriptiveDataSet(UUID uuid) {
1016
        Session session = getSession();
1017

  
1018
        String queryString = "SELECT t.uuid  FROM DescriptiveDataSet a JOIN a.descriptions as t WHERE a.uuid = :uuid";
1019

  
1020

  
1021
        Query query;
1022
        query = session.createQuery(queryString);
1023
        query.setParameter("uuid", uuid);
1024

  
1025

  
1026
        @SuppressWarnings("unchecked")
1027
        List<UUID> result = query.list();
1028
        List<UUID> list = new ArrayList<>();
1029
        for(UUID object : result){
1030
            list.add(object);
1031
        }
1032

  
1033
        return list;
1034
    }
1035

  
940 1036
}
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IDescriptiveDataSetService.java
119 119

  
120 120
    /**
121 121
     * Creates a taxon row wrapper object for the given description
122
     * @param taxonDescriptionUuid the taxon description for which the wrapper should be created
122
     * @param taxonDescription the taxon description for which the wrapper should be created
123 123
     * @param descriptiveDataSet the data set it should be used in
124 124
     * @return the created row wrapper
125 125
     */
126
    public TaxonRowWrapperDTO createTaxonRowWrapper(UUID taxonDescriptionUuid, UUID descriptiveDataSetUuid);
126
    public TaxonRowWrapperDTO createTaxonRowWrapper(TaxonDescription taxonDescription, UUID descriptiveDataSetUuid);
127 127

  
128 128
    /**
129 129
     * Returns a {@link SpecimenDescription} for a given specimen with corresponding

Also available in: Unified diff