Project

General

Profile

Download (5.51 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 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

    
10
package eu.etaxonomy.cdm.persistence.dao.hibernate.term;
11

    
12
import java.util.ArrayList;
13
import java.util.List;
14
import java.util.UUID;
15

    
16
import org.apache.log4j.Logger;
17
import org.hibernate.Criteria;
18
import org.hibernate.Query;
19
import org.hibernate.Session;
20
import org.springframework.beans.factory.annotation.Autowired;
21
import org.springframework.stereotype.Repository;
22

    
23
import eu.etaxonomy.cdm.model.description.Feature;
24
import eu.etaxonomy.cdm.model.term.TermNode;
25
import eu.etaxonomy.cdm.model.term.TermTree;
26
import eu.etaxonomy.cdm.model.term.TermType;
27
import eu.etaxonomy.cdm.model.term.TermVocabulary;
28
import eu.etaxonomy.cdm.model.term.VocabularyEnum;
29
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
30
import eu.etaxonomy.cdm.persistence.dao.term.ITermTreeDao;
31
import eu.etaxonomy.cdm.persistence.dao.term.ITermVocabularyDao;
32
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
33
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
34

    
35
/**
36
 * @author a.mueller
37
 * @since 10.07.2008
38
 */
39
@Repository
40
public class TermTreeDaoImpl extends IdentifiableDaoBase<TermTree> implements ITermTreeDao{
41

    
42
    @SuppressWarnings("unused")
43
    private static final Logger logger = Logger.getLogger(TermTreeDaoImpl.class);
44

    
45
    @Autowired
46
    private ITermVocabularyDao termVocabularyDao;
47

    
48
    public TermTreeDaoImpl() {
49
        super(TermTree.class);
50
        indexedClasses = new Class[1];
51
        indexedClasses[0] = TermTree.class;
52
    }
53

    
54
    @Override
55
    public List<TermTree> list() {
56
        Criteria crit = getSession().createCriteria(type);
57
        @SuppressWarnings("unchecked")
58
        List<TermTree> result = crit.list();
59
        return result;
60
    }
61

    
62
    @Override
63
    public void deepLoadNodes(List<TermNode> nodes, List<String> nodePaths) {
64

    
65
        defaultBeanInitializer.initializeAll(nodes, nodePaths);
66

    
67
        List<TermNode> childrenOfChildren = new ArrayList<>();
68
        for(TermNode<?> node : nodes) {
69
            if(node.getChildCount() > 0){
70
                childrenOfChildren.addAll(node.getChildNodes());
71
            }
72
        }
73
        if(childrenOfChildren.size() > 0){
74
            deepLoadNodes(childrenOfChildren, nodePaths);
75
        }
76
    }
77

    
78
    @Override
79
    public TermTree load(UUID uuid, List<String> propertyPaths) {
80
        TermTree result = super.load(uuid, propertyPaths);
81
        if (result == null && uuid.equals(DefaultFeatureTreeUuid)){
82
            return createDefaultFeatureTree();
83
        }
84
        return super.load(uuid, propertyPaths);
85
    }
86

    
87
    @Override
88
    public TermTree load(UUID uuid) {
89
        return load(uuid, null);
90
    }
91

    
92
    private TermTree<Feature> createDefaultFeatureTree() {
93

    
94
        TermVocabulary<Feature> featureVocabulary = termVocabularyDao.findByUuid(VocabularyEnum.Feature.getUuid());
95

    
96
        List<Feature> featureList = new ArrayList<>(featureVocabulary.getTerms());
97
        List<Feature> selectedFeatures = new ArrayList<>();
98
        for(Feature feature : featureList){
99
            if(!feature.equals(Feature.INDIVIDUALS_ASSOCIATION())){
100
                selectedFeatures.add(feature);
101
            }
102
        }
103
        TermTree<Feature> featureTree = TermTree.NewFeatureInstance(selectedFeatures);
104
        featureTree.setUuid(DefaultFeatureTreeUuid);
105
        return featureTree;
106
    }
107

    
108
    @Override
109
    public <S extends TermTree> List<UuidAndTitleCache<S>> getUuidAndTitleCacheByTermType(Class<S> clazz, TermType termType, Integer limit,
110
            String pattern) {
111
        Session session = getSession();
112
        Query query = session.createQuery(
113
                " SELECT uuid, id, titleCache "
114
                        + " FROM " + clazz.getSimpleName()
115
                        + (pattern!=null?" WHERE titleCache LIKE :pattern":" WHERE 1 = 1 ")
116
                        + (termType!=null?" AND termType = :termType ":"")
117
                );
118
        if(pattern!=null){
119
            pattern = pattern.replace("*", "%");
120
            pattern = pattern.replace("?", "_");
121
            pattern = pattern + "%";
122
            query.setParameter("pattern", pattern);
123
        }
124
        if(termType!=null){
125
            query.setParameter("termType", termType);
126
        }
127
        if (limit != null){
128
           query.setMaxResults(limit);
129
        }
130
        return getUuidAndTitleCache(query);
131
    }
132

    
133
    @Override
134
    public List<TermTreeDto> listTermTreeDtosByTermType(TermType termType) {
135
        String queryString = TermTreeDto.getTermTreeDtoSelect()
136
                + " WHERE a.termType = :termType"
137
                + " ORDER BY a.titleCache";
138
        Query query =  getSession().createQuery(queryString);
139
        query.setParameter("termType", termType);
140

    
141
        @SuppressWarnings("unchecked")
142
        List<Object[]> result = query.list();
143

    
144
        List<TermTreeDto> list = TermTreeDto.termTreeDtoListFrom(result);
145
        return list;
146
    }
147

    
148
    @Override
149
    public TermTreeDto getTermTreeDtosByUuid(UUID uuid) {
150
        String queryString = TermTreeDto.getTermTreeDtoSelect()
151
                + " WHERE a.uuid = :uuid"
152
                + " ORDER BY a.titleCache";
153
        Query query =  getSession().createQuery(queryString);
154
        query.setParameter("uuid", uuid);
155

    
156
        @SuppressWarnings("unchecked")
157
        List<Object[]> result = query.list();
158

    
159
        List<TermTreeDto> list = TermTreeDto.termTreeDtoListFrom(result);
160
        return !list.isEmpty()? list.get(0): null;
161
    }
162

    
163
}
(5-5/6)