merge for cdmlib-services
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / ReferenceServiceImpl.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.cdm.api.service;
12
13 import java.util.ArrayList;
14 import java.util.Collection;
15 import java.util.List;
16 import java.util.Map;
17 import java.util.UUID;
18
19 import org.apache.log4j.Logger;
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.pager.Pager;
25 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
26 import eu.etaxonomy.cdm.model.name.BotanicalName;
27 import eu.etaxonomy.cdm.model.name.HybridRelationship;
28 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
29 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
30 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
31 import eu.etaxonomy.cdm.persistence.dao.reference.IReferenceDao;
32 import eu.etaxonomy.cdm.persistence.query.OrderHint;
33
34
35 @Service
36 @Transactional(readOnly = true)
37 public class ReferenceServiceImpl extends IdentifiableServiceBase<ReferenceBase,IReferenceDao> implements IReferenceService {
38
39 static Logger logger = Logger.getLogger(ReferenceServiceImpl.class);
40
41 /**
42 * Constructor
43 */
44 public ReferenceServiceImpl(){
45 if (logger.isDebugEnabled()) { logger.debug("Load ReferenceService Bean"); }
46 }
47
48 /**
49 * FIXME Candidate for harmonization
50 * find
51 */
52 public ReferenceBase getReferenceByUuid(UUID uuid) {
53 return super.getCdmObjectByUuid(uuid);
54 }
55
56 /**
57 * FIXME Candidate for harmonization
58 * getByTitle?
59 */
60 public List<ReferenceBase> getReferencesByTitle(String title) {
61 return super.findCdmObjectsByTitle(title);
62 }
63
64 public List<ReferenceBase> getReferencesByTitle(String title, Class<ReferenceBase> clazz) {
65 return super.findCdmObjectsByTitle(title, clazz);
66 }
67
68 /**
69 * FIXME Candidate for harmonization
70 * save
71 */
72 @Transactional(readOnly = false)
73 public UUID saveReference(ReferenceBase reference) {
74 return super.saveCdmObject(reference);
75 }
76
77 /**
78 * FIXME Candidate for harmonization
79 * save(Set<Reference> references)
80 */
81 @Transactional(readOnly = false)
82 public Map<UUID, ReferenceBase> saveReferenceAll(Collection<ReferenceBase> referenceCollection){
83 return saveCdmObjectAll(referenceCollection);
84 }
85
86 /**
87 * FIXME Candidate for harmonization
88 * list()
89 * (non-Javadoc)
90 * @see eu.etaxonomy.cdm.api.service.IReferenceService#getAllReferences(int, int)
91 */
92 @Deprecated
93 public List<ReferenceBase> getAllReferences(int limit, int start){
94 return dao.list(limit, start);
95 }
96
97 /**
98 * FIXME Candidate for harmonization
99 * list
100 * (non-Javadoc)
101 * @see eu.etaxonomy.cdm.api.service.IReferenceService#getAllReferences(java.lang.Integer, java.lang.Integer)
102 */
103 public Pager<ReferenceBase> getAllReferences(Integer pageSize, Integer pageNumber, List<OrderHint> orderHints) {
104 Integer numberOfResults = dao.count();
105
106 List<ReferenceBase> results = new ArrayList<ReferenceBase>();
107 if(numberOfResults > 0) { // no point checking again
108 Integer start = pageSize == null ? 0 : pageSize * (pageNumber - 1);
109 results = dao.list(pageSize, start, orderHints); //TODO implement pager like method in dao?
110 }
111 return new DefaultPagerImpl<ReferenceBase>(pageNumber, numberOfResults, pageSize, results);
112 }
113
114 /**
115 * FIXME Candidate for harmonization
116 * list
117 */
118 public Pager<ReferenceBase> getAllReferences(Integer pageSize, Integer pageNumber) {
119 return getAllReferences(pageSize, pageNumber, null);
120 }
121
122 public void generateTitleCache() {
123 logger.warn("Not yet implemented");
124 // TODO Auto-generated method stub
125
126 }
127
128 @Autowired
129 protected void setDao(IReferenceDao dao) {
130 this.dao = dao;
131 }
132
133 public Pager<ReferenceBase> search(Class<? extends ReferenceBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
134 Integer numberOfResults = dao.count(clazz,queryString);
135
136 List<ReferenceBase> results = new ArrayList<ReferenceBase>();
137 if(numberOfResults > 0) { // no point checking again
138 results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths);
139 }
140
141 return new DefaultPagerImpl<ReferenceBase>(pageNumber, numberOfResults, pageSize, results);
142 }
143 }