reverting last commit - will be committed again later
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / PolytomousKeyServiceImpl.java
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.List;
14 import java.util.UUID;
15
16 import org.springframework.beans.factory.annotation.Autowired;
17 import org.springframework.stereotype.Service;
18 import org.springframework.transaction.annotation.Propagation;
19 import org.springframework.transaction.annotation.Transactional;
20
21 import eu.etaxonomy.cdm.api.service.pager.Pager;
22 import eu.etaxonomy.cdm.api.service.pager.impl.AbstractPagerImpl;
23 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
24 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
25 import eu.etaxonomy.cdm.model.description.PolytomousKey;
26 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
27 import eu.etaxonomy.cdm.persistence.dao.description.IIdentificationKeyDao;
28 import eu.etaxonomy.cdm.persistence.dao.description.IPolytomousKeyDao;
29 import eu.etaxonomy.cdm.persistence.dao.description.IPolytomousKeyNodeDao;
30 import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;
31 import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
32
33 @Service
34 @Transactional(propagation = Propagation.SUPPORTS, readOnly = false)
35 public class PolytomousKeyServiceImpl extends IdentifiableServiceBase<PolytomousKey, IPolytomousKeyDao> implements IPolytomousKeyService {
36
37 private IIdentificationKeyDao identificationKeyDao;
38 private ITaxonDao taxonDao;
39
40 // private IPolytomousKeyNodeDao nodeDao;
41
42
43 @Autowired
44 protected void setDao(IPolytomousKeyDao dao) {
45 this.dao = dao;
46 }
47
48 @Autowired
49 protected void setDao(IIdentificationKeyDao identificationKeyDao) {
50 this.identificationKeyDao = identificationKeyDao;
51 }
52
53 @Autowired
54 protected void setDao(ITaxonDao taxonDao) {
55 this.taxonDao = taxonDao;
56 }
57
58 // @Autowired
59 // protected void setDao(IPolytomousKeyNodeDao nodeDao) {
60 // this.nodeDao = nodeDao;
61 // }
62
63
64 /* (non-Javadoc)
65 * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache(java.lang.Integer, eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy)
66 */
67 @Override
68 public void updateTitleCache(Class<? extends PolytomousKey> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<PolytomousKey> cacheStrategy, IProgressMonitor monitor) {
69 if (clazz == null){
70 clazz = PolytomousKey.class;
71 }
72 super.updateTitleCacheImpl(clazz, stepSize, cacheStrategy, monitor);
73 }
74
75
76 /* (non-Javadoc)
77 * @see eu.etaxonomy.cdm.api.service.IFeatureTreeService#loadWithNodes(java.util.UUID, java.util.List, java.util.List)
78 */
79 public PolytomousKey loadWithNodes(UUID uuid, List<String> propertyPaths, List<String> nodePaths) {
80
81 if(nodePaths == null){
82 nodePaths = new ArrayList<String>();
83 }
84 nodePaths.add("children");
85
86 List<String> rootPaths = new ArrayList<String>();
87 rootPaths.add("root");
88 for(String path : nodePaths) {
89 rootPaths.add("root." + path);
90 }
91
92 if(propertyPaths != null) {
93 rootPaths.addAll(propertyPaths);
94 }
95
96 PolytomousKey polytomousKey = load(uuid, rootPaths);
97 dao.loadNodes(polytomousKey.getRoot(),nodePaths);
98 return polytomousKey;
99 }
100
101 /**
102 * Returns the polytomous key specified by the given <code>uuid</code>.
103 *
104 * @see eu.etaxonomy.cdm.api.service.ServiceBase#load(java.util.UUID, java.util.List)
105 */
106 @Override
107 public PolytomousKey load(UUID uuid, List<String> propertyPaths) {
108 return super.load(uuid, propertyPaths);
109 }
110
111
112 /* (non-Javadoc)
113 * @see eu.etaxonomy.cdm.api.service.IPolytomousKeyService#findByTaxonomicScope(eu.etaxonomy.cdm.model.taxon.TaxonBase, java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List)
114 */
115 @Override
116 public Pager<PolytomousKey> findByTaxonomicScope(
117 TaxonBase taxon, Integer pageSize,
118 Integer pageNumber, List<String> propertyPaths) {
119
120 List<PolytomousKey> list = new ArrayList<PolytomousKey>();
121 taxon = taxonDao.findById(taxon.getId());
122 Integer numberOfResults = identificationKeyDao.countByTaxonomicScope(taxon, PolytomousKey.class).intValue();
123 if(AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)){
124 list = identificationKeyDao.findByTaxonomicScope(taxon, PolytomousKey.class, pageSize, pageNumber, propertyPaths);
125 }
126 Pager<PolytomousKey> pager = new DefaultPagerImpl<PolytomousKey>(pageNumber, numberOfResults, pageSize, list);
127 return pager;
128 }
129
130 // /* (non-Javadoc)
131 // * @see eu.etaxonomy.cdm.api.service.ServiceBase#delete(eu.etaxonomy.cdm.model.common.CdmBase)
132 // */
133 // @Override
134 // public UUID delete(PolytomousKey key) {
135 //
136 //// nodeDao.deleteForKey(key);
137 //
138 // return super.delete(key);
139 // }
140
141
142
143 }