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
.Enumeration
;
15 import java
.util
.List
;
16 import java
.util
.Locale
;
18 import java
.util
.UUID
;
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
;
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
;
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
;
54 @Qualifier("langStrBaseDao")
55 private ILanguageStringBaseDao languageStringBaseDao
;
56 private IRepresentationDao representationDao
;
59 public void setLanguageStringDao(ILanguageStringDao languageStringDao
) {
60 this.languageStringDao
= languageStringDao
;
64 public void setRepresentationDao(IRepresentationDao representationDao
) {
65 this.representationDao
= representationDao
;
69 protected void setDao(IDefinedTermDao dao
) {
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
);
78 * @see eu.etaxonomy.cdm.api.service.ITermService#getTermByUri(java.lang.String)
80 public DefinedTermBase
getByUri(String uri
) {
81 //FIXME transformation from URI to UUID
82 return dao
.findByUri(uri
);
85 public Language
getLanguageByIso(String iso639
) {
86 return dao
.getLanguageByIso(iso639
);
89 public List
<Language
> getLanguagesByLocale(Enumeration
<Locale
> locales
){
90 return dao
.getLanguagesByLocale(locales
);
95 * @see eu.etaxonomy.cdm.api.service.ITermService#getAreaByTdwgAbbreviation(java.lang.String)
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
);
103 public <T
extends DefinedTermBase
> Pager
<T
> getGeneralizationOf(T definedTerm
, Integer pageSize
, Integer pageNumber
) {
104 Integer numberOfResults
= dao
.countGeneralizationOf(definedTerm
);
106 List
<T
> results
= new ArrayList
<T
>();
107 if(numberOfResults
> 0) { // no point checking again
108 results
= dao
.getGeneralizationOf(definedTerm
, pageSize
, pageNumber
);
111 return new DefaultPagerImpl
<T
>(pageNumber
, numberOfResults
, pageSize
, results
);
114 public <T
extends DefinedTermBase
> Pager
<T
> getIncludes(Set
<T
> definedTerms
, Integer pageSize
, Integer pageNumber
, List
<String
> propertyPaths
) {
115 Integer numberOfResults
= dao
.countIncludes(definedTerms
);
117 List
<T
> results
= new ArrayList
<T
>();
118 if(numberOfResults
> 0) { // no point checking again
119 results
= dao
.getIncludes(definedTerms
, pageSize
, pageNumber
,propertyPaths
);
122 return new DefaultPagerImpl
<T
>(pageNumber
, numberOfResults
, pageSize
, results
);
125 public Pager
<Media
> getMedia(DefinedTermBase definedTerm
, Integer pageSize
, Integer pageNumber
) {
126 Integer numberOfResults
= dao
.countMedia(definedTerm
);
128 List
<Media
> results
= new ArrayList
<Media
>();
129 if(numberOfResults
> 0) { // no point checking again
130 results
= dao
.getMedia(definedTerm
, pageSize
, pageNumber
);
133 return new DefaultPagerImpl
<Media
>(pageNumber
, numberOfResults
, pageSize
, results
);
136 public <T
extends DefinedTermBase
> Pager
<T
> getPartOf(Set
<T
> definedTerms
,Integer pageSize
, Integer pageNumber
, List
<String
> propertyPaths
) {
137 Integer numberOfResults
= dao
.countPartOf(definedTerms
);
139 List
<T
> results
= new ArrayList
<T
>();
140 if(numberOfResults
> 0) { // no point checking again
141 results
= dao
.getPartOf(definedTerms
, pageSize
, pageNumber
, propertyPaths
);
144 return new DefaultPagerImpl
<T
>(pageNumber
, numberOfResults
, pageSize
, results
);
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
);
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
);
156 return new DefaultPagerImpl
<NamedArea
>(pageNumber
, numberOfResults
, pageSize
, results
);
159 public <T
extends DefinedTermBase
> Pager
<T
> findByRepresentationText(String label
, Class
<T
> clazz
, Integer pageSize
, Integer pageNumber
) {
160 Integer numberOfResults
= dao
.countDefinedTermByRepresentationText(label
,clazz
);
162 List
<T
> results
= new ArrayList
<T
>();
163 if(numberOfResults
> 0) { // no point checking again
164 results
= dao
.getDefinedTermByRepresentationText(label
, clazz
, pageSize
, pageNumber
);
167 return new DefaultPagerImpl
<T
>(pageNumber
, numberOfResults
, pageSize
, results
);
170 public List
<LanguageString
> getAllLanguageStrings(int limit
, int start
) {
171 return languageStringDao
.list(limit
, start
);
174 public List
<Representation
> getAllRepresentations(int limit
, int start
) {
175 return representationDao
.list(limit
,start
);
178 public UUID
saveLanguageData(LanguageStringBase languageData
) {
179 return languageStringBaseDao
.save(languageData
);
183 * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache()
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);