deleted unused dependencies from cdmlib-print und parent pom
[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.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.common.UuidAndTitleCache;
32 import eu.etaxonomy.cdm.model.view.AuditEvent;
33 import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;
34 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
35
36
37 @Repository
38 public class AgentDaoImpl extends IdentifiableDaoBase<AgentBase> implements IAgentDao{
39
40 @SuppressWarnings("unused")
41 private static final Logger logger = Logger.getLogger(AgentDaoImpl.class);
42
43 public AgentDaoImpl() {
44 super(AgentBase.class);
45 indexedClasses = new Class[3];
46 indexedClasses[0] = Institution.class;
47 indexedClasses[1] = Person.class;
48 indexedClasses[2] = Team.class;
49 }
50
51 public List<Institution> getInstitutionByCode(String code) {
52 AuditEvent auditEvent = getAuditEventFromContext();
53 if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
54 Criteria crit = getSession().createCriteria(Institution.class);
55 crit.add(Restrictions.eq("code", code));
56 return (List<Institution>)crit.list();
57 } else {
58 AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(Institution.class,auditEvent.getRevisionNumber());
59 query.add(AuditEntity.property("code").eq(code));
60 return (List<Institution>)query.getResultList();
61 }
62 }
63
64 public int countInstitutionalMemberships(Person person) {
65 AuditEvent auditEvent = getAuditEventFromContext();
66 if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
67 Query query = getSession().createQuery("select count(institutionalMembership) from InstitutionalMembership institutionalMembership where institutionalMembership.person = :person");
68 query.setParameter("person", person);
69 return ((Long)query.uniqueResult()).intValue();
70 } else {
71 AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(InstitutionalMembership.class,auditEvent.getRevisionNumber());
72 query.add(AuditEntity.relatedId("person").eq(person.getId()));
73 query.addProjection(AuditEntity.id().count("id"));
74 return ((Long)query.getSingleResult()).intValue();
75 }
76 }
77
78 public int countMembers(Team team) {
79 checkNotInPriorView("AgentDaoImpl.countMembers(Team team)");
80 Query query = getSession().createQuery("select count(teamMember) from Team team join team.teamMembers teamMember where team = :team");
81 query.setParameter("team", team);
82 return ((Long)query.uniqueResult()).intValue();
83 }
84
85 public List<InstitutionalMembership> getInstitutionalMemberships(Person person, Integer pageSize, Integer pageNumber) {
86 AuditEvent auditEvent = getAuditEventFromContext();
87 if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
88 Query query = getSession().createQuery("select institutionalMembership from InstitutionalMembership institutionalMembership left join fetch institutionalMembership.institute where institutionalMembership.person = :person");
89 query.setParameter("person", person);
90 setPagingParameter(query, pageSize, pageNumber);
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 setPagingParameter(query, pageSize, pageNumber);
96 return (List<InstitutionalMembership>)query.getResultList();
97 }
98 }
99
100 public List<Person> getMembers(Team team, Integer pageSize, Integer pageNumber) {
101 checkNotInPriorView("AgentDaoImpl.getMembers(Team team, Integer pageSize, Integer pageNumber)");
102 Query query = getSession().createQuery("select teamMember from Team team join team.teamMembers teamMember where team = :team order by sortindex");
103 query.setParameter("team", team);
104 //query.addOrder( Order.asc("sortindex") );
105 setPagingParameter(query, pageSize, pageNumber);
106 return (List<Person>)query.list();
107 }
108
109 public Integer countAddresses(AgentBase agent) {
110 checkNotInPriorView("AgentDaoImpl.countAddresses(AgentBase agent)");
111 Query query = getSession().createQuery("select count(address) from AgentBase agent join agent.contact.addresses address where agent = :agent");
112 query.setParameter("agent", agent);
113 return ((Long)query.uniqueResult()).intValue();
114 }
115
116 public List<Address> getAddresses(AgentBase agent, Integer pageSize,Integer pageNumber) {
117 checkNotInPriorView("AgentDaoImpl.getAddresses(AgentBase agent, Integer pageSize,Integer pageNumber)");
118 Query query = getSession().createQuery("select address from AgentBase agent join agent.contact.addresses address where agent = :agent");
119 query.setParameter("agent", agent);
120 setPagingParameter(query, pageSize, pageNumber);
121 return (List<Address>)query.list();
122 }
123
124 /* (non-Javadoc)
125 * @see eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao#getTeamOrPersonBaseUuidAndNomenclaturalTitle()
126 */
127 public List<UuidAndTitleCache<Team>> getTeamUuidAndNomenclaturalTitle() {
128 List<UuidAndTitleCache<Team>> list = new ArrayList<UuidAndTitleCache<Team>>();
129 Session session = getSession();
130
131 Query query = session.createQuery("select uuid, nomenclaturalTitle from " + type.getSimpleName() + " where dtype = 'Team'");
132
133 List<Object[]> result = query.list();
134
135 for(Object[] object : result){
136 list.add(new UuidAndTitleCache<Team>(Team.class, (UUID) object[0], (String) object[1]));
137 }
138
139 return list;
140 }
141
142 /* (non-Javadoc)
143 * @see eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao#getTeamUuidAndTitleCache()
144 */
145 public List<UuidAndTitleCache<Person>> getPersonUuidAndTitleCache() {
146 Query query = getSession().createQuery("select uuid, titleCache from " + type.getSimpleName() + " where dtype = 'Person'");
147 return getUuidAndTitleCache(query);
148 }
149
150 @Override
151 public List<UuidAndTitleCache<Team>> getTeamUuidAndTitleCache() {
152 Query query = getSession().createQuery("select uuid, titleCache from " + type.getSimpleName() + " where dtype = 'Team'");
153 return getUuidAndTitleCache(query);
154 }
155
156 /* (non-Javadoc)
157 * @see eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao#getInstitutionUuidAndTitleCache()
158 */
159 @Override
160 public List<UuidAndTitleCache<Institution>> getInstitutionUuidAndTitleCache() {
161 Query query = getSession().createQuery("select uuid, titleCache from " + type.getSimpleName() + " where dtype = 'Institution'");
162 return getUuidAndTitleCache(query);
163 }
164 }