Project

General

Profile

Download (8.69 KB) Statistics
| Branch: | Tag: | Revision:
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.common.IProgressMonitor;
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.Representation;
35
import eu.etaxonomy.cdm.model.common.TermBase;
36
import eu.etaxonomy.cdm.model.common.TermVocabulary;
37
import eu.etaxonomy.cdm.model.location.NamedArea;
38
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
39
import eu.etaxonomy.cdm.model.location.NamedAreaType;
40
import eu.etaxonomy.cdm.model.location.TdwgArea;
41
import eu.etaxonomy.cdm.model.media.Media;
42
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
43
import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
44
import eu.etaxonomy.cdm.persistence.dao.common.ILanguageStringBaseDao;
45
import eu.etaxonomy.cdm.persistence.dao.common.ILanguageStringDao;
46
import eu.etaxonomy.cdm.persistence.dao.common.IRepresentationDao;
47
import eu.etaxonomy.cdm.persistence.query.OrderHint;
48
import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
49

    
50
@Service
51
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
52
public class TermServiceImpl extends IdentifiableServiceBase<DefinedTermBase,IDefinedTermDao> implements ITermService{
53
	private static final Logger logger = Logger.getLogger(TermServiceImpl.class);
54
	private ILanguageStringDao languageStringDao;
55
	@Autowired
56
	@Qualifier("langStrBaseDao")
57
	private ILanguageStringBaseDao languageStringBaseDao;
58
	private IRepresentationDao representationDao;
59
	
60
	@Autowired
61
	public void setLanguageStringDao(ILanguageStringDao languageStringDao) {
62
		this.languageStringDao = languageStringDao;
63
	} 
64
	
65
	@Autowired
66
	public void setRepresentationDao(IRepresentationDao representationDao) {
67
		this.representationDao = representationDao;
68
	}
69
	
70
	@Autowired
71
	protected void setDao(IDefinedTermDao dao) {
72
		this.dao = dao;
73
	}
74
		
75
	public <TERM extends DefinedTermBase> List<TERM> listByTermClass(Class<TERM> clazz, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
76
		return dao.listByTermClass(clazz, limit, start, orderHints, propertyPaths);
77
	}	
78
	
79
	/**
80
	 * @see eu.etaxonomy.cdm.api.service.ITermService#getTermByUri(java.lang.String)
81
	 */
82
	public DefinedTermBase getByUri(String uri) {
83
		//FIXME transformation from URI to UUID
84
		return dao.findByUri(uri);
85
	}
86
	
87
	public Language getLanguageByIso(String iso639) {
88
		return dao.getLanguageByIso(iso639);
89
	}
90
	
91
	public List<Language> getLanguagesByLocale(Enumeration<Locale> locales){
92
		return dao.getLanguagesByLocale(locales);
93
	}
94

    
95
	/**
96
	 *  (non-Javadoc)
97
	 * @see eu.etaxonomy.cdm.api.service.ITermService#getAreaByTdwgAbbreviation(java.lang.String)
98
	 */
99
	public NamedArea getAreaByTdwgAbbreviation(String tdwgAbbreviation) {
100
		//FIXME this is just a placeholder until it is decided where to implement this method 
101
		//(see also FIXMEs in TdwgArea)
102
		return TdwgArea.getAreaByTdwgAbbreviation(tdwgAbbreviation);
103
	}
104

    
105
	public <T extends DefinedTermBase> Pager<T> getGeneralizationOf(T definedTerm, Integer pageSize, Integer pageNumber) {
106
        Integer numberOfResults = dao.countGeneralizationOf(definedTerm);
107
		
108
		List<T> results = new ArrayList<T>();
109
		if(numberOfResults > 0) { // no point checking again  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
110
			results = dao.getGeneralizationOf(definedTerm, pageSize, pageNumber); 
111
		}
112
		
113
		return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
114
	}
115

    
116
	public <T extends DefinedTermBase> Pager<T> getIncludes(Set<T> definedTerms, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
117
        Integer numberOfResults = dao.countIncludes(definedTerms);
118
		
119
		List<T> results = new ArrayList<T>();
120
		if(numberOfResults > 0) { // no point checking again  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
121
			results = dao.getIncludes(definedTerms, pageSize, pageNumber,propertyPaths); 
122
		}
123
		
124
		return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
125
	}
126

    
127
	public Pager<Media> getMedia(DefinedTermBase definedTerm, Integer pageSize,	Integer pageNumber) {
128
        Integer numberOfResults = dao.countMedia(definedTerm);
129
		
130
		List<Media> results = new ArrayList<Media>();
131
		if(numberOfResults > 0) { // no point checking again  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
132
			results = dao.getMedia(definedTerm, pageSize, pageNumber); 
133
		}
134
		
135
		return new DefaultPagerImpl<Media>(pageNumber, numberOfResults, pageSize, results);
136
	}
137

    
138
	public <T extends DefinedTermBase> Pager<T> getPartOf(Set<T> definedTerms,Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
139
        Integer numberOfResults = dao.countPartOf(definedTerms);
140
		
141
		List<T> results = new ArrayList<T>();
142
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
143
			results = dao.getPartOf(definedTerms, pageSize, pageNumber, propertyPaths); 
144
		}
145
		
146
		return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
147
	}
148

    
149
	public Pager<NamedArea> list(NamedAreaLevel level, NamedAreaType type, Integer pageSize, Integer pageNumber,
150
			List<OrderHint> orderHints, List<String> propertyPaths) {
151
		Integer numberOfResults = dao.count(level, type);
152

    
153
		List<NamedArea> results = new ArrayList<NamedArea>();
154
		if (numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
155
			results = dao.list(level, type, pageSize, pageNumber, orderHints, propertyPaths);
156
		}
157

    
158
		return new DefaultPagerImpl<NamedArea>(pageNumber, numberOfResults, pageSize, results);
159
	}
160

    
161
	public <T extends DefinedTermBase> Pager<T> findByRepresentationText(String label, Class<T> clazz, Integer pageSize, Integer pageNumber) {
162
        Integer numberOfResults = dao.countDefinedTermByRepresentationText(label,clazz);
163
		
164
		List<T> results = new ArrayList<T>();
165
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
166
			results = dao.getDefinedTermByRepresentationText(label, clazz, pageSize, pageNumber);
167
		}
168
		
169
		return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
170
	}
171
	
172
	public <T extends DefinedTermBase> Pager<T> findByRepresentationAbbreviation(String abbrev, Class<T> clazz, Integer pageSize, Integer pageNumber) {
173
        Integer numberOfResults = dao.countDefinedTermByRepresentationAbbrev(abbrev,clazz);
174
		
175
		List<T> results = new ArrayList<T>();
176
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
177
			results = dao.getDefinedTermByRepresentationAbbrev(abbrev, clazz, pageSize, pageNumber);
178
		}
179
		
180
		return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
181
	}
182

    
183
	public List<LanguageString> getAllLanguageStrings(int limit, int start) {
184
		return languageStringDao.list(limit, start);
185
	}
186

    
187
	public List<Representation> getAllRepresentations(int limit, int start) {
188
		return representationDao.list(limit,start);
189
	}
190

    
191
	public UUID saveLanguageData(LanguageStringBase languageData) {
192
		return languageStringBaseDao.save(languageData);
193
	}
194

    
195

    
196
	/* (non-Javadoc)
197
	 * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache(java.lang.Integer, eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy)
198
	 */
199
	@Override
200
	public void updateTitleCache(Class<? extends DefinedTermBase> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<DefinedTermBase> cacheStrategy, IProgressMonitor monitor) {
201
		//TODO shouldnt this be TermBase instead of DefinedTermBase
202
		if (clazz == null){
203
			clazz = DefinedTermBase.class;
204
		}
205
		super.updateTitleCacheImpl(clazz, stepSize, cacheStrategy, monitor);
206
	}
207

    
208
}
(72-72/76)