cache update for identifiable services
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / TermServiceImpl.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.Enumeration;
15 import java.util.List;
16 import java.util.Locale;
17 import java.util.Set;
18 import java.util.UUID;
19
20 import org.apache.log4j.Logger;
21 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.beans.factory.annotation.Qualifier;
23 import org.springframework.stereotype.Service;
24 import org.springframework.transaction.annotation.Propagation;
25 import org.springframework.transaction.annotation.Transactional;
26
27 import eu.etaxonomy.cdm.api.service.pager.Pager;
28 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
29 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
30 import eu.etaxonomy.cdm.model.common.Language;
31 import eu.etaxonomy.cdm.model.common.LanguageString;
32 import eu.etaxonomy.cdm.model.common.LanguageStringBase;
33 import eu.etaxonomy.cdm.model.common.Representation;
34 import eu.etaxonomy.cdm.model.common.TermBase;
35 import eu.etaxonomy.cdm.model.common.TermVocabulary;
36 import eu.etaxonomy.cdm.model.location.NamedArea;
37 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
38 import eu.etaxonomy.cdm.model.location.NamedAreaType;
39 import eu.etaxonomy.cdm.model.location.TdwgArea;
40 import eu.etaxonomy.cdm.model.media.Media;
41 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
42 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
43 import eu.etaxonomy.cdm.persistence.dao.common.ILanguageStringBaseDao;
44 import eu.etaxonomy.cdm.persistence.dao.common.ILanguageStringDao;
45 import eu.etaxonomy.cdm.persistence.dao.common.IRepresentationDao;
46 import eu.etaxonomy.cdm.persistence.query.OrderHint;
47
48 @Service
49 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
50 public class TermServiceImpl extends IdentifiableServiceBase<DefinedTermBase,IDefinedTermDao> implements ITermService{
51 private static final Logger logger = Logger.getLogger(TermServiceImpl.class);
52 private ILanguageStringDao languageStringDao;
53 @Autowired
54 @Qualifier("langStrBaseDao")
55 private ILanguageStringBaseDao languageStringBaseDao;
56 private IRepresentationDao representationDao;
57
58 @Autowired
59 public void setLanguageStringDao(ILanguageStringDao languageStringDao) {
60 this.languageStringDao = languageStringDao;
61 }
62
63 @Autowired
64 public void setRepresentationDao(IRepresentationDao representationDao) {
65 this.representationDao = representationDao;
66 }
67
68 @Autowired
69 protected void setDao(IDefinedTermDao dao) {
70 this.dao = dao;
71 }
72
73 public <TERM extends DefinedTermBase> List<TERM> listByTermClass(Class<TERM> clazz, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
74 return dao.listByTermClass(clazz, limit, start, orderHints, propertyPaths);
75 }
76
77 /**
78 * @see eu.etaxonomy.cdm.api.service.ITermService#getTermByUri(java.lang.String)
79 */
80 public DefinedTermBase getByUri(String uri) {
81 //FIXME transformation from URI to UUID
82 return dao.findByUri(uri);
83 }
84
85 public Language getLanguageByIso(String iso639) {
86 return dao.getLanguageByIso(iso639);
87 }
88
89 public List<Language> getLanguagesByLocale(Enumeration<Locale> locales){
90 return dao.getLanguagesByLocale(locales);
91 }
92
93 /**
94 * (non-Javadoc)
95 * @see eu.etaxonomy.cdm.api.service.ITermService#getAreaByTdwgAbbreviation(java.lang.String)
96 */
97 public NamedArea getAreaByTdwgAbbreviation(String tdwgAbbreviation) {
98 //FIXME this is just a placeholder until it is decided where to implement this method
99 //(see also FIXMEs in TdwgArea)
100 return TdwgArea.getAreaByTdwgAbbreviation(tdwgAbbreviation);
101 }
102
103 public <T extends DefinedTermBase> Pager<T> getGeneralizationOf(T definedTerm, Integer pageSize, Integer pageNumber) {
104 Integer numberOfResults = dao.countGeneralizationOf(definedTerm);
105
106 List<T> results = new ArrayList<T>();
107 if(numberOfResults > 0) { // no point checking again
108 results = dao.getGeneralizationOf(definedTerm, pageSize, pageNumber);
109 }
110
111 return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
112 }
113
114 public <T extends DefinedTermBase> Pager<T> getIncludes(Set<T> definedTerms, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
115 Integer numberOfResults = dao.countIncludes(definedTerms);
116
117 List<T> results = new ArrayList<T>();
118 if(numberOfResults > 0) { // no point checking again
119 results = dao.getIncludes(definedTerms, pageSize, pageNumber,propertyPaths);
120 }
121
122 return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
123 }
124
125 public Pager<Media> getMedia(DefinedTermBase definedTerm, Integer pageSize, Integer pageNumber) {
126 Integer numberOfResults = dao.countMedia(definedTerm);
127
128 List<Media> results = new ArrayList<Media>();
129 if(numberOfResults > 0) { // no point checking again
130 results = dao.getMedia(definedTerm, pageSize, pageNumber);
131 }
132
133 return new DefaultPagerImpl<Media>(pageNumber, numberOfResults, pageSize, results);
134 }
135
136 public <T extends DefinedTermBase> Pager<T> getPartOf(Set<T> definedTerms,Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
137 Integer numberOfResults = dao.countPartOf(definedTerms);
138
139 List<T> results = new ArrayList<T>();
140 if(numberOfResults > 0) { // no point checking again
141 results = dao.getPartOf(definedTerms, pageSize, pageNumber, propertyPaths);
142 }
143
144 return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
145 }
146
147 public Pager<NamedArea> list(NamedAreaLevel level, NamedAreaType type, Integer pageSize, Integer pageNumber,
148 List<OrderHint> orderHints, List<String> propertyPaths) {
149 Integer numberOfResults = dao.count(level, type);
150
151 List<NamedArea> results = new ArrayList<NamedArea>();
152 if (numberOfResults > 0) { // no point checking again
153 results = dao.list(level, type, pageSize, pageNumber, orderHints, propertyPaths);
154 }
155
156 return new DefaultPagerImpl<NamedArea>(pageNumber, numberOfResults, pageSize, results);
157 }
158
159 public <T extends DefinedTermBase> Pager<T> findByRepresentationText(String label, Class<T> clazz, Integer pageSize, Integer pageNumber) {
160 Integer numberOfResults = dao.countDefinedTermByRepresentationText(label,clazz);
161
162 List<T> results = new ArrayList<T>();
163 if(numberOfResults > 0) { // no point checking again
164 results = dao.getDefinedTermByRepresentationText(label, clazz, pageSize, pageNumber);
165 }
166
167 return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
168 }
169
170 public List<LanguageString> getAllLanguageStrings(int limit, int start) {
171 return languageStringDao.list(limit, start);
172 }
173
174 public List<Representation> getAllRepresentations(int limit, int start) {
175 return representationDao.list(limit,start);
176 }
177
178 public UUID saveLanguageData(LanguageStringBase languageData) {
179 return languageStringBaseDao.save(languageData);
180 }
181
182 /* (non-Javadoc)
183 * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache()
184 */
185 @Override
186 public void updateTitleCache() {
187 //TODO shouldnt this be TermBase instead of DefinedTermBase
188 Class<DefinedTermBase> clazz = DefinedTermBase.class;
189 super.updateTitleCache(clazz, null, null);
190 }
191
192
193 }