2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.agent
;
12 import java
.util
.ArrayList
;
13 import java
.util
.List
;
14 import java
.util
.UUID
;
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
;
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
;
38 public class AgentDaoImpl
extends IdentifiableDaoBase
<AgentBase
> implements IAgentDao
{
40 @SuppressWarnings("unused")
41 private static final Logger logger
= Logger
.getLogger(AgentDaoImpl
.class);
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;
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();
58 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(Institution
.class,auditEvent
.getRevisionNumber());
59 query
.add(AuditEntity
.property("code").eq(code
));
60 return (List
<Institution
>)query
.getResultList();
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();
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();
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();
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();
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();
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();
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();
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();
125 * @see eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao#getTeamOrPersonBaseUuidAndNomenclaturalTitle()
127 public List
<UuidAndTitleCache
<Team
>> getTeamUuidAndNomenclaturalTitle() {
128 List
<UuidAndTitleCache
<Team
>> list
= new ArrayList
<UuidAndTitleCache
<Team
>>();
129 Session session
= getSession();
131 Query query
= session
.createQuery("select uuid, nomenclaturalTitle from " + type
.getSimpleName() + " where dtype = 'Team'");
133 List
<Object
[]> result
= query
.list();
135 for(Object
[] object
: result
){
136 list
.add(new UuidAndTitleCache
<Team
>(Team
.class, (UUID
) object
[0], (String
) object
[1]));
143 * @see eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao#getTeamUuidAndTitleCache()
145 public List
<UuidAndTitleCache
<Person
>> getPersonUuidAndTitleCache() {
146 Query query
= getSession().createQuery("select uuid, titleCache from " + type
.getSimpleName() + " where dtype = 'Person'");
147 return getUuidAndTitleCache(query
);
151 public List
<UuidAndTitleCache
<Team
>> getTeamUuidAndTitleCache() {
152 Query query
= getSession().createQuery("select uuid, titleCache from " + type
.getSimpleName() + " where dtype = 'Team'");
153 return getUuidAndTitleCache(query
);
157 * @see eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao#getInstitutionUuidAndTitleCache()
160 public List
<UuidAndTitleCache
<Institution
>> getInstitutionUuidAndTitleCache() {
161 Query query
= getSession().createQuery("select uuid, titleCache from " + type
.getSimpleName() + " where dtype = 'Institution'");
162 return getUuidAndTitleCache(query
);