Project

General

Profile

Download (3.5 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 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.view;
11

    
12
import java.util.List;
13
import java.util.UUID;
14

    
15
import org.hibernate.Hibernate;
16
import org.hibernate.Query;
17
import org.hibernate.envers.AuditReader;
18
import org.hibernate.envers.AuditReaderFactory;
19
import org.joda.time.DateTime;
20
import org.springframework.stereotype.Repository;
21

    
22
import eu.etaxonomy.cdm.model.view.AuditEvent;
23
import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
24
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.DaoBase;
25
import eu.etaxonomy.cdm.persistence.view.IAuditEventDao;
26

    
27
@Repository
28
public class AuditEventDao extends DaoBase implements IAuditEventDao {
29
	
30
	protected AuditReader getAuditReader() {
31
		return AuditReaderFactory.get(getSession());
32
	}
33

    
34
	public int count() {
35
		Query query = getSession().createQuery("select count(auditEvent) from AuditEvent auditEvent");
36
		
37
		return ((Long)query.uniqueResult()).intValue();
38
	}
39

    
40
	public boolean exists(UUID uuid) {
41
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.uuid = :uuid");
42
		query.setParameter("uuid", uuid);
43
		return null != (AuditEvent)query.uniqueResult();
44
	}
45

    
46
	public AuditEvent findById(Integer id) {
47
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.id = :id");
48
		query.setParameter("id", id);
49
		return (AuditEvent)query.uniqueResult();
50
	}
51

    
52
	public AuditEvent findByUuid(UUID uuid) {
53
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.uuid = :uuid");
54
		query.setParameter("uuid", uuid);
55
		return (AuditEvent)query.uniqueResult();
56
	}
57

    
58
	public AuditEvent getNextAuditEvent(AuditEvent auditEvent) {
59
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.revisionNumber = :revisionNumber + 1");
60
		query.setParameter("revisionNumber", auditEvent.getRevisionNumber());
61
		return (AuditEvent) query.uniqueResult();
62
	}
63

    
64
	public AuditEvent getPreviousAuditEvent(AuditEvent auditEvent) {
65
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.revisionNumber = :revisionNumber - 1");
66
		query.setParameter("revisionNumber", auditEvent.getRevisionNumber());
67
		return (AuditEvent) query.uniqueResult();
68
	}
69

    
70
	public List<AuditEvent> list(Integer pageNumber, Integer pageSize, AuditEventSort sort) {
71
		if(sort == null) {
72
			sort = AuditEventSort.BACKWARDS;
73
		}
74
		
75
		Query query = null;
76
		
77
		if(sort.equals(AuditEventSort.FORWARDS)) {
78
			query = getSession().createQuery("select auditEvent from AuditEvent auditEvent order by auditEvent.timestamp asc");
79
		} else {
80
			query = getSession().createQuery("select auditEvent from AuditEvent auditEvent order by auditEvent.timestamp desc");
81
		}
82
		
83
		if(pageSize != null) {
84
		    query.setMaxResults(pageSize);
85
		    if(pageNumber != null) {
86
		        query.setFirstResult(pageNumber * pageSize);
87
		    } else {
88
		    	query.setFirstResult(0);
89
		    }
90
		}
91
		
92
		return (List<AuditEvent>)query.list();
93
	}
94

    
95
	public AuditEvent findByDate(DateTime dateTime) {
96
		Number id = getAuditReader().getRevisionNumberForDate(dateTime.toDate());
97
		AuditEvent auditEvent  =(AuditEvent)getSession().load(AuditEvent.class, id);
98
		Hibernate.initialize(auditEvent);
99
		return auditEvent;
100
	}
101
}
    (1-1/1)