Project

General

Profile

Download (5.34 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 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.api.service;
11

    
12
import java.util.ArrayList;
13
import java.util.Collection;
14
import java.util.List;
15
import java.util.Map;
16
import java.util.UUID;
17

    
18
import javax.persistence.EntityNotFoundException;
19

    
20
import org.springframework.beans.factory.annotation.Autowired;
21
import org.springframework.stereotype.Service;
22
import org.springframework.transaction.annotation.Transactional;
23

    
24
import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling;
25
import eu.etaxonomy.cdm.api.service.config.TermNodeDeletionConfigurator;
26
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
27
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
28
import eu.etaxonomy.cdm.model.term.TermNode;
29
import eu.etaxonomy.cdm.model.term.TermTree;
30
import eu.etaxonomy.cdm.model.term.TermType;
31
import eu.etaxonomy.cdm.persistence.dao.term.ITermNodeDao;
32
import eu.etaxonomy.cdm.persistence.dao.term.ITermTreeDao;
33
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
34
import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
35

    
36
@Service
37
@Transactional(readOnly = false)
38
public class FeatureTreeServiceImpl extends IdentifiableServiceBase<TermTree, ITermTreeDao> implements IFeatureTreeService {
39

    
40
    private ITermNodeDao termNodeDao;
41

    
42
    @Autowired
43
    private IFeatureNodeService featureNodeService;
44

    
45
    @Override
46
    @Autowired
47
    protected void setDao(ITermTreeDao dao) {
48
        this.dao = dao;
49
    }
50

    
51
    @Autowired
52
    protected void setTermNodeDao(ITermNodeDao termNodeDao) {
53
        this.termNodeDao = termNodeDao;
54
    }
55

    
56
    @Override
57
    @Transactional(readOnly = false)
58
    public UpdateResult updateCaches(Class<? extends TermTree> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<TermTree> cacheStrategy, IProgressMonitor monitor) {
59
        if (clazz == null){
60
            clazz = TermTree.class;
61
        }
62
        return super.updateCachesImpl(clazz, stepSize, cacheStrategy, monitor);
63
    }
64

    
65
    @Override
66
    public List<TermNode> getFeatureNodesAll() {
67
        return termNodeDao.list();
68
    }
69

    
70
    @Override
71
    public Map<UUID, TermNode> saveFeatureNodesAll(Collection<TermNode> featureNodeCollection) {
72
        return termNodeDao.saveAll(featureNodeCollection);
73
    }
74

    
75
    @Override
76
    public Map<UUID, TermNode> saveOrUpdateFeatureNodesAll(Collection<TermNode> featureNodeCollection) {
77
        return termNodeDao.saveOrUpdateAll(featureNodeCollection);
78
    }
79

    
80
    @Override
81
    public TermTree loadWithNodes(UUID uuid, List<String> propertyPaths, List<String> nodePaths) {
82

    
83
        if(nodePaths==null){
84
            nodePaths = new ArrayList<>();
85
        }
86

    
87
        if(!nodePaths.contains("children")) {
88
            nodePaths.add("children");
89
        }
90

    
91
        List<String> rootPaths = new ArrayList<>();
92
        rootPaths.add("root");
93
        for(String path : nodePaths) {
94
            rootPaths.add("root." + path);
95
        }
96

    
97
        if(propertyPaths != null) {
98
            rootPaths.addAll(propertyPaths);
99
        }
100

    
101
        TermTree featureTree = load(uuid, rootPaths);
102
        if(featureTree == null){
103
            throw new EntityNotFoundException("No FeatureTree entity found for " + uuid);
104
        }
105
        dao.deepLoadNodes(featureTree.getRoot().getChildNodes(), nodePaths);
106
        return featureTree;
107
    }
108

    
109
    /**
110
     * Returns the featureTree specified by the given <code>uuid</code>.
111
     * The specified featureTree either can be one of those stored in the CDM database or can be the
112
     * DefaultFeatureTree (contains all Features in use).
113
     * The uuid of the DefaultFeatureTree is defined in {@link IFeatureTreeService#DefaultFeatureTreeUuid}.
114
     * The DefaultFeatureTree is also returned if no feature tree at all is stored in the cdm database.
115
     *
116
     * @see eu.etaxonomy.cdm.api.service.ServiceBase#load(java.util.UUID, java.util.List)
117
     */
118
    @Override
119
    public TermTree load(UUID uuid, List<String> propertyPaths) {
120
        return super.load(uuid, propertyPaths);
121
    }
122

    
123
    @Override
124
    public TermTree createTransientDefaultFeatureTree() {
125
        return load(ITermTreeDao.DefaultFeatureTreeUuid);
126
    }
127

    
128
    @Override
129
    public DeleteResult delete(UUID featureTreeUuid){
130
        DeleteResult result = new DeleteResult();
131
        TermTree tree = dao.load(featureTreeUuid);
132

    
133
        TermNode rootNode = HibernateProxyHelper.deproxy(tree.getRoot());
134
        TermNodeDeletionConfigurator config = new TermNodeDeletionConfigurator();
135
        config.setChildHandling(ChildHandling.DELETE);
136
        result =featureNodeService.deleteFeatureNode(rootNode.getUuid(), config);
137
        //FIXME test if this is necessary
138
        tree.removeRootNode();
139
        if (result.isOk()){
140
          dao.delete(tree);
141
          result.addDeletedObject(tree);
142
        }
143
        return result;
144
    }
145

    
146
    @Override
147
    public <S extends TermTree> List<UuidAndTitleCache<S>> getUuidAndTitleCacheByTermType(Class<S> clazz, TermType termType, Integer limit,
148
            String pattern) {
149
        return dao.getUuidAndTitleCacheByTermType(clazz, termType, limit, pattern);
150
    }
151
}
(17-17/97)