Project

General

Profile

Download (5.97 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy 
4
* http://www.e-taxonomy.eu
5
* 
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.cdm.persistence.dao.hibernate.agent;
11

    
12
import java.util.List;
13

    
14
import org.apache.log4j.Logger;
15
import org.hibernate.Criteria;
16
import org.hibernate.Query;
17
import org.hibernate.criterion.Restrictions;
18
import org.hibernate.envers.query.AuditEntity;
19
import org.hibernate.envers.query.AuditQuery;
20
import org.springframework.stereotype.Repository;
21

    
22
import eu.etaxonomy.cdm.model.agent.Address;
23
import eu.etaxonomy.cdm.model.agent.AgentBase;
24
import eu.etaxonomy.cdm.model.agent.Institution;
25
import eu.etaxonomy.cdm.model.agent.InstitutionalMembership;
26
import eu.etaxonomy.cdm.model.agent.Person;
27
import eu.etaxonomy.cdm.model.agent.Team;
28
import eu.etaxonomy.cdm.model.view.AuditEvent;
29
import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;
30
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
31

    
32

    
33
@Repository
34
public class AgentDaoImpl extends IdentifiableDaoBase<AgentBase> implements IAgentDao{
35
	
36
	@SuppressWarnings("unused")
37
	private static final Logger logger = Logger.getLogger(AgentDaoImpl.class);
38

    
39
	public AgentDaoImpl() {
40
		super(AgentBase.class); 
41
	}
42

    
43
	public List<Institution> getInstitutionByCode(String code) {
44
		AuditEvent auditEvent = getAuditEventFromContext();
45
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
46
		    Criteria crit = getSession().createCriteria(Institution.class);
47
    		crit.add(Restrictions.eq("code", code));
48
 	    	return (List<Institution>)crit.list();
49
		} else {
50
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(Institution.class,auditEvent.getRevisionNumber());
51
			query.add(AuditEntity.property("code").eq(code));
52
			return (List<Institution>)query.getResultList();
53
		}
54
	}
55

    
56
	public int countInstitutionalMemberships(Person person) {
57
		AuditEvent auditEvent = getAuditEventFromContext();
58
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
59
		    Query query = getSession().createQuery("select count(institutionalMembership) from InstitutionalMembership institutionalMembership where institutionalMembership.person = :person");
60
		    query.setParameter("person", person);
61
		    return ((Long)query.uniqueResult()).intValue();
62
		} else {
63
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(InstitutionalMembership.class,auditEvent.getRevisionNumber());
64
			query.add(AuditEntity.relatedId("person").eq(person.getId()));
65
			query.addProjection(AuditEntity.id().count("id"));
66
			return ((Long)query.getSingleResult()).intValue();
67
		}
68
	}
69

    
70
	public int countMembers(Team team) {
71
		checkNotInPriorView("AgentDaoImpl.countMembers(Team team)");
72
		Query query = getSession().createQuery("select count(teamMember) from Team team join team.teamMembers teamMember where team = :team");
73
		query.setParameter("team", team);
74
		return ((Long)query.uniqueResult()).intValue();
75
	}
76

    
77
	public List<InstitutionalMembership> getInstitutionalMemberships(Person person, Integer pageSize, Integer pageNumber) {
78
		AuditEvent auditEvent = getAuditEventFromContext();
79
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
80
		    Query query = getSession().createQuery("select institutionalMembership from InstitutionalMembership institutionalMembership left join fetch institutionalMembership.institute where institutionalMembership.person = :person");
81
		    query.setParameter("person", person);
82
		    if(pageSize != null) {
83
		        query.setMaxResults(pageSize);
84
		        if(pageNumber != null) {
85
		            query.setFirstResult(pageNumber * pageSize);
86
		        } else {
87
		    	    query.setFirstResult(0);
88
		        }
89
		    }
90
		
91
		    return (List<InstitutionalMembership>)query.list();
92
		} else {
93
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(InstitutionalMembership.class,auditEvent.getRevisionNumber());
94
			query.add(AuditEntity.relatedId("person").eq(person.getId()));
95
			
96
			if(pageSize != null) {
97
		        query.setMaxResults(pageSize);
98
		        if(pageNumber != null) {
99
		            query.setFirstResult(pageNumber * pageSize);
100
		        } else {
101
		    	    query.setFirstResult(0);
102
		        }
103
		    }
104
			return (List<InstitutionalMembership>)query.getResultList();
105
		}
106
	}
107

    
108
	public List<Person> getMembers(Team team, Integer pageSize,	Integer pageNumber) {
109
		checkNotInPriorView("AgentDaoImpl.getMembers(Team team, Integer pageSize,	Integer pageNumber)");
110
		Query query = getSession().createQuery("select teamMember from Team team join team.teamMembers teamMember where team = :team");
111
		query.setParameter("team", team);
112
		
113
		if(pageSize != null) {
114
		    query.setMaxResults(pageSize);
115
		    if(pageNumber != null) {
116
		        query.setFirstResult(pageNumber * pageSize);
117
		    } else {
118
		    	query.setFirstResult(0);
119
		    }
120
		}
121
		return (List<Person>)query.list();
122
	}
123

    
124
	public Integer countAddresses(AgentBase agent) {
125
		checkNotInPriorView("AgentDaoImpl.countAddresses(AgentBase agent)");
126
		Query query = getSession().createQuery("select count(address) from AgentBase agent join agent.contact.addresses address where agent = :agent");
127
		query.setParameter("agent", agent);
128
		return ((Long)query.uniqueResult()).intValue();
129
	}
130

    
131
	public List<Address> getAddresses(AgentBase agent, Integer pageSize,Integer pageNumber) {
132
		checkNotInPriorView("AgentDaoImpl.getAddresses(AgentBase agent, Integer pageSize,Integer pageNumber)");
133
		Query query = getSession().createQuery("select address from AgentBase agent join agent.contact.addresses address where agent = :agent");
134
		query.setParameter("agent", agent);
135
		
136
		if(pageSize != null) {
137
		    query.setMaxResults(pageSize);
138
		    if(pageNumber != null) {
139
		        query.setFirstResult(pageNumber * pageSize);
140
		    } else {
141
		    	query.setFirstResult(0);
142
		    }
143
		}
144
		return (List<Address>)query.list();
145
	}
146
}
    (1-1/1)