3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.cdm
.api
.service
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Collection
;
15 import java
.util
.Enumeration
;
16 import java
.util
.List
;
17 import java
.util
.Locale
;
20 import java
.util
.UUID
;
22 import org
.apache
.log4j
.Logger
;
23 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
24 import org
.springframework
.beans
.factory
.annotation
.Qualifier
;
25 import org
.springframework
.stereotype
.Service
;
26 import org
.springframework
.transaction
.annotation
.Transactional
;
28 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
29 import eu
.etaxonomy
.cdm
.api
.service
.pager
.impl
.DefaultPagerImpl
;
30 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
31 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
32 import eu
.etaxonomy
.cdm
.model
.common
.LanguageString
;
33 import eu
.etaxonomy
.cdm
.model
.common
.LanguageStringBase
;
34 import eu
.etaxonomy
.cdm
.model
.common
.OrderedTermVocabulary
;
35 import eu
.etaxonomy
.cdm
.model
.common
.Representation
;
36 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
37 import eu
.etaxonomy
.cdm
.model
.common
.VocabularyEnum
;
38 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
39 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaLevel
;
40 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaType
;
41 import eu
.etaxonomy
.cdm
.model
.location
.TdwgArea
;
42 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
43 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationship
;
44 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.IDefinedTermDao
;
45 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.ILanguageStringBaseDao
;
46 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.ILanguageStringDao
;
47 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.IRepresentationDao
;
48 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.ITermVocabularyDao
;
49 import eu
.etaxonomy
.cdm
.persistence
.query
.OrderHint
;
52 @Transactional(readOnly
= true)
53 public class TermServiceImpl
extends ServiceBase
<DefinedTermBase
,IDefinedTermDao
> implements ITermService
{
54 private static final Logger logger
= Logger
.getLogger(TermServiceImpl
.class);
56 protected ITermVocabularyDao vocabularyDao
;
58 @Qualifier("langStrBaseDao")
59 private ILanguageStringBaseDao languageStringBaseDao
;
61 private IRepresentationDao representationDao
;
63 private ILanguageStringDao languageStringDao
;
66 protected void setVocabularyDao(ITermVocabularyDao vocabularyDao
) {
67 this.vocabularyDao
= vocabularyDao
;
72 * @see eu.etaxonomy.cdm.api.service.ITermService#getTermByUri(java.lang.String)
73 * FIXME Candidate for harmonization
76 public DefinedTermBase
getTermByUri(String uri
) {
77 //FIXME transformation from URI to UUID
78 return dao
.findByUri(uri
);
83 * @see eu.etaxonomy.cdm.api.service.ITermService#getTermByUuid(java.util.UUID)
84 * FIXME candidate for harmonization
86 public DefinedTermBase
getTermByUuid(UUID uuid
) {
87 return dao
.findByUuid(uuid
);
90 public DefinedTermBase
loadTerm(UUID uuid
, List
<String
> propertyPaths
){
91 return dao
.load(uuid
, propertyPaths
);
95 * FIXME candidate for harmonization
98 public List
<DefinedTermBase
> getAllDefinedTerms(int limit
, int start
){
99 return dao
.list(limit
, start
);
103 * FIXME candidate for harmonization
106 @Transactional(readOnly
= false)
107 public UUID
saveTerm(DefinedTermBase termBase
) {
108 return super.saveCdmObject(termBase
);
112 * FIXME candidate for harmonization
113 * save(Set<DefinedTermBase> terms)
115 @Transactional(readOnly
= false)
116 public Map
<UUID
, DefinedTermBase
> saveTermsAll(Collection
<?
extends DefinedTermBase
> termBaseCollection
){
117 return saveCdmObjectAll(termBaseCollection
);
122 * @see eu.etaxonomy.cdm.api.service.ITermService#getVocabulary(java.util.UUID)
123 * FIXME candidate for harmonization
124 * vocabuaryService.find
126 public TermVocabulary
<?
extends DefinedTermBase
<?
>> getVocabulary(UUID vocabularyUuid
) {
127 TermVocabulary
<?
extends DefinedTermBase
<?
>> vocabulary
= (TermVocabulary
) vocabularyDao
.findByUuid(vocabularyUuid
);
132 * FIXME candidate for harmonization
133 * vocabularyService.load
135 public TermVocabulary
loadVocabulary(UUID vocabularyUuid
, List
<String
> propertyPaths
) {
136 TermVocabulary
<?
extends DefinedTermBase
<?
>> vocabulary
= (TermVocabulary
) vocabularyDao
.load(vocabularyUuid
,
142 * FIXME candidate for harmonization
143 * move to vocabularyService
145 public TermVocabulary
<?
extends DefinedTermBase
<?
>> getVocabulary(VocabularyEnum vocabularyType
){
146 TermVocabulary
<?
extends DefinedTermBase
<?
>> vocabulary
= getVocabulary(vocabularyType
.getUuid());
152 * @see eu.etaxonomy.cdm.api.service.ITermService#listVocabularies(java.lang.Class)
153 * FIXME candidate for harmonization
154 * vocabularyService.list
156 public Set
<TermVocabulary
> listVocabularies(Class termClass
) {
157 logger
.error("Method not implemented yet");
162 * FIXME candidate for harmonization
163 * vocabularyService.list
165 public List
<TermVocabulary
<DefinedTermBase
>> getAllTermVocabularies(int limit
, int start
) {
166 return vocabularyDao
.list(limit
, start
);
169 public List
<TermVocabulary
<DefinedTermBase
>> listTermVocabularies(Integer limit
, Integer start
, List
<OrderHint
> orderHints
,
170 List
<String
> propertyPaths
){
171 return vocabularyDao
.list(limit
, start
, orderHints
, propertyPaths
);
175 * FIXME candidate for harmonization
176 * vocabularyService.page
178 public Pager
<TermVocabulary
<DefinedTermBase
>> pageTermVocabularies(Integer pageSize
, Integer pageNumber
,
179 List
<OrderHint
> orderHints
, List
<String
> propertyPaths
) {
181 List
<TermVocabulary
<DefinedTermBase
>> vocabs
= vocabularyDao
.list(pageSize
, pageNumber
* pageSize
, orderHints
,
183 Pager
<TermVocabulary
<DefinedTermBase
>> pager
= new DefaultPagerImpl
<TermVocabulary
<DefinedTermBase
>>(
184 pageNumber
, vocabs
.size(), pageSize
, vocabs
);
190 * @see eu.etaxonomy.cdm.api.service.ITermService#getLanguageVocabulary()
191 * FIXME candidate for harmonization
192 * is this the same as getVocabulary(VocabularyEnum.Language)
194 public TermVocabulary
<Language
> getLanguageVocabulary() {
195 String uuidString
= "45ac7043-7f5e-4f37-92f2-3874aaaef2de";
196 UUID uuid
= UUID
.fromString(uuidString
);
197 TermVocabulary
<Language
> languageVocabulary
=
198 (TermVocabulary
)vocabularyDao
.findByUuid(uuid
);
199 return languageVocabulary
;
203 * FIXME candidate for harmonization
204 * vocabularyService.save(Set<TermVocabulary> vocabularies)
206 public Map
<UUID
, TermVocabulary
<DefinedTermBase
>>
207 saveTermVocabulariesAll(Collection
<TermVocabulary
<DefinedTermBase
>> termVocabularies
) {
208 return vocabularyDao
.saveAll(termVocabularies
);
211 public UUID
saveTermVocabulary(TermVocabulary termVocabulary
) {
212 return vocabularyDao
.save(termVocabulary
);
216 * FIXME candidate for harmonization
217 * remove redundant code
219 // @Transactional(readOnly = false)
220 // public Map<UUID, Representation> saveRepresentationsAll(Collection<Representation> representations){
221 // return representationDao.saveAll(representations);
225 * FIXME candidate for harmonization
226 * this code is not used, remove it
228 @Transactional(readOnly
= false)
229 public Map
<UUID
, LanguageStringBase
> saveLanguageDataAll(Collection
<LanguageStringBase
> languageData
) {
230 return languageStringBaseDao
.saveAll(languageData
);
234 * FIXME candidate for harmonization
235 * Given that representations are owned by TermBase, this method is redundant
236 * @param representations
239 @Transactional(readOnly
= false)
240 public Map
<UUID
, Representation
> saveRepresentationAll(Collection
<Representation
> representations
) {
241 return representationDao
.saveAll(representations
);
245 * FIXME candidate for harmonization
246 * Given that representations are owned by TermBase, this method is redundant
248 public List
<Representation
> getAllRepresentations(int limit
, int start
){
249 return representationDao
.list(limit
, start
);
253 * FIXME candidate for harmonization
254 * Given that languageStrings are owned by other objects, this method is redundant
256 public List
<LanguageString
> getAllLanguageStrings(int limit
, int start
) {
257 return languageStringDao
.list(limit
, start
);
261 * FIXME candidate for harmonization
262 * Given that languageStrings are owned by other objects, this method is redundant
264 public Map
<UUID
, LanguageStringBase
>
265 saveLanguageStringBasesAll(Collection
<LanguageStringBase
> languageStringBases
) {
266 return languageStringBaseDao
.saveAll(languageStringBases
);
269 public Language
getLanguageByIso(String iso639
) {
270 return dao
.getLanguageByIso(iso639
);
273 public List
<Language
> getLanguagesByLocale(Enumeration
<Locale
> locales
){
274 return dao
.getLanguagesByLocale(locales
);
278 * FIXME candidate for harmonization
279 * Given that languageStrings are owned by other objects, this method is redundant
281 @Transactional(readOnly
= false)
282 public UUID
saveLanguageData(
283 LanguageStringBase languageData
) {
284 return languageStringBaseDao
.save(languageData
);
288 protected void setDao(IDefinedTermDao dao
) {
294 * @see eu.etaxonomy.cdm.api.service.ITermService#getAreaByTdwgAbbreviation(java.lang.String)
296 public NamedArea
getAreaByTdwgAbbreviation(String tdwgAbbreviation
) {
297 //FIXME this is just a placeholder until it is decided where to implement this method
298 //(see also FIXMEs in TdwgArea)
299 return TdwgArea
.getAreaByTdwgAbbreviation(tdwgAbbreviation
);
302 public <T
extends DefinedTermBase
> Pager
<T
> getGeneralizationOf(T definedTerm
, Integer pageSize
, Integer pageNumber
) {
303 Integer numberOfResults
= dao
.countGeneralizationOf(definedTerm
);
305 List
<T
> results
= new ArrayList
<T
>();
306 if(numberOfResults
> 0) { // no point checking again
307 results
= dao
.getGeneralizationOf(definedTerm
, pageSize
, pageNumber
);
310 return new DefaultPagerImpl
<T
>(pageNumber
, numberOfResults
, pageSize
, results
);
313 public <T
extends DefinedTermBase
> Pager
<T
> getIncludes(Set
<T
> definedTerms
, Integer pageSize
, Integer pageNumber
, List
<String
> propertyPaths
) {
314 Integer numberOfResults
= dao
.countIncludes(definedTerms
);
316 List
<T
> results
= new ArrayList
<T
>();
317 if(numberOfResults
> 0) { // no point checking again
318 results
= dao
.getIncludes(definedTerms
, pageSize
, pageNumber
,propertyPaths
);
321 return new DefaultPagerImpl
<T
>(pageNumber
, numberOfResults
, pageSize
, results
);
324 public Pager
<Media
> getMedia(DefinedTermBase definedTerm
, Integer pageSize
, Integer pageNumber
) {
325 Integer numberOfResults
= dao
.countMedia(definedTerm
);
327 List
<Media
> results
= new ArrayList
<Media
>();
328 if(numberOfResults
> 0) { // no point checking again
329 results
= dao
.getMedia(definedTerm
, pageSize
, pageNumber
);
332 return new DefaultPagerImpl
<Media
>(pageNumber
, numberOfResults
, pageSize
, results
);
335 public <T
extends DefinedTermBase
> Pager
<T
> getPartOf(Set
<T
> definedTerms
,Integer pageSize
, Integer pageNumber
, List
<String
> propertyPaths
) {
336 Integer numberOfResults
= dao
.countPartOf(definedTerms
);
338 List
<T
> results
= new ArrayList
<T
>();
339 if(numberOfResults
> 0) { // no point checking again
340 results
= dao
.getPartOf(definedTerms
, pageSize
, pageNumber
, propertyPaths
);
343 return new DefaultPagerImpl
<T
>(pageNumber
, numberOfResults
, pageSize
, results
);
346 public Pager
<NamedArea
> list(NamedAreaLevel level
, NamedAreaType type
, Integer pageSize
, Integer pageNumber
,
347 List
<OrderHint
> orderHints
, List
<String
> propertyPaths
) {
348 Integer numberOfResults
= dao
.count(level
, type
);
350 List
<NamedArea
> results
= new ArrayList
<NamedArea
>();
351 if (numberOfResults
> 0) { // no point checking again
352 results
= dao
.list(level
, type
, pageSize
, pageNumber
, orderHints
, propertyPaths
);
355 return new DefaultPagerImpl
<NamedArea
>(pageNumber
, numberOfResults
, pageSize
, results
);
358 public <T
extends DefinedTermBase
> Pager
<T
> findByRepresentationText(String label
, Class
<T
> clazz
, Integer pageSize
, Integer pageNumber
) {
359 Integer numberOfResults
= dao
.countDefinedTermByRepresentationText(label
,clazz
);
361 List
<T
> results
= new ArrayList
<T
>();
362 if(numberOfResults
> 0) { // no point checking again
363 results
= dao
.getDefinedTermByRepresentationText(label
, clazz
, pageSize
, pageNumber
);
366 return new DefaultPagerImpl
<T
>(pageNumber
, numberOfResults
, pageSize
, results
);