Project

General

Profile

Download (6.94 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.ArrayList;
13
import java.util.List;
14
import java.util.UUID;
15

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

    
25
import eu.etaxonomy.cdm.model.agent.Address;
26
import eu.etaxonomy.cdm.model.agent.AgentBase;
27
import eu.etaxonomy.cdm.model.agent.Institution;
28
import eu.etaxonomy.cdm.model.agent.InstitutionalMembership;
29
import eu.etaxonomy.cdm.model.agent.Person;
30
import eu.etaxonomy.cdm.model.agent.Team;
31
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
32
import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
33
import eu.etaxonomy.cdm.model.view.AuditEvent;
34
import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;
35
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
36

    
37

    
38
@Repository
39
public class AgentDaoImpl extends IdentifiableDaoBase<AgentBase> implements IAgentDao{
40
	
41
	@SuppressWarnings("unused")
42
	private static final Logger logger = Logger.getLogger(AgentDaoImpl.class);
43

    
44
	public AgentDaoImpl() {
45
		super(AgentBase.class);
46
		indexedClasses = new Class[3];
47
		indexedClasses[0] = Institution.class;
48
		indexedClasses[1] = Person.class;
49
		indexedClasses[2] = Team.class;
50
	}
51

    
52
	public List<Institution> getInstitutionByCode(String code) {
53
		AuditEvent auditEvent = getAuditEventFromContext();
54
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
55
		    Criteria crit = getSession().createCriteria(Institution.class);
56
    		crit.add(Restrictions.eq("code", code));
57
 	    	return (List<Institution>)crit.list();
58
		} else {
59
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(Institution.class,auditEvent.getRevisionNumber());
60
			query.add(AuditEntity.property("code").eq(code));
61
			return (List<Institution>)query.getResultList();
62
		}
63
	}
64

    
65
	public int countInstitutionalMemberships(Person person) {
66
		AuditEvent auditEvent = getAuditEventFromContext();
67
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
68
		    Query query = getSession().createQuery("select count(institutionalMembership) from InstitutionalMembership institutionalMembership where institutionalMembership.person = :person");
69
		    query.setParameter("person", person);
70
		    return ((Long)query.uniqueResult()).intValue();
71
		} else {
72
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(InstitutionalMembership.class,auditEvent.getRevisionNumber());
73
			query.add(AuditEntity.relatedId("person").eq(person.getId()));
74
			query.addProjection(AuditEntity.id().count("id"));
75
			return ((Long)query.getSingleResult()).intValue();
76
		}
77
	}
78

    
79
	public int countMembers(Team team) {
80
		checkNotInPriorView("AgentDaoImpl.countMembers(Team team)");
81
		Query query = getSession().createQuery("select count(teamMember) from Team team join team.teamMembers teamMember where team = :team");
82
		query.setParameter("team", team);
83
		return ((Long)query.uniqueResult()).intValue();
84
	}
85

    
86
	public List<InstitutionalMembership> getInstitutionalMemberships(Person person, Integer pageSize, Integer pageNumber) {
87
		AuditEvent auditEvent = getAuditEventFromContext();
88
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
89
		    Query query = getSession().createQuery("select institutionalMembership from InstitutionalMembership institutionalMembership left join fetch institutionalMembership.institute where institutionalMembership.person = :person");
90
		    query.setParameter("person", person);
91
		    setPagingParameter(query, pageSize, pageNumber);
92
			return (List<InstitutionalMembership>)query.list();
93
		} else {
94
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(InstitutionalMembership.class,auditEvent.getRevisionNumber());
95
			query.add(AuditEntity.relatedId("person").eq(person.getId()));
96
			setPagingParameter(query, pageSize, pageNumber);
97
			return (List<InstitutionalMembership>)query.getResultList();
98
		}
99
	}
100

    
101
	public List<Person> getMembers(Team team, Integer pageSize,	Integer pageNumber) {
102
		checkNotInPriorView("AgentDaoImpl.getMembers(Team team, Integer pageSize,	Integer pageNumber)");
103
		Query query = getSession().createQuery("select teamMember from Team team join team.teamMembers teamMember where team = :team order by sortindex");
104
		query.setParameter("team", team);
105
		//query.addOrder( Order.asc("sortindex") );
106
		setPagingParameter(query, pageSize, pageNumber);
107
		return (List<Person>)query.list();
108
	}
109

    
110
	public Integer countAddresses(AgentBase agent) {
111
		checkNotInPriorView("AgentDaoImpl.countAddresses(AgentBase agent)");
112
		Query query = getSession().createQuery("select count(address) from AgentBase agent join agent.contact.addresses address where agent = :agent");
113
		query.setParameter("agent", agent);
114
		return ((Long)query.uniqueResult()).intValue();
115
	}
116

    
117
	public List<Address> getAddresses(AgentBase agent, Integer pageSize,Integer pageNumber) {
118
		checkNotInPriorView("AgentDaoImpl.getAddresses(AgentBase agent, Integer pageSize,Integer pageNumber)");
119
		Query query = getSession().createQuery("select address from AgentBase agent join agent.contact.addresses address where agent = :agent");
120
		query.setParameter("agent", agent);
121
		setPagingParameter(query, pageSize, pageNumber);
122
		return (List<Address>)query.list();
123
	}
124

    
125
	/* (non-Javadoc)
126
	 * @see eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao#getTeamOrPersonBaseUuidAndNomenclaturalTitle()
127
	 */
128
	public List<UuidAndTitleCache<Team>> getTeamUuidAndNomenclaturalTitle() {
129
		List<UuidAndTitleCache<Team>> list = new ArrayList<UuidAndTitleCache<Team>>();
130
		Session session = getSession();
131
		
132
		Query query = session.createQuery("select uuid, nomenclaturalTitle from " + type.getSimpleName() + " where dtype = 'Team'");
133
		
134
		List<Object[]> result = query.list();
135
		
136
		for(Object[] object : result){
137
			list.add(new UuidAndTitleCache<Team>(Team.class, (UUID) object[0], (String) object[1]));
138
		}
139
		
140
		return list;
141
	}
142

    
143
	/* (non-Javadoc)
144
	 * @see eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao#getTeamUuidAndTitleCache()
145
	 */
146
	public List<UuidAndTitleCache<Person>> getPersonUuidAndNomenclaturalTitle() {
147
		List<UuidAndTitleCache<Person>> list = new ArrayList<UuidAndTitleCache<Person>>();
148
		Session session = getSession();
149
		
150
		Query query = session.createQuery("select uuid, nomenclaturalTitle from " + type.getSimpleName() + " where dtype = 'Person'");
151
		
152
		List<Object[]> result = query.list();
153
		
154
		for(Object[] object : result){
155
			list.add(new UuidAndTitleCache<Person>(Person.class, (UUID) object[0], (String) object[1]));
156
		}
157
		
158
		return list;
159
	}
160
}
    (1-1/1)