Project

General

Profile

Download (8.55 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.view.AuditEvent;
32
import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;
33
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
34
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
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
	@Override
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 crit.list();
58
		} else {
59
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(Institution.class,auditEvent.getRevisionNumber());
60
			query.add(AuditEntity.property("code").eq(code));
61
			return query.getResultList();
62
		}
63
	}
64

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

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

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

    
104
	@Override
105
    public List<Person> getMembers(Team team, Integer pageSize,	Integer pageNumber) {
106
		checkNotInPriorView("AgentDaoImpl.getMembers(Team team, Integer pageSize,	Integer pageNumber)");
107
		Query query = getSession().createQuery("select teamMember from Team team join team.teamMembers teamMember where team = :team order by sortindex");
108
		query.setParameter("team", team);
109
		//query.addOrder( Order.asc("sortindex") );
110
		setPagingParameter(query, pageSize, pageNumber);
111
		@SuppressWarnings("unchecked")
112
        List<Person> result = query.list();
113
		return result;
114
	}
115

    
116
	@Override
117
    public long countAddresses(AgentBase agent) {
118
		checkNotInPriorView("AgentDaoImpl.countAddresses(AgentBase agent)");
119
		Query query = getSession().createQuery("select count(address) from AgentBase agent join agent.contact.addresses address where agent = :agent");
120
		query.setParameter("agent", agent);
121
		return (Long)query.uniqueResult();
122
	}
123

    
124
	@Override
125
    public List<Address> getAddresses(AgentBase agent, Integer pageSize,Integer pageNumber) {
126
		checkNotInPriorView("AgentDaoImpl.getAddresses(AgentBase agent, Integer pageSize,Integer pageNumber)");
127
		Query query = getSession().createQuery("select address from AgentBase agent join agent.contact.addresses address where agent = :agent");
128
		query.setParameter("agent", agent);
129
		setPagingParameter(query, pageSize, pageNumber);
130
        @SuppressWarnings("unchecked")
131
        List<Address> result = query.list();
132
        return result;
133
	}
134

    
135

    
136
	@Override
137
	public List<UuidAndTitleCache<Team>> getTeamUuidAndNomenclaturalTitle() {
138
		List<UuidAndTitleCache<Team>> list = new ArrayList<>();
139
		Session session = getSession();
140

    
141
		Query query = session.createQuery("select uuid, id, nomenclaturalTitle from " + type.getSimpleName() + " where dtype = 'Team'");
142

    
143
		@SuppressWarnings("unchecked")
144
        List<Object[]> result = query.list();
145

    
146
		for(Object[] object : result){
147
			list.add(new UuidAndTitleCache<>(Team.class, (UUID) object[0], (Integer)object[1], (String) object[2]));
148
		}
149

    
150
		return list;
151
	}
152

    
153
	@Override
154
    public List<UuidAndTitleCache<Person>> getPersonUuidAndTitleCache() {
155
		Query query = getSession().createQuery("select uuid, id, titleCache from " + type.getSimpleName() + " where dtype = 'Person'");
156
		return getUuidAndTitleCache(query);
157
	}
158

    
159
	@Override
160
	public List<UuidAndTitleCache<Team>> getTeamUuidAndTitleCache() {
161
		Query query = getSession().createQuery("select uuid, id, titleCache from " + type.getSimpleName() + " where dtype = 'Team'");
162
		return getUuidAndTitleCache(query);
163
	}
164

    
165
	@Override
166
	public List<UuidAndTitleCache<Institution>> getInstitutionUuidAndTitleCache(Integer limit, String pattern) {
167
		Query query = getSession().createQuery("select uuid, id, titleCache from " + type.getSimpleName() + " where dtype = 'Institution'");
168
		return getUuidAndTitleCache(query);
169
	}
170

    
171

    
172
	@Override
173
    public List<UuidAndTitleCache<AgentBase>> getUuidAndAbbrevTitleCache(Integer limit, String pattern, Class clazz){
174
        Session session = getSession();
175
        String clazzString = "";
176
        if (clazz == null){
177
            clazzString = "";
178
        }else if (clazz.equals(Team.class)){
179
            clazzString = "dtype = 'Team'";
180
        } else if (clazz.equals(Person.class)){
181
            clazzString = "dtype = 'Person'";
182
        }  else if (clazz.equals(Institution.class)){
183
            clazzString = "dtype = 'Institution'";
184
        }
185

    
186
        Query query = null;
187
        String whereClause = " WHERE ";
188
        if (pattern != null){
189
            whereClause += "nomenclaturalTitle LIKE :pattern";
190
            if (pattern.startsWith("*")){
191
                whereClause += " OR titleCache LIKE :pattern";
192
            }
193
            if (clazzString != ""){
194
                whereClause += " AND " + clazzString;
195
            }
196

    
197

    
198
            query = session.createQuery("SELECT uuid, id, nomenclaturalTitle, titleCache FROM " + type.getSimpleName()  + whereClause);
199

    
200

    
201
            pattern = pattern + "%";
202
            pattern = pattern.replace("*", "%");
203
            pattern = pattern.replace("?", "_");
204
            query.setParameter("pattern", pattern);
205
        } else {
206
            if (clazzString != ""){
207
                query = session.createQuery("SELECT uuid, id, nomenclaturalTitle, titleCache FROM " + type.getSimpleName() + " WHERE " + clazzString);
208
            } else{
209
                query = session.createQuery("SELECT uuid, id, nomenclaturalTitle, titleCache FROM " + type.getSimpleName());
210
            }
211
        }
212
        if (limit != null){
213
           query.setMaxResults(limit);
214
        }
215

    
216
        return getUuidAndAbbrevTitleCache(query);
217
    }
218

    
219

    
220
}
    (1-1/1)