Project

General

Profile

Download (5.16 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.List;
15

    
16
import org.apache.log4j.Logger;
17
import org.springframework.beans.factory.annotation.Autowired;
18
import org.springframework.stereotype.Service;
19
import org.springframework.transaction.annotation.Propagation;
20
import org.springframework.transaction.annotation.Transactional;
21

    
22
import eu.etaxonomy.cdm.api.service.pager.Pager;
23
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
24
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
25
import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
26
import eu.etaxonomy.cdm.model.media.Media;
27
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
28
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
29
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
30
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
31
import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
32
import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao;
33
import eu.etaxonomy.cdm.persistence.query.OrderHint;
34

    
35
/**
36
 * @author a.babadshanjan
37
 * @created 01.09.2008
38
 */
39
@Service
40
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
41
public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObservationBase,IOccurrenceDao> implements IOccurrenceService {
42

    
43
	static private final Logger logger = Logger.getLogger(OccurrenceServiceImpl.class);
44
	
45
	@Autowired
46
	private IDefinedTermDao definedTermDao;	
47

    
48
	public OccurrenceServiceImpl() {
49
		logger.debug("Load OccurrenceService Bean");
50
	}
51
	
52
	/* (non-Javadoc)
53
	 * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#generateTitleCache()
54
	 */
55
	public void generateTitleCache() {
56
		// TODO Auto-generated method stub
57
		logger.warn("Not yet implemented");
58
	}
59

    
60
	/**
61
	 * FIXME Candidate for harmonization
62
	 * move to termService
63
	 */
64
	public WaterbodyOrCountry getCountryByIso(String iso639) {
65
		return this.definedTermDao.getCountryByIso(iso639);
66
		
67
	}
68

    
69
	/**
70
	 * FIXME Candidate for harmonization
71
	 * move to termService
72
	 */
73
	public List<WaterbodyOrCountry> getWaterbodyOrCountryByName(String name) {
74
		List<? extends DefinedTermBase> terms = this.definedTermDao.getDefinedTermByRepresentationText(name, WaterbodyOrCountry.class);
75
		List<WaterbodyOrCountry> countries = new ArrayList<WaterbodyOrCountry>();
76
		for (int i=0;i<terms.size();i++){
77
			countries.add((WaterbodyOrCountry)terms.get(i));
78
		}
79
		return countries;
80
	}
81

    
82
	@Autowired
83
	protected void setDao(IOccurrenceDao dao) {
84
		this.dao = dao;
85
	}
86

    
87
	public Pager<DerivationEvent> getDerivationEvents(SpecimenOrObservationBase occurence, Integer pageSize,Integer pageNumber, List<String> propertyPaths) {
88
        Integer numberOfResults = dao.countDerivationEvents(occurence);
89
		
90
		List<DerivationEvent> results = new ArrayList<DerivationEvent>();
91
		if(numberOfResults > 0) { // no point checking again
92
			results = dao.getDerivationEvents(occurence, pageSize, pageNumber,propertyPaths); 
93
		}
94
		
95
		return new DefaultPagerImpl<DerivationEvent>(pageNumber, numberOfResults, pageSize, results);
96
	}
97

    
98
	public Pager<DeterminationEvent> getDeterminations(SpecimenOrObservationBase occurrence, TaxonBase taxonBase, Integer pageSize,Integer pageNumber, List<String> propertyPaths) {
99
        Integer numberOfResults = dao.countDeterminations(occurrence, taxonBase);
100
		
101
		List<DeterminationEvent> results = new ArrayList<DeterminationEvent>();
102
		if(numberOfResults > 0) { // no point checking again
103
			results = dao.getDeterminations(occurrence,taxonBase, pageSize, pageNumber, propertyPaths); 
104
		}
105
		
106
		return new DefaultPagerImpl<DeterminationEvent>(pageNumber, numberOfResults, pageSize, results);
107
	}
108

    
109
	public Pager<Media> getMedia(SpecimenOrObservationBase occurence,Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
110
        Integer numberOfResults = dao.countMedia(occurence);
111
		
112
		List<Media> results = new ArrayList<Media>();
113
		if(numberOfResults > 0) { // no point checking again
114
			results = dao.getMedia(occurence, pageSize, pageNumber, propertyPaths); 
115
		}
116
		
117
		return new DefaultPagerImpl<Media>(pageNumber, numberOfResults, pageSize, results);
118
	}
119

    
120
	public Pager<SpecimenOrObservationBase> list(Class<? extends SpecimenOrObservationBase> type, TaxonBase determinedAs, Integer pageSize, Integer pageNumber,	List<OrderHint> orderHints, List<String> propertyPaths) {
121
		Integer numberOfResults = dao.count(type,determinedAs);
122
		List<SpecimenOrObservationBase> results = new ArrayList<SpecimenOrObservationBase>();
123
		pageNumber = pageNumber == null ? 0 : pageNumber;
124
		if(numberOfResults > 0) { // no point checking again
125
			Integer start = pageSize == null ? 0 : pageSize * pageNumber;
126
			results = dao.list(type,determinedAs, pageSize, start, orderHints,propertyPaths);
127
		}
128
		return new DefaultPagerImpl<SpecimenOrObservationBase>(pageNumber, numberOfResults, pageSize, results);	}
129
}
(53-53/65)