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