Project

General

Profile

Download (8.57 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.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
import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
46

    
47
@Service
48
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
49
public class TermServiceImpl extends IdentifiableServiceBase<DefinedTermBase,IDefinedTermDao> implements ITermService{
50
	@SuppressWarnings("unused")
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  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
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  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
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  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
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 //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
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 //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
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 //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
164
			results = dao.getDefinedTermByRepresentationText(label, clazz, pageSize, pageNumber);
165
		}
166
		
167
		return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
168
	}
169
	
170
	public <T extends DefinedTermBase> Pager<T> findByRepresentationAbbreviation(String abbrev, Class<T> clazz, Integer pageSize, Integer pageNumber) {
171
        Integer numberOfResults = dao.countDefinedTermByRepresentationAbbrev(abbrev,clazz);
172
		
173
		List<T> results = new ArrayList<T>();
174
		if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
175
			results = dao.getDefinedTermByRepresentationAbbrev(abbrev, clazz, pageSize, pageNumber);
176
		}
177
		
178
		return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
179
	}
180

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

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

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

    
193

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

    
206
}
(72-72/76)