Committing large number of changes relating to versioning implementation (#108)
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / agent / AgentDaoImpl.java
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.AgentBase;
23 import eu.etaxonomy.cdm.model.agent.Institution;
24 import eu.etaxonomy.cdm.model.agent.InstitutionalMembership;
25 import eu.etaxonomy.cdm.model.agent.Person;
26 import eu.etaxonomy.cdm.model.agent.Team;
27 import eu.etaxonomy.cdm.model.view.AuditEvent;
28 import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;
29 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
30
31
32 @Repository
33 public class AgentDaoImpl extends IdentifiableDaoBase<AgentBase> implements IAgentDao{
34
35 @SuppressWarnings("unused")
36 private static final Logger logger = Logger.getLogger(AgentDaoImpl.class);
37
38 public AgentDaoImpl() {
39 super(AgentBase.class);
40 }
41
42 public List<Institution> getInstitutionByCode(String code) {
43 AuditEvent auditEvent = getAuditEventFromContext();
44 if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
45 Criteria crit = getSession().createCriteria(Institution.class);
46 crit.add(Restrictions.eq("code", code));
47 return (List<Institution>)crit.list();
48 } else {
49 AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(Institution.class,auditEvent.getRevisionNumber());
50 query.add(AuditEntity.property("code").eq(code));
51 return (List<Institution>)query.getResultList();
52 }
53 }
54
55 public int countInstitutionalMemberships(Person person) {
56 AuditEvent auditEvent = getAuditEventFromContext();
57 if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
58 Query query = getSession().createQuery("select count(institutionalMembership) from InstitutionalMembership institutionalMembership where institutionalMembership.person = :person");
59 query.setParameter("person", person);
60 return ((Long)query.uniqueResult()).intValue();
61 } else {
62 AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(InstitutionalMembership.class,auditEvent.getRevisionNumber());
63 query.add(AuditEntity.relatedId("person").eq(person.getId()));
64 query.addProjection(AuditEntity.id().count("id"));
65 return ((Long)query.getSingleResult()).intValue();
66 }
67 }
68
69 public int countMembers(Team team) {
70 checkNotInPriorView("AgentDaoImpl.countMembers(Team team)");
71 Query query = getSession().createQuery("select count(teamMember) from Team team join team.teamMembers teamMember where team = :team");
72 query.setParameter("team", team);
73 return ((Long)query.uniqueResult()).intValue();
74 }
75
76 public List<InstitutionalMembership> getInstitutionalMemberships(Person person, Integer pageSize, Integer pageNumber) {
77 AuditEvent auditEvent = getAuditEventFromContext();
78 if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
79 Query query = getSession().createQuery("select institutionalMembership from InstitutionalMembership institutionalMembership left join fetch institutionalMembership.institute where institutionalMembership.person = :person");
80 query.setParameter("person", person);
81 if(pageSize != null) {
82 query.setMaxResults(pageSize);
83 if(pageNumber != null) {
84 query.setFirstResult(pageNumber * pageSize);
85 } else {
86 query.setFirstResult(0);
87 }
88 }
89
90 return (List<InstitutionalMembership>)query.list();
91 } else {
92 AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(InstitutionalMembership.class,auditEvent.getRevisionNumber());
93 query.add(AuditEntity.relatedId("person").eq(person.getId()));
94
95 if(pageSize != null) {
96 query.setMaxResults(pageSize);
97 if(pageNumber != null) {
98 query.setFirstResult(pageNumber * pageSize);
99 } else {
100 query.setFirstResult(0);
101 }
102 }
103 return (List<InstitutionalMembership>)query.getResultList();
104 }
105 }
106
107 public List<Person> getMembers(Team team, Integer pageSize, Integer pageNumber) {
108 checkNotInPriorView("AgentDaoImpl.getMembers(Team team, Integer pageSize, Integer pageNumber)");
109 Query query = getSession().createQuery("select teamMember from Team team join team.teamMembers teamMember where team = :team");
110 query.setParameter("team", team);
111
112 if(pageSize != null) {
113 query.setMaxResults(pageSize);
114 if(pageNumber != null) {
115 query.setFirstResult(pageNumber * pageSize);
116 } else {
117 query.setFirstResult(0);
118 }
119 }
120 return (List<Person>)query.list();
121 }
122 }